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.