Université des Sciences et Technologies de Lille
Licence Miage - Programmation 1 - TP



Master Mind



Ce TP est consacré à la construction d'un paquetage permettant de jouer au Master Mind.

La règle du jeu

Le principe du Master Mind est de trouver une énigme qui est une combinaison de pions de cinq couleurs différentes. Pour cela, le joueur fait successivement des propositions de combinaison et, à chaque essai, le détenteur de l'énigme lui indique le nombre de pions bien placés et le nombre de pions mal placés: La somme des pions bien placés et mal placés est donc toujours inférieure au nombre de pions de l'énigme. Si par exemple l'énigme à trouver est

a b a c b b

alors la session suivante est correcte :


a a a b b b
4 bien placés 2 mal placé
 
a c a b b c
3 bien placés 1 mal placé

L'implémentation

La spécification du paquetage est réduite à une unique procédure, Jouer, qui permettra de mener une partie. On veut que l'implémentation permette de choisir librement la taille de l'énigme, c'est-à-dire le nombre de pions dans une combinaison, et le nombre maximal de coups dans une partie. Ces deux valeurs seront donc des paramètres de Jouer.

   package Master_Mind is
      procedure Jouer(Taille:in Positive;Nbre_Coup_Max:in Positive);
   end Master_Mind;
Dans le corps du paquetage, pour représenter les couleurs des pions, on définit un sous-type Couleur. Les combinaisons de pions sont simplement des tableaux non contraints de Couleur.

   subtype Couleur is Character Range 'a'..'e';
   type Combinaison is array (Positive range<>) of Couleur;

Écrire les procédures suivantes :


1.
Entrer(C:out Combinaison)

qui permet la saisie au clavier d'une combinaison,

2.
Compare_Pion(Enigme,Proposition:in Combinaison; N:in Positive; Bien_Place,Mal_place:out Boolean)

qui détermine si le pion de position N de la proposition figure de manière bien placée, mal placée dans l'énigme,

3.
Compare(Enigme,Proposition:in Combinaison;Nbre_Bp,Nbre_Mp:out Natural)

qui détermine le nombre de pions bien placés et le nombre de pions mal placés dans une proposition par rapport à l'énigme,

4.
Un_Coup(Enigme:in Combinaison;Gagne:out Boolean)

qui effectue un coup d'une session de Master-Mind: entrer une proposition et afficher le nombre de pions bien placés et mal placés par rapport à l'énigme. Le booléen Gagne prend la valeur TRUE si le coup est gagnant.

5.
et enfin , la procédure
Jouer(Taille:in Natural;Nbre_Coup_Max:in Positive)
qui effectue une partie entière : entrer l'énigme, puis jouer jusqu'à trouver l'énigme ou avoir épuisé le nombre de coups autorisés.