Jeu de Taquin

Conseil pour un projet.

La partie la plus importante (je pense) est la modélisation du projet et sa mise en mémoire, par exemple pour le taquin j'ai pris la décision de modéliser le taquin à l'aide d'une matrice de nombre entier, lors d'une action je modifie la matrice et seulement après je la représente graphiquement.

Si vous faites des maths c'est en partie pour apprendre à modéliser (une droite correspond à une équation, un point correspond à des coordonnées, une courbe à une fonction ...).

Après il faut se répartir le travail, si vous êtes deux c'est pour faire deux fois plus et pas pour que l'un commente le code de l'autre. Il faut éviter que l'un soit bloqué par le manque d'avancement de l'autre. Dans le projet Taquin l'un va faire la partie interne (travailler sur la matrice) et l'autre va faire la partie graphique, c'est généralement un bon découpage des taches. Souvent (dans les projets que j'ai vu) la partie interne était plus difficile que la partie graphique (c'est le 'chef' qui l'a fait) mais ici c'est l'inverse.

Partie graphique.

L'ensemble du code de la partie graphique doit être placé dans un fichier de nom graphique.py (par exemple). On sépare le programme en deux parties indépendantes pour otptimiser le travail du groupe.

Découper.

Projet

Créer une fonction decoupe(image,x,y,nb_colonnes,nb_lignes) qui prend une EZ.image et découpe un morceau comme sur l'exemple ci-dessous.



Créer 16 morceaux du Taquin.

Projet

Créer une fonction decoupe_toutes_les_cases(image,taille) qui prend une EZ.image et retourne une liste de 16 cases contenant toutes un morceau de l'image de taille donnée (voir l'exemple).



Image
Indice0123456789101112131415

Associer à une matrice donnée un dessin.

Projet

Créer une fonction genere_image(matrice,liste_des_images,taille) qui a une matrice dont les cases contiennent les nombres entier de 0 à 15 va associer l'image formée en utilisant les images de liste_des_images, taille donne la dimension des cotés des morceaux d'images. La fenetre graphique est à faire dans une autre fonction.

Si la matrice est :

414109
27113
10159
3658

et la liste_des_images est :

Image
Indice0123456789101112131415

la fonction affiche :

Récupérer la ligne et la colonne d'un click de la souris.

Projet

Créer un fonction recupere_click(taille) qui doit retourner un tuple de taille 3 :

Essayez :

Partie interne.

L'ensemble du code doit être placé dans un fichier de nom interne.py (par exemple). On sépare le programme en deux parties indépendantes pour otptimiser le travail du groupe.

Donnez la direction de la case 0.

Projet

Créer une fonction direction(matrice,ligne,colonne) qui doit dire si la case de la ligne et colonne données se trouve à coté de la case de numéro 0. Si oui elle doit retourner la direction ("NORD","EST","SUD","OUEST") de la case nulle sinon elle doit retourner "NON ADJACENTE".

Par exemple si la matrice est la suivante :

414109
27113
10159
3658

alors :

Essayez :

ligne : colonne :

Echangez deux cases.

Projet

Créer une fonction echange(matrice,ligne,colonne) qui doit échanger (si elles sont adjacentes) la case donnée et la case de numéro 0.

Par exemple si la matrice est la suivante :

414109
27113
10159
3658

alors :

Après echange(matrice,2,0) matrice est égal à :

414109
27113
01159
3658

Puis si on fait echange(matrice,3,2) la matrice ne change pas car la case de ligne 3 et colonne 2 (5) n'est pas adjacente à la case 0.

Une première version.

Projet

A partir de là, le projet est déjà viable, utiliser par exemple le fichier suivant :


	
	
	

Améliorations possibles (Pour la partie interne).

Mélanger le jeu.

Projet

Mélanger le jeu le jeu n'est pas si évident car il y a une logique à respecter (lien youtube).

Je propose de la faire en jouant aléatoirement plein de coups.

Sans recherche de performance, voici les étapes (une étape donne une fonction) :

  1. Donner la position de la case 0. Créer une fonction trouve_case_vide(matrice) pour ça.
  2. Si la matrice est :

    414109
    27113
    10159
    3658

    trouve_case_vide(matrice) = (2,1) (deuxième ligne et première colonne).

  3. Donner les directions des déplacement possibles de la case 0. Créer une fonction deplacement_possible_case_vide(matrice).
  4. Si la matrice est :

    414109
    27113
    10159
    3658

    alors deplacement_possible_case_vide(matrice) = ["EST","SUD","OUEST","NORD"].

    Si la matrice est

    414109
    27113
    01159
    3658

    alors deplacement_possible_case_vide(matrice) = ["EST","SUD","NORD"].

  5. Choisir aléatoirement une des directions précédentes et échanger le 0. (Chercher sur le net random.choice)
  6. Répéter un certain nombre de fois les étapes précédentes.

Faire un menu.

Projet

Ajouter un menu pour selectionner l'image.

Ajouter votre logo.

Ajouter des bruitages.

Faire une résoution automatique.

Projet

C'est beaucoup plus dur que le reste, programmer une résolution automatique.