Exercice – jeu de Mastermind

Considérant le programme ci-dessous, pour lequel vous trouverez un exécutable de démonstration ici (qui dépend du Runtime de Visual Studio 2022)...

Note : prenez soin de configurer votre projet pour qu'il utilise la version la plus à jour du langage (dans Visual Studio, une fois le projet créé, faites Projet → Propriétés → Général → Norme du langage et utilisez « Aperçu - Fonctionnalités du dernier brouillon de travail en C++ (/std:c++latest) »

#include "Mastermind.h"
#include "Combinaison.h"
#include "Pinouche.h"
#include <iostream>
#include <locale>
using namespace std;

namespace decoration {
   ostream& mot_de_bienvenue(ostream &os) {
      return os << "Bienvenue a cette chic seance de Mastermind\n"
                << "But: trouver la position et la couleur de "
                << Combinaison::NB_PINOUCHES
                << " pinouches en "
                << Mastermind::MAX_ESSAIS_SUCCES
                << " essais maximum"
                << endl;
   }
   ostream& lister_options(ostream &os) {
      return os << "Les couleurs possibles sont:\n\t" << Pinouche::couleurs_possibles();
   }
   ostream& invite(ostream &os) {
      return os << "Entrez une combinaison ("
                << Combinaison::NB_PINOUCHES
                << " couleurs separees par des blancs):"
                << "\n\t";
   }
   ostream& erreur_entree(ostream &os) {
      return os << "Combinaison erronnee.";
   }
   Combinaison lire_combinaison(istream &is, ostream &os) {
      os << lister_options << '\n' << invite;
      Combinaison c;
      while (!(is >> c))
         os << erreur_entree << invite;
      return c;
   }
}

int main() {
   using namespace decoration;
   locale::global(locale{ "" });
   mot_de_bienvenue(cout);
   Mastermind mm;
   Combinaison c = lire_combinaison(cin, cout);
   cout << mm.essayer(c) << endl << endl;
   while (!mm.est_reussi(c) && !mm.partie_perdue()) {
      c = lire_combinaison(cin, cout);
      cout << mm.essayer(c) << endl << endl;
   }
   cout << mm << endl;
}

Rédigez les classes Mastermind et Combinaison. Truc : c'est plus facile à faire si vous écrivez aussi une classe Pinouche et si vous prenez soin de rédiger les opérateurs de projection sur un flux et d'extraction d'un flux pour vos types. Vous pouvez bien sûr ajouter d'autres classes (et d'autres fonctions et d'autres...) si vous le jugez pertinent, mais ne modifiez en rien le contenu du fichier ci-dessus.

Les sources d'un petit jeu de Mastermind

Vous trouverez ici quelques fichiers C++ proposant une solution possible au problème du petit jeu de Mastermind (jeu célèbre dont une version graphique sur Internet est disponible ici; la mienne est en format texte et toute simple mais illustre quelques chics techniques de programmation OO). Prudence : cette version permet de tricher (corrigez-la!).

Notez que le compilateur de Microsoft vous donnera peut-être un avertissement lors de la compilation de ces fichiers – le compilateur est dans l'erreur (du moins, pour des gens comme vous). Lisez le message d'avertissement avec attention pour faire disparaître cet avertissement qui, vous le constaterez, ne s'adresse pas à nous.


Valid XHTML 1.0 Transitional

CSS Valide !