Projet Algorithmique et Programmation

Nous voulons réaliser un jeu de Master-Mind en mode texte. Le but du MasterMind est trouver une combinaison de couleurs mystère. Le joueur fait une proposition, si c’est la combinaison mystère, il à gagné. Sinon on lui répond le nombre de couleurs bien placées dans la combinaison mystères et le nombre de couleurs mal placées appartenant à la solution.

Remarque: Le but du projet n’est pas uniquement de produire un programme qui fonctionne (même si cela est plus gratifiant). Vous êtes supposés fournir un travail à la fois en algorithmique et en programmation. Les deux parties seront évaluées.

Règles du jeu

Les règles du jeu d’une manche sont imposées, le déroulement d’une partie est libre (il vous faudra faire preuve d’imagination). Cependant nous vous demandons le minimum suivant :

  • Mode un joueur.
  • Mode deux joueurs.
  • Mode zéro joueur.

Mode un joueur

Basique
L’ordinateur choisit une combinaison, le joueur dispose d’un certain nombre de coup pour la trouver.
Survivant
Le joueur dispose d’un nombre de coup total pour trouver toutes les combinaisons. On peut imaginer que certaines actions lui permettent de regagner des coups.
Survivant extrême
Même règle que le survivant, sauf que le temps entre en jeu. (Faites simple pour commencer)

Mode deux joueurs

Duel
Chaque joueur saisit sa combinaison. L’autre joueur doit trouver la combinaison avant le suivant. A vous de voir s’il vaut mieux entrelacer les coups ou non. Attention à l’égalité, servez vous par exemple du temps pour définir le vainqueur.
Tournoi
L’ordinateur détermine les combinaison, en suite les règles du mode survivant ou survivant extrême s’appliquent.

Le système de point sont laissés libres.

Cette liste n’est bien entendu pas exhaustive, nous encourageons les groupes à trouver des idées originales permettant de rendre leur jeu plus intéressant et/ou amusant.

Mode zéro joueur

L’ordinateur choisit une combinaison. Comme il est un peu schizophrène il essaye ensuite de la trouver.

Ligne de commande

L’exécutable de votre programme se nommera mmind. Il se lancera de la manière suivante :

./mmind [-0|-1-|2] [-m <mode_de_jeu>] [dictionaire] [-h]

-0|-1|-2
Nombre de jours. Valeur par défaut 1
-m mode_de_jeu
le nom du mode de jeu parmi les modes disponibles
dictionaire
Nom du fichier de dictionnaire (voir section suivante).
-h
L’aide de la ligne de commande (n’oubliez pas de lister les modes de jeu disponibles)

Pour gérer les options sur la ligne de commandes, utilisez man 3 getopt.

Format des données

Dans un premier temps les combinaisons proposés par l’ordinateur seront tirées au hasard.

Par la suite les combinaisons mystères seront lues depuis un fichier (un dictionnaire). Afin de pouvoir échanger vos dictionnaires préférés avec vos collègues, nous standardisons leur format.

La première ligne du fichier est le titre du dictionnaire. Le reste du fichier est une liste de combinaisons mystères, une par ligne.

  • Les lignes commençant par # sont des commentaires, elle seront ignorées.
  • Les lignes vides seront ignorée.
  • Une ligne valide commence par une lettre ou un chiffre donnant le nombre de couleurs disponibles. Le reste de la ligne est composé de chiffres ou de lettres représentant la combinaison. Les caractères peuvent ou pas être séparés par des espaces. En plus des lettres/chiffres, une ligne pourra contenir le caractère ?, dans ce cas il sera remplacé par une couleur aléatoire parmi les couleurs non présentes dans la combinaison (si possible). Le caractère * quand à lui, représente une couleur aléatoire déjà présente dans la combinaison (si c’est possible).

Remarque : La regle des ? et * sera aussi utilisée lors des saisies au clavier (… tiens mais c’est en fait probablement la même fonction …)

Modalités

Les projets sont à rendre avant le (date a définir) 17h. Aucun document ne sera accepté après cette date.

Le travail sera fait par groupe de 3, les membres devant faire partie du même groupe de T.P.

Vous devez rendre :

  1. Un document écrit comprenant :

Un (bref) rapport d’analyse où vous exposez :

  • Vos choix d’implémentation (structure du programme par exemple)
  • Expliquez les méthodes utilisées pour les opérations complexes
  • Détaillez les algorithmes intéressants.
  • Si cela vous semble nécessaire, les particularités d’implémentation en C.

Ce document devra être déposé au secrétariat électronique, et nulle part ailleurs (pas de casier, bureau ou autre).

  1. Les fichiers source en C de vos programmes, le Makefile, et tout autre fichier vous semblant utile (dictionnaires, manuel d’utilisation.). Il est à noter que vos programmes doivent compiler sans problème sur un autre utilisateur que votre compte, sans message d’erreur, warning* ou autre (en tapant simplement :make).

Les fichiers devront être transmis à votre chargé de TD selon la méthode de son choix (SVN, dossier ou archive)

Les fichiers ayant une date postérieure à la date limite seront pénalisés.

Ressources

  • Un Makefile relativement générique. Pour les explications allez voir ici

  • Un guide sur l’utilisation de SVN et le pdf associé.

  • Un fichier de configuration pour SVN à l’Enseirb-Matmeca : mkdir -p ~/.subversion && wget http://www.labri.fr/perso/renault/working/teaching/projets/files/config-subversion -O ~/.subversion/config

  • Les règles du jeu du Master-Mind.