Pour ce projet, nous allons nous intéresser au Mastermind. Dans ce jeu, un joueur doit deviner un code formé de jetons de couleurs élaboré par un autre joueur, et ce en le plus petit nombre d'essais possible. Après chaque essai, le joueur qui a conçu le code donne des indications sur les jetons bien placés ou de la bonne couleur mais mal placés à l'autre joueur.
Au début du jeu, un des deux joueur élabore un code qu'il note et cache à la vue de l'autre joueur.
Le code est une suite de jetons de couleurs. Selon les règles standard du jeu, les codes sont formés de 4 jetons, et il y a 6 couleurs de jetons possibles. Il est possible que des couleurs se répètent au sein d'un même jeu.
Ensuite, et jusqu'à ce qu'il trouve la bonne solution, le joueur qui doit deviner le code fait une proposition de code. L'autre joueur lui indique ensuite combien de jetons sont bien placés, et combien de jetons sont de la bonne couleur mais mal placés. Pour ce faire, le joueur utilise des pions rouges (bien placés) et blancs (mal placés). La position des pions n'apporte aucune indication sur la position des jetons bien ou mal placés.
Le décompte des pions rouges est relativement simple : Il suffit de compter combien de jetons sont de la bonne couleur et à la bonne position.
Pour les pions blancs, la logique est un peu plus complexe. Les pions blancs comptent le nombre de jetons correctement placés supplémentaires qu'il serait possible d'obtenir au maximum par permutation des jetons du code.
Pour ce projet, un ensemble de fichiers vous est fourni. Cliquez sur le lien ci-dessous pour les télécharger.
Télécharger les fichiers du projet.
Une fois l'archive téléchargée, ouvrez-la et déplacez-les fichiers sur votre espace de stockage persistant dans le dossier projets/mastermind.
Les fichiers sont les suivants :
main.py : Le script à exécuter pour lancer le jeu de Mastermind.solver.py : Le fichier qui contient les fonctions pour résoudre un Mastermind.state.py : Le fichier qui contient les fonctions pour manipuler l'état d'un Mastermind.Ces trois fichiers sont à mettre dans votre dossier projets/connect4. Pour cette première étape, nous allons principalement modifier le fichier state.py.
Le fichier solver.py sera le sujet de l'étape suivante.
Avant toute chose, nous devons réflechir à la façon dont nous allons représenter les codes en Python.
La solution suggérée pour ce projet est d'utiliser une liste de nombres. La longueur de la liste correspondra à la longueur du code. Chaque nombre de la liste correspondra à une couleur (1 pour la première couleur, 2 pour la suivante et ainsi de suite).
Pour cette première étape, vous allez devoir implémenter la fonction get_pegs pour compter le nombre de pions blancs et rouges étant donné le code proposé et la solution recherchée.
def get_pegs(candidate, solution):
passLa fonction doit retourner une paire de deux nombres entiers. Le premier représente le nombre de pions rouges, le second le nombre de pions blancs.
Le nombre de pions rouge correspond au nombre de positions où à la fois le code proposé et la solution recherchée ont la même couleur.
Le nombre de pions blancs doit correspondre au nombre de jetons qui peuvent être placés à la bonne position dans le code. Bien entendu, un jeton ne peut pas être placé à la position d'un autre pion déjà bien placé.
Indice : Les jetons bien placés peuvent être complètement ignorés à cette étape. Il est parfois plus simple de les supprimer à la fois du code proposé et de la solution recherchée dans le contexte de cette détermination.
Indice : Une fois un jeton mal placé mis à la bonne position, il est intéressant de le supprimer du code proposé et de la solution pour continuer le décompte.
Dans la prochaine étape, vous essaierez de concevoir une IA pour déterminer quel est le meilleur code à tenter étant donné une liste de codes possibles.
Pour essayer votre code, exécutez le script main.py.
Dans un premier temps, il vous sera demandé de façon cachée de concevoir un code. Pour cela, entrez 4 nombres entiers entre 1 et 6 séparés par des espaces.
Ensuite, passez l'ordinateur à l'autre joueur, qui devra rentrer ses essais de la même manière.
Après chaque essai, les pions rouges et blancs sont indiqués directement.
Vous pouvez changer le comportement de ce script main.py en modifiant le code à la toute fin du fichier.
Vous pouvez ainsi choisir de laisser l'ordinateur choisir un code au hasard, ou bien de ne pas indiquer de code.
Dans ce dernier cas, ce sera à vous d'indiquer les pions rouges et blancs.