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:
- un pion est bien placé s'il figure à la même
position dans l'énigme,
- un pion est mal placé s'il doit figurer dans l'énigme,
mais à une autre position.
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
alors la session suivante est correcte :
|
4 bien placés |
2 mal placé |
| |
|
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.