IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Jeu Taquin


Sujet :

Tkinter Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Jeu Taquin
    Bonjour,

    Je suis étudiant en info et on me demande de rendre un TP qui est de faire le jeu du Taquin, de faire la partie graphique. Mais je n'y comprend rien. Je suis bloqué à un exercice dont je ne vois toujours aucune issue. L'énoncé est le suivant :

    "Le contrôleur de bouge case (1). Nous allons écrire une première version du contrôleur
    qui gère l'événement l’utilisateur a cliqué sur une image. Chaque bouton qui affiche un chiffre doit être
    associé à ce contrôleur. C’est une méthode ctrl_choisit_case(self) de VueTaquin, qui choisit
    aléatoirement une case du plateau, et demande au modèle de bouger cette case. La vue se met ensuite
    à jour.
    Dans le dessin ci-dessus, cela pourrait conduire au fonctionnement suivant : l’utilisateur clique sur la
    case 5, c’est la case 13 qui est choisie aléatoirement et permutée avec le vide (la case vide).
    Spécifiez puis écrivez la méthode ctrl_choisit_case(self)."


    Le problème dans mon code est que lorsque je clique sur une case , une case de vient bien vide mais du coup je me retrouve avec deux cases vides et non une seul, si je clique sur une troisième case je me retrouve avec trois cases vides, ca ne se termine jamais.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    from taquin import *
    import tkinter
    from random import randint
    class VueTaquin:
        def __init__(self,jeu):
            self.__jeu = jeu
            fenetre = tkinter.Tk()
            fenetre.title("Le Taquin")
            dim = self.__jeu.dim()
            self.__bouton_image = []
            self.__image = []
            for i in range(dim*dim):
                image = tkinter.PhotoImage(file=str(i)+".gif")
                self.__image.append(image)
            for i in range(dim):
                for j in range(dim):
                    if i == dim - 1 and j == dim - 1:
                        btn = tkinter.Button(fenetre,image=self.__image[0])
                        self.__bouton_image.append(btn)
                        self.__bouton_image[(i*dim)+j].grid(row=i,column=j)
                    else:
                        btn = tkinter.Button(fenetre,image=self.__image[(i*dim)+j+1])
                        self.__bouton_image.append(btn)
                        self.__bouton_image[(i*dim)+j].grid(row=i,column=j)
     
            btn_recommencer = tkinter.Button(fenetre,text="Recommencer")
            btn_recommencer.grid(row = dim + 1, column = 0)
     
            btn_quitter = tkinter.Button(fenetre, text="Quitter", command=fenetre.destroy)
            btn_quitter.grid(row = dim + 1, column = dim - 1)
            self.__fenetre = fenetre
            self.bouge_case()
     
        def clique(self):
            def ctrl_choisit_case():
                valeur = randint(0, len(self.__bouton_image)-1)
                self.__bouton_image[valeur]["image"] = self.__image[0]
            return ctrl_choisit_case
     
     
        def bouge_case(self):
            for i in range(self.__jeu.dim()) :
                for j in range(self.__jeu.dim()) : 
                    self.__bouton_image[self.__jeu.get(i,j)]["command"] = self.clique()
            self.__fenetre.mainloop()
     
     
     
    if __name__ == '__main__' :
        mon_appli = VueTaquin(Taquin())
    Je vous remercie pour votre temps,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Salut,

    Citation Envoyé par Caohm Voir le message
    Problème dans mon code est que lorsque je clique sur une case , une case de vient bien vide mais du coup je me retrouve avec deux cases vides et non une seul, si je clique sur une troisième case je me retrouve avec trois cases vides, ca ne se termine jamais.
    Comme on ne peut pas reproduire pas facile de savoir.
    *
    Et inutile de poster tout votre code pour "reproduire": réduisez le à minima pour virer tout ce qui n'a pas de rapport avec le problème histoire de pouvoir vous concentrer sur les instructions concernées.

    A ce moment là, si vous ne vous en sortez toujours pas, vous pourrez poster un code fonctionnel et minimal permettant de reproduire quelque chose.


    - W

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Salut,

    C'est quoi ce module taquin from taquin import * ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Salut,

    Tiens, j'avais du temps pour sortir les informations que vous ne donnez pas.

    Citation Envoyé par Caohm Voir le message
    Le problème dans mon code est que lorsque je clique sur une case , une case de vient bien vide mais du coup je me retrouve avec deux cases vides et non une seul, si je clique sur une troisième case je me retrouve avec trois cases vides, ca ne se termine jamais.
    Lorsqu'on clique sur un Button, on exécute seulement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       def clique(self):
            def ctrl_choisit_case():
                valeur = randint(0, len(self.__bouton_image)-1)
                self.__bouton_image[valeur]["image"] = self.__image[0]
            return ctrl_choisit_case
    Ce qui se résume à choisir un Button au hasard et remplacer son image par 0.
    Et donc effectivement, on se retrouve avec de plus en plus de cases "vides".

    Mais bon, vu le code, çà n'a rien de surprenant, non?

    Et si on veut permuter la case vide avec la case choisie, il manque quelques lignes de code...

    - W

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Salut,

    C'est quoi ce module taquin from taquin import * ?
    Salut,

    Ce module est le jeu du taquin mais en version txt

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Tiens, j'avais du temps pour sortir les informations que vous ne donnez pas.



    Lorsqu'on clique sur un Button, on exécute seulement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       def clique(self):
            def ctrl_choisit_case():
                valeur = randint(0, len(self.__bouton_image)-1)
                self.__bouton_image[valeur]["image"] = self.__image[0]
            return ctrl_choisit_case
    Ce qui se résume à choisir un Button au hasard et remplacer son image par 0.
    Et donc effectivement, on se retrouve avec de plus en plus de cases "vides".

    Mais bon, vu le code, çà n'a rien de surprenant, non?

    Et si on veut permuter la case vide avec la case choisie, il manque quelques lignes de code...

    - W
    Salut,

    Je pensais que cela aller ce remplacer c'est pourquoi j'étais surpris!

    Voila mon problème je n'arrive pas à permuter les deux cases, j'ai essayé en modifiant la position dans la grille mais cela ne fonctionne pas non plus. Aurais tu quelques indications ?

    Je te remercie,

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Saluit,

    Citation Envoyé par Caohm Voir le message
    Aurais tu quelques indications ?
    Le code que vous montrez est d'un niveau incohérent avec les questions posées.
    Si ce n'est pas vous qui l'avez écrit, je comprend que vous ayez des difficultés pour le corriger.

    Mais pour essayer de vous expliquer quelque chose, il faut essayer de se mettre à votre niveau (sinon vous ne comprendrez rien).

    On peut supposer que partant de la liste [ 0, 1, 2, 3, 4, 5 ], vous savez choisir une position au hasard et permuter son contenu avec le contenu de la position qui contient le 0.
    Et écrire une fonction qui effectue cette permutation à chaque appel.

    - W

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Saluit,



    Le code que vous montrez est d'un niveau incohérent avec les questions posées.
    Si ce n'est pas vous qui l'avez écrit, je comprend que vous ayez des difficultés pour le corriger.

    Mais pour essayer de vous expliquer quelque chose, il faut essayer de se mettre à votre niveau (sinon vous ne comprendrez rien).

    On peut supposer que partant de la liste [ 0, 1, 2, 3, 4, 5 ], vous savez choisir une position au hasard et permuter son contenu avec le contenu de la position qui contient le 0.
    Et écrire une fonction qui effectue cette permutation à chaque appel.

    - W
    Si je comprend bien, le mieux serait de permuter l’élément dans la liste et non l’élément dans la grid ?

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par Caohm Voir le message
    Si je comprend bien, le mieux serait de permuter l’élément dans la liste et non l’élément dans la grid ?
    La liste est juste un exemple.
    Si vous apprenez à le résoudre, vous aurez compris que faire (dans votre cas).
    C'est plus facile à résoudre car vous pouvez vous aider d'une feuille de papier et d'un crayon pour y réfléchir sans avoir l'esprit pollué par toutes les abstractions qui masquent la mécanique de base à fabriquer.

    - W

Discussions similaires

  1. Identification case blanche jeu Taquin
    Par anthonynguyen0 dans le forum Android
    Réponses: 4
    Dernier message: 13/03/2017, 15h55
  2. [Python 3.X] Besoin d'aide pour tkinter jeu taquin
    Par cilouc dans le forum Général Python
    Réponses: 1
    Dernier message: 18/04/2016, 23h04
  3. résolution du jeu Taquin avec la methode A*
    Par goldray dans le forum Intelligence artificielle
    Réponses: 1
    Dernier message: 19/02/2013, 12h50
  4. Question sur le jeu du Taquin
    Par DevloNewb' dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 23/02/2010, 10h55
  5. [C] Jeu du Taquin
    Par Lucas42 dans le forum C
    Réponses: 3
    Dernier message: 02/11/2006, 18h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo