Gagne Ton Papa



1.1. Objectif

Le jeu Gagne Ton Papa consiste à résoudre des casse-tête en deux ou trois dimensions utilisant des formes en 3 dimensions.

Pour ce qui nous concerne, nous allons nous intéresser à la résolution de casse-tête en deux dimensions.

  • dans un premier temps, on désire obtenir un algorithme de résolution qui fournit toutes les solutions
  • dans un second temps, on aimerait disposer d'une interface graphique qui affiche les solutions à mesure qu'on les trouve

1.1.1. Exemple de résultat attendu

Proposez un programme Python qui recherche et affiche toutes les solutions lorsqu'on lui passe comme fichier un défi sous la forme :


defi_1.txt <-- nom du fichier
----------
4          <--- penta-4
LMarron    <-- liste des pièces suivant leur nom
SBleu
CJaune
...

Voici un exemple d'interface utilisant la librairie pygame de Python :

Gagne Ton Papa Pièces

1.2. Recherche de toutes les solutions

1.2.1. Les pièces

Elles sont au nombre de 18 :

1.2.2. Modélisation

L'aire de jeu dans laquelle on va positionner les pièces est modélisée sous forme d'une matrice $5 × N$ où $N$ vaut 3, 4, 5 ou 6. On pourra utiliser la librarie numpy pour représenter les matrices.

On modélise ensuite les pièces du jeu sous forme 2D.

une pièce (par exemple CJaune) sera définie par :

  • son nom "CJaune"
  • sa couleur sous forme de chaine de caractères "yellow" qui correspondra à un nom de couleur HTML
  • un identifiant sous forme d'une puissance de 2 ce qui permettra de différencier les pièces lorsqu'on va les placer sur l'aire de jeu

chaque pièce est composée de plusieurs formes qui correspondent aux différentes rotations (0, 90°, 180°, 270°) ainsi que le flip qui consiste à retourner la pièce. Certaines pièces n'auront au final qu'une seule forme ou 2, ou 4 ou 8.

Une forme sera composée :

  • d'une matrice de $y$ lignes et $x$ colonnes ainsi que de 0 ou de 1 qui correspondent au fait que dans la matrice une case est vide (0) ou pleine (1) :

Voici par exemple deux des quatre formes de CJaune :

3 lignes x 2 colonnes

1 1
1 0
1 1

2 lignes x 3 colonnes

1 1 1
1 0 1

Modélisez l'ensemble des pièces et de leurs formes et les stocker dans une BoiteDePieces.

1.2.3. Algorithme

Proposez un algorithme récursif avec retour-arrière (backtrack) qui permet de trouver toutes les solutions. La relation de récurrence est la suivante :

1.3. Travail

1.3.1. Implantation des pièces

Vérifier que les pièces s'affichent correctement, on implantera deux fonctions :

1.3.2. Lecture d'un défi

1.3.3. Algorithme de recherche

1.3.4. Interface graphique

On pourra s'inspirer par exemple du jeu de Pong.

1.4. Concours

Le gagnant sera celui qui aura proposé le projet le plus abouti et qui le nombre correct de solutions pour des défis donnés.