Mastermind en C

On se propose de programmer une variante du jeu Mastermind.

Règles du jeu

L’ordinateur choisi une combinaison secrètes de quatre couleurs distinctes parmi six. Le joueur humain (l’utilisateur) doit trouver cette combinaison en au plus dix tentatives.

A chaque tentative, il soumet sa proposition à l’ordinateur.

Ce dernier compare la proposition à son code secret et donne comme réponse deux nombres.

Le premier nombre (clés noir) correspond au nombre de couleurs bien placées, le second (clé blanche) au nombre de couleur qui sont présentes dans le code secret mais qui ne sont pas à la bonne place.

Par exemple :

Si le code est « Vert Jaune Rouge Bleu » et la proposition  » Bleu Blanc Rouge Vert », la clé noire vaudra un (car Rouge occupe la bonne place) et la clé blanche deux (car Bleu et Vert appartiennent au code mais ne sont pas bien placé).

Les couleurs possibles sont : Noir, Bleu, Vert, Blanc, Rouge, et Jaune.

Le joueur est déclaré vainqueur s’il trouve la combinaison secrète en moins de 10 essais.

But et mise en œuvre

Il faut concevoir un programme C qui permettra un joueur humain (l’utilisateur) de jouer contre la machine.

La combinaison secrète il choisit aléatoirement par l’ordinateur.

Il faut toutefois s’assurer que les quatre couleurs choisies pour composer le code soit bien distinctes.

Une fois le code secret choisi, la phase de jeu proprement dite peut commencer.

Elle se déroule dans un environnement graphique simuler avec une console composée : d’une grille de 10 lignes et de 4 colonnes (chaque ligne correspond à un essai) et est une grille de 10 lignes et de 2 colonnes qui correspondent aux clés noirs et blanches.

A chaque tour, le joueur doit saisir les combinaisons de couleurs.

La figure 1 représente environnement initial, la figure 2 l’environnement après trois essais infructueux (le code secret est celui de l’exemple précédent).

Une fois la proposition faite par le joueur, il a soumet à l’ordinateur en appuyant sur la touche entrée.

Ces derniers calculs alors les clés noirs et blanches et affiche le nouvel environnement en mettant à jour les essais et les clés.

Pour coder le jeu, on associera un entier à chaque couleur.

Nous utiliserons, entre autres, deux tableaux qui représenteront le code secret et la proposition du joueur.

On utilisera les déclarations suivantes :

typedef int Code [4] ;

Code code_secret ;

Code proposition ;

Si t est du type code, t[i] représente la couleur de la classe i.

Remarque :

  • La représentation fournie dans les figures n’est qu’un exemple, vous êtes libre de choisir votre propre interface.
  • Ce qui importe dans un premier temps est la réalisation d’un programme qui fonctionne correctement, ce n’est pas la qualité des graphisme. Si c’est beau et que ça marche pas bien, le programme ne vaut rien !
  • L’évaluation tiendra compte de la lisibilité du programme (choix pertinent des noms des variables, commentaires, présentation, …).

Exemple de code :

Mastermind : projet.c