MasterMindIntroductionCet applet est une réécriture en Java du célèbre 'MasterMind'. DescriptionCe jeu est très simple (au niveau des règles) : Votre adversaire, la machine en l'occurence, choisit des jetons de couleur dans un certain ordre, par exemple 4 pièces parmis 7 couleurs possibles. Vous savez combien de jetons on été choisis (par exemple 4) et combien de couleurs existent (par exemple 7). Votre but est de trouver ce qui a été choisi par votre adversaire (quelles couleurs et dans quel ordre). Pour cela, vous effectuez des tentatives. Une tentative consiste à faire une proposition de disposition de jetons de couleurs. Après chaque tentative, votre adversaire vous indique si vos couleurs sont bonnes et si elles sont bien placées. Vous obtenez un pion noir par jeton de couleur ayant la bonne couleur et étant bien placé et un pion blanc par jeton de bonne couleur mais mal placé. Vous avez gagné lorsque vous obtenez toutes les marques noires. Ce jeu existe en de multiples variantes en fonction du nombre de jetons choisis par l'adversaire, du nombre total de couleurs existantes et de la possibilité d'avoir plusieurs jetons de même couleur, des doubles (ou triples...), dans le choix de l'adversaire. Les deux exemples ci-dessous illustrent ces possibilités :
Mode d'emploiVous faites un essai en prenant des jetons de couleur, dans la ligne du bas ou ailleurs à l'écran, et en les mettant dans les cases marquées d'un petit cercle plein. Vous demandez la réponse en cliquant sur 'Get result', ce bouton ne fonctionnant que si la proposition ets complète c'est-à-dire que si tous les petits cercles noirs sont remplits par une couleur. Lorsque vous avez gagné, la machine découvre la solution. Si vous arrivez sur la dernière ligne, la machine a pitié et découvre aussi la solution. Si vous craquez, vous pouvez demander à la machine de trouver la solution à l'aide du bouton 'Solution'. Vous pouvez demander une aide de la machine à l'aide du bouton 'Hint' et enfin vous recommencez une partie à l'aide du bouton 'Play Again' qui remplace le bouton 'Solution' après affichage de celle-ci. La machine affiche en permanence un 'par' qui correspond à son temps moyen pour trouver la solution (une réglette affiche la progression de ses différentes tentatives). Les aides de la machine sont calculées par un programme qui ne regarde pas la solution. Cette routine est assez efficace (le remplissage de la règlette correspond a un jeu complet de la machine). Si vous souhaitez écrire un programme Java de résolution du MasterMind, l'applet est capable de tester votre algorithme. Bon jeu ! |
|||
|
|
||
Ecriture d'un algorithme de résolution
Si vous le souhaitez, vous pouvez vous essayer à la programmation java en écrivant un 'brain' de résolution du MasterMind. Celui-ci doit être une classe java qui hérite de la classe abstraite ' BK.MasterMind.MasterMindMachine'. Les descendants de cette classe sont invoqués par l'applet 'MasterMindApplet' afin de résoudre le problème ('Hint') et lors de l'utilisation du paramètre 'TestLength' de l'applet. Le nom de la classe à utiliser est donné par le paramètre 'Brain' de l'applet, la classe 'BKMachine1' étant utilisée par défaut. Le paramètre 'TestLenght' peut prendre comme valeur -1 si on veut tester la résolution par la classe de toutes les possibilités de jeu et n>0 si on veut tester la résolution de n jeux au hasard. Pour faire un 'brain', il faut implémenter les méthodes suivantes dans le 'brain' :
La variable d'instance 'mGame' de l'ancêtre peut être utilisée pour obtenir des informations sur les coups précédents :
Cette variable permet aussi d'accéder à des méthodes utilitaires :
L'ancêtre 'MasterMindMachine' fournit aussi des méthodes utilitaires :
Bien entendu, je suis à votre disposition pour toute information concernant l'écriture d'un 'brain'. |