Jeu Wordle : Implémentation Technique en C++

Découvrez les règles d'un jeu de devinette de mots similaire à Wordle. L'ordinateur sélectionne aléatoirement un mot d'une longueur connue. L'utilisateur propose des essais, et pour chaque lettre du mot esayé, le programme affiche une couleur indicative : vert si la lettre est correcte et bien placée, jaune si elle est présente mais mal positionnée, rouge si elle est absente du mot cible. L'utilisateur dispose de dix tentatives pour trouver le mot secret.

Voici un exemple : si le mot secret est "bless" et que l'utilisateur saisit "bleed", les couleurs affichées seront vert, vert, vert, jaune, rouge.

Implémentation du code

Configuration initiale

#define chemin_fichier "dictionnaire.txt"
#define code_reinitialisation "\033[0m"
#define code_couleur_rouge "\033[31m"
#define code_couleur_vert "\033[32m"
#define code_couleur_jaune "\033[33m"

#include <set>
#include <string>
#include <fstream>
#include <iostream>
#include <random>
#include <algorithm>

std::set<std::string> ensemble_mots;

Fonction de chargement du dictionnaire

void charger_dictionnaire() {
    std::ifstream fichier(chemin_fichier);
    std::string ligne;
    while (std::getline(fichier, ligne)) {
        size_t longueur = ligne.size();
        if (longueur >= 4 && longueur <= 6) {
            ensemble_mots.insert(ligne);
        }
    }
    fichier.close();
}

Fonction de sélection aléatoire

void choisir_mot_aleatoire(std::string& mot_cible) {
    static std::mt19937 generateur(std::random_device{}());
    std::uniform_int_distribution<size_t> distribution(0, ensemble_mots.size() - 1);
    auto iterateur = ensemble_mots.begin();
    std::advance(iterateur, distribution(generateur));
    mot_cible = *iterateur;
}

Fonction d'évaluation des essais

int evaluer_proposition(const std::string& proposition, const std::string& cible) {
    int correspondances_exactes = 0;
    if (proposition.size() != cible.size()) {
        std::cout << "Longueur incorrecte !";
        return 0;
    }
    for (size_t i = 0; i < cible.size(); ++i) {
        char caractere = proposition[i];
        if (caractere == cible[i]) {
            std::cout << code_couleur_vert << caractere << code_reinitialisation;
            ++correspondances_exactes;
        } else if (cible.find(caractere) != std::string::npos) {
            std::cout << code_couleur_jaune << caractere << code_reinitialisation;
        } else {
            std::cout << code_couleur_rouge << caractere << code_reinitialisation;
        }
    }
    std::cout << "\n";
    return correspondances_exactes;
}

Programme principal

int main() {
    int correspondances = 0;
    int tentatives_restantes = 10;
    std::string mot_secret, saisie_utilisateur;

    charger_dictionnaire();
    choisir_mot_aleatoire(mot_secret);

    std::cout << "Début du jeu\n";
    std::cout << "Le mot a " << mot_secret.size() << " lettres. Vous avez " << tentatives_restantes << " essais.\n";

    while (correspondances != mot_secret.size() && tentatives_restantes > 0) {
        std::getline(std::cin, saisie_utilisateur);
        correspondances = evaluer_proposition(saisie_utilisateur, mot_secret);
        --tentatives_restantes;
        if (correspondances == mot_secret.size()) {
            std::cout << "Bravo, vous avez gagné !\n";
            break;
        }
        if (tentatives_restantes == 0) {
            std::cout << code_couleur_rouge << "Échec ! Le mot était : " << mot_secret << code_reinitialisation << "\n";
        }
    }
    return 0;
}

Assurez-vous de remplacer le chemin du fichier dictionnaire dans la macro chemin_fichier. Le fichier doit contenir un mot par ligne pour garantir le bon fonctionnement du programme.

Étiquettes: C++ Wordle Jeu de devinette algorithmes Programmation console

Publié le 26 juin à 04h51