Projet AP1 : Mastermind

Transcription

Projet AP1 : Mastermind
Projet AP1 : Mastermind
Présentation :
Le jeu de mastermind est bien connu :
http://fr.wikipedia.org/wiki/Mastermind
Ce jeu se joue à 2 joueurs. Un premier joueur
choisit une combinaison de 4 pions parmi
ceux de 6 couleurs. Le deuxième joueur doit
découvrir la combinaison choisie. Sur
l'image, la combinaison à deviner est :
rouge, bleu, jaune et noir. Elle n'est pas vue
du deuxième joueur car elle est dissimulée
derrière le cache.
Supposons que Alice doive découvrir la combinaison choisie par Bob.
Alice propose une première combinaison. Bob lui indique combien de pions de couleurs sont bien placés à
l'aide de fiches :
- une fiche blanche par pion de la bonne couleur mais à la mauvaise place.
- une fiche noire par pion de la bonne couleur à la bonne place.
Alice fait ensuite une seconde proposition, Bob indique le résultat de son évaluation
et ainsi de suite.
La manche s'arrête quand
- Alice a trouvé la bonne combinaison (Bob a répondu 4 noires) : Alice gagne la manche
- il n'y a plus de place sur le jeu pour faire une nouvelle proposition : Bob gagne la manche
Pour la manche suivante, c'est Alice qui choisit la combinaison et Bob qui la cherche
Par exemple, ci-dessus Alice a bien placé un pion rouge et mal placé un pion noir, Bob a répondu par une fiche
noire et une fiche blanche.
Pour la seconde combinaison le bleu et le rouge sont bons mais mal placés et Bob a répondu par 2 fiches
blanches.
Il existe des variantes :
- il peut être admis ou non des répétitions de couleurs pour le choix des 4 pions
- il peut y avoir une combinaison plus de 4 pions et/ou le choix peut se faire parmi plus de 6 couleurs
- il peut y avoir un plateau double : chacun fait sa combinaison et chacun fait sa proposition en même temps
que l'autre. Le gagnant de la partie est celui qui trouve avant l'autre et marque 2 points l'autre 0. En cas
d'égalité, chacun marque 1 point. Le jeu s'arrête après un nombre convenu de parties ou (variante) lorsque un
joueur a dépassé un nombre de points fixé au départ.
Travail demandé :
Le jeu se fera contre l'ordinateur qui pourra prendre le rôle d'Alice ou celui de Bob avec éventuellement tout ou
partie des variantes proposées et d'autres si vous avez des propositions.
Hormis le déroulement des parties, il y a 2 grandes phases à réaliser.
Chacune d'entre elles se répétant
Phase 1 (simple) rôle de Bob :
- L'ordinateur a choisi aléatoirement une combinaison (secrète)
- L'ordinateur évalue ensuite chaque proposition du joueur humain (rôle d'Alice)
Phase 2 rôle d'Alice :
- L'ordinateur propose une combinaison
- Le joueur humain (rôle de Bob) donne son évaluation (en fonction de sa combinaison secrète) puis l'ordinateur
propose une nouvelle combinaison en fonction des évaluations précédentes.
La phase 1 est simple : une combinaison aléatoire et pour l'évaluation, une suite de comparaisons.
La phase 2 est plus compliquée car elle demande la mise en œuvre d'un algorithme qui va permettre à
l'ordinateur d'effectuer une proposition cohérente avec celles qu'il a déjà faites et des évaluations qui lui ont été
fournies.
Vous devrez prévoir aussi une évaluation de votre algorithme (dans votre compte-rendu) en effectuant des tests
(une centaine, dans lesquels joueront les 2 rôles : Alice et Bob) qui consistent à déterminer (empiriquement) le
nombre moyen de propositions que fait l'ordinateur pour gagner une partie.
Déroulement :
Chaque semaine un compte-rendu du travail effectué par chacun des membre du binôme (qui a fait quoi) devra
être fourni.
Après la première semaine, la phase 1 devra être opérationnelle. Le nombre de pions et de couleurs disponibles
(<11) devront être paramétrables.
On se contentera (pour cette première semaine), de combinaisons chiffrées par exemple
fonction choix_alea :int,int → str
le premier entier pour le nombre de pions le second pour le nombre de couleurs
exemple : choix_alea(4,6) → "0304"
on fera, dans un deuxième temps, correspondre une couleur à chacun des chiffres
0304 pour bleu vert bleu rouge par exemple
fonction evalue : str,str → couple d'entiers
la proposition, la combinaison secrète → le nombre de pions de la bonne couleur bien placés, le nombre de
pions de la bonne couleur mal placés
exemple : evalue("0304","2350") → (1,1)
A l'issue de cette première étape, le programme devra pouvoir choisir une combinaison secrète, attendre une
proposition, l'évaluer et recommencer jusqu'à ce que la proposition corresponde au bon choix de départ et
afficher le nombre de coups joués. Exemple : à trouver : 5320 ( choisi par l’ordinateur ceci reste secret)
viennent ensuite les propositions du joueur et entre ( ) : les réponses de la machine
1 3345 (1, 1)
2 4310 (2, 0)
3 5312 (2, 1)
4 5320 (4, 0)
La 2éme semaine, proposition de l'algorithme de recherche : comment va faire l'ordinateur pour effectuer une
nouvelle proposition qui tienne compte des propositions et des évaluations précédentes ( indication, ne pas
raisonner en tant qu'être humain, mais penser qu'une machine peut explorer un très grand nombre de solutions
en un minimum de temps) : à discuter avec l'enseignant
Par la suite viendront dans l'ordre : phase 2, évaluation de l'algorithme de recherche, déroulement de la phase
de jeu « standard » et éventuellement création de variantes. Exemple d'évaluation de l'algorithme :
sur 100 parties : moyenne,maxi : (4.6, 6)
signifie qu'il faut en moyenne, sur 100 parties, entre 4 et 5 propositions pour trouver la bonne combinaison,
sans jamais dépasser 6 propositions.
Le jeu se fera sous forme de texte l'ordinateur écrira rouge vert bleu jaune le joueur aurait proposé rvbj
Mais ceux qui le souhaiteront pourront en plus fournir une version graphique en mettant en application le
chapitre 8 page 79 « utilisation de fenêtres et de graphismes » du polycopié du premier semestre qui était hors
programme mais qui explique comment traiter l'environnement graphique.
Il est aussi possible d'utiliser le module turtle (vu au premier semestre), il dispose d'une instruction "circle" pour
dessiner les trous pour les pions et des fiches peuvent être dessinées grâce à l'instruction "dot".