Programmation du jeu "Master-Mind"

1) Les Règles

2) L'analyse de l'algorithme du codificateur

3) L'analyse détaillée de l'algorithme du codificateur

4) Une solution

--------------------------------------------------------------------------------------------------------------------------

1) Les Règles :

   On les trouve sur https://fr.wikipedia.org/wiki/Mastermind

   Le jeu se présente sous cette forme : Jeu du Master Mind

   En voici un résumé :

  Le Master Mind est un jeu de société pour deux joueurs dont le but est de trouver un code
  (couleur et position de 4 pions) en 12 coups.

   C'est un jeu de réflexion, et de déduction. 

   Le jeu se présente sous la forme d'un plateau perforé de 12 rangées de 4 trous pouvant accueillir
  des pions de couleurs.

   Les 6 couleurs sont : jaune, bleu, rouge, vert, blanc, noir (on utilisera les caractères 1, 2, 3, 4, 5, 6)

   Il y a également des petits pions noirs et blancs utilisés pour donner des indications à chaque étape
  du jeu.

   Le jeu se joue à deux : un codificateur et un décodeur.

   Le but est de deviner, par déductions successives, la couleur et la position des 4 pions cachés
  derrière un écran. 

 

   Déroulement du jeu

   Le codificateur cache, derrière un écran, la combinaison formée par 4 pions de son choix .
    Il doit prendre soin de ne pas révéler la couleur et la répartition dans les trous des pions.
    Rien ne l'empêche d'en choisir plusieurs d'une même couleur. 

   Son adversaire, le décodeur, est chargé de déchiffrer ce code secret.
  Il doit le faire en 12 coups au plus.
  Il place 4 pions dans les trous de la première rangée.
  Le codificateur répond au décodeur de la manière suivante :

   - il indique par une fiche NOIRE  
    si l'un des pions correspond par sa position ET sa couleur à un pion de sa combinaison.

   - il indique par une fiche BLANCHE
    si l'un des pions correspond uniquement par sa couleur à un pion de sa combinaison.

   - il indique rien                 
    s'il n'y a aucune correspondance.


   Après chaque réponse du codificateur, le décodeur continue de poser des pions par rangées
  successives. 

   La tactique du décodeur consiste à sélectionner, en fonction des coups précédents, les couleurs et
  les positions, de manière à obtenir le maximum d'informations de la réponse du codificateur.
  Le nombre de propositions (ou essais) du décodeur est limité à 12. 

   Dans la plupart des cas, le décodeur s'efforce de se rapprocher le plus possible de la solution,
  compte tenu des réponses précédentes.

   Il peut aussi former une combinaison dans le seul but de vérifier une partie des conclusions des
  coups précédents.

    Quand le décodeur est arrivé à placer les 4 pions qui correspondent exactement par la couleur
  et la position à ceux de la combinaison du codificateur, la manche est GAGNÉE.

   

   À la fin de la manche, le codificateur obtient 1 point par rangée de pions d'investigation placée
  par le décodeur, qu'il ajoute à son total.

  La partie se joue en un nombre pair de manches de façon à équilibrer les chances en inversant
  les rôles à la fin de chaque manche. 

   Celui qui était codificateur devient décodeur et inversement.

   Le vainqueur est celui qui, une fois le même nombre de manches remportées, a marqué
    le plus de points.

   Il a donc fallu à son adversaire plus de coups pour déchiffrer les codes.


   Le jeu avec 4 pions et 6 couleurs permet 6**4 =  1 296 combinaisons.

   Le jeu avec 5 pions et 8 couleurs permet 8**5 = 32 768 combinaisons.

Le programme prendra la place du  "codificateur", et l'utilisateur du programme  le "décodeur".
=> NB : On peut, inverser les rôles !

--------------------------------------------------------------------------------------------------------------------------

2) L'analyse de l'algorithme du codificateur :

   1) Déclaration des constantes du jeu

   2) Production de la combinaison

   3) Demander une combinaison au décodeur

   4) Fournir la réponse au décodeur, tant qu'il n'a pas gagné ou
      s'il a atteint les 12 essais de combinaisons

   5) Fin du programme

   

--------------------------------------------------------------------------------------------------------------------------


3) L'analyse détaillée de l'algorithme du codificateur :

   1) Déclaration des constantes du jeu  :
      Se sont les constantes :
  - nombre de pion    dans une combinaison    :  4 (nb_pion)
  - nombre de couleur dans une combinaison :  6 (nb_couleur)
  - nombre d'essais maximum                             : 12 (max_essais)


   2) Production de la combinaison : 

      Pour les nb_pion pions on demande un nombre aléatoire de 1 à nb_couleur
      (ce nombre correspondant à la couleur)
    Une table CODE contient la combinaison des valeurs des nb_pion pions du codificateur

  

   3) Demander une combinaison au décodeur

      Si le nombre d'essais > max_essais : le décodeur a perdu. Fin du programme
      Il s'agit ici de demander nb_pion nombres, chacun devant être compris entre 1 et nb_couleur
      Une table ESSAI contient les valeurs des nb_pion pions du décodeur
      On pourra entrer les 4 pions par une seule saisie, en séparant chaque code couleur (de 1 à 6)
      par un point (".")
    Si on entre le caractère "?" alors on indique que l'on abandonne :
                                              on affiche le code CODE.
                                              Fin du programme


   4) Fournir la réponse au décodeur, tant qu'il n'a pas gagné ou
        s'il a atteint les max_essais essais de combinaisons

      Pour chaque pion (i) : Si CODE(i) = ESSAI(i)
                                              Alors NOIR = NOIR + 1
                                                        On invalide CODE(i) et ESSAIS(i) pour la recherche des BLANCS
                                      Si NOIR = nb_pion Alors le décodeur a gagné. Fin du programme

     Pour chaque pion (i) : Si pour ESSAI(i) il existe CODE(j) 
                                            Alors BLANC = BLANC + 1
                                                        On invalide CODE(i)
                NB : il ne faut plus vérifier s'il existe d'autre(s) CODE(j)

      On affiche "NOIR"=NOIR et "BLANC"=BLANC
      nombre d'essais = nombre d'essais + 1
      On itère sur la phase 3)


   5) Fin du programme

      On affiche "Fin du programme Master Mind"

--------------------------------------------------------------------------------------------------------------------------

4) Une solution :

       Master-Mind.xml (fichier XML Blockly)

      Program-Master-Mind-Basic.pdf (Fichier Small Basic)

      Le Master-Mind graphique V1 :  version HTML et JavaScript

      Le Master-Mind graphique V2  : épuré et paramétrable facilement

      Solution Graphique de MiCetF sur https://micetf.fr/mastermind/