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 :

Aide python pendu


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 13
    Points
    13
    Par défaut Aide python pendu
    Bonjour à tous !
    J'ai besoin d'aide pour comprendre l'action du module Tkinter ?
    Je developpe actuellement un pendu et lorsque je lance mon code , ce dernier m'ouvre une fenetre raw input mais pas de fenetre tkinter pouvez vous m'aider ?

    Le 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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    from __future__ import division
    from random import choice
    import os
    from Tkinter import *
     
    coups_restants = 10 # Creation de la valeur nombre de coups restants
     
    dictionnaire=["maison","baguette","utilisateur","veste","stylo","lunettes","ordianteur","informatique","imprimante","chariot","merci","bonjour","avant","manger","mobile","boulangerie","sortir","rentrer","carte","boitier","trousse","clavier","micro","souris","chien","tapis","lapin","chien","chat","oiseau","physique","formule","musculation","muscle","machine","prise","poisson","champion","sport","opposer","composant","route","chemin","voiture","recette","usine","cuisne","chocolat","porc","ferme","gros","gras","lard","saucisson","anticonstitutionnellement","chien"]#création de la liste de mot
    # Création du dictionnaire )
     
     
    fenetre=Tk()
    e = Entry(fenetre)
    lettre_choisi=[]
    e.place(x=350,y=50)
    e.focus_set()
    def callback():
        lettre_choisi.append(e.get())
        e.delete(0,END)
        return lettre_choisi
    b = Button(fenetre, text="Entrer la lettre", width=10, command=callback)
    b.place(x=500,y=45)
    c=Canvas(fenetre,width=100,height=100,bg="red")
    c.place(x=250,y=100)
    bienvenue=Label(fenetre,text="Bienvene sur le jeu du pendu \n Bonne chance!")
    bienvenue.place(x=400,y=10)
    fenetre.minsize(width=1000, height=700)
     
     
     
    def demande_lettre () :
        lettre = raw_input (" Quelle lettre avez-vous choisi ? ") # demande la lettre choisie à l'utilisateur
        lettre =lettre.lower () # transforme le choix de l'utilisateur en mnuscules
        if len(lettre)>1 or not lettre.isalpha (): # vérification que la lettre choisi soit bien une lettre et une seule lettre
            print " on ne vous a demandé qu'une lettre "
            return demande_lettre() # revoi au debut de la fonction
        else :
            return lettre
     
    def recup_mot () :
        return choice(dictionnaire)
     
    def recup_mot_masque(mot_complet, lettres_trouvees) :# fonction permettant de gerer le présence * dans le mot caché
        mot_masque = ""
        for lettre in mot_complet:
            if lettre in lettres_trouvees : # verifie avec les lettres deja trouvees
                mot_masque += lettre# ajoute cete lettre au mot masque
            else:
                mot_masque += "*"#met une etoile dans le mot
        return mot_masque #donne le mot cache
     
     
     
     
    continuer_partie = 'o'# Notre variable pour savoir quand arrêter la partie
     
    while continuer_partie != 'n':
        mot_a_trouver = recup_mot()
        lettres_trouvees = []
        mot_trouve = recup_mot_masque(mot_a_trouver, lettres_trouvees)
        nb_chances = coups_restants
        while mot_a_trouver!=mot_trouve and nb_chances>0:
            print("Mot à trouver {0} (encore {1} chances)".format(mot_trouve, nb_chances))# ecrit l'avancement du mot à trouver et le nombre de coups restants
            lettre = demande_lettre()
            if lettre in lettres_trouvees: # La lettre a déjà été choisie
                print("Vous avez déjà choisi cette lettre.")
            elif lettre in mot_a_trouver: # La lettre est dans le mot à trouver
                lettres_trouvees.append(lettre)# ajoute la lettre dans la liste
                print("...Bien joué...")
            else:
                nb_chances -= 1# reduit les coups restants de 1
                lettres_trouvees.append(lettre)# ajoute la lettre dans la liste
                print("... non, cette lettre ne se trouve pas dans le mot...")
            mot_trouve = recup_mot_masque(mot_a_trouver, lettres_trouvees)
     
        if mot_a_trouver==mot_trouve  :# A-t-on trouvé le mot ou nos chances sont-elles épuisées ?
            print("Félicitations ! Vous avez trouvé le mot {0}.".format(mot_a_trouver))#fin du jeu et affichage du mot.
        else:
            print("PENDU !!! Vous avez perdu.Le mot a trouver etait {0}!".format(mot_a_trouver))#fin du jeu et affichage du mot.
    os.system("pause")
    fenetre.mainloop()
    Merci par avance !

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Question: à quoi servent le Entry et le Button ?

    Si la réponse est "à permettre au joueur d'entrer une lettre pour le mot à deviner." alors la question deviendra "À quoi sert le raw_input ?"

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 13
    Points
    13
    Par défaut
    Bonsoir,
    Le raw-input est amené à disparaitre au profit de l'entry et du boutton.
    Merci.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 13
    Points
    13
    Par défaut
    Le code revu et corrigé :
    Code python : 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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    from __future__ import division
    from random import choice
    import os
    from Tkinter import *
     
    coups_restants = 10 # Creation de la valeur nombre de coups restants
     
    dictionnaire=["maison","baguette","utilisateur","veste","stylo","lunettes","ordianteur","informatique","imprimante","chariot","merci","bonjour","avant","manger","mobile","boulangerie","sortir","rentrer","carte","boitier","trousse","clavier","micro","souris","chien","tapis","lapin","chien","chat","oiseau","physique","formule","musculation","muscle","machine","prise","poisson","champion","sport","opposer","composant","route","chemin","voiture","recette","usine","cuisne","chocolat","porc","ferme","gros","gras","lard","saucisson","anticonstitutionnellement","chien"]#création de la liste de mot
    # Création du dictionnaire )
     
     
    def demande_lettre () :
        lettre = raw_input (" Quelle lettre avez-vous choisi ? ") # demande la lettre choisie à l'utilisateur
        lettre =lettre.lower () # transforme le choix de l'utilisateur en mnuscules
        if len(lettre)>1 or not lettre.isalpha (): # vérification que la lettre choisi soit bien une lettre et une seule lettre
            print " on ne vous a demandé qu'une lettre "
            return demande_lettre() # revoi au debut de la fonction
        else :
            return lettre
     
    def recup_mot () :
        return choice(dictionnaire)
     
    def recup_mot_masque(mot_complet, lettres_trouvees) :# fonction permettant de gerer le présence * dans le mot caché
        mot_masque = ""
        for lettre in mot_complet:
            if lettre in lettres_trouvees : # verifie avec les lettres deja trouvees
                mot_masque += lettre# ajoute cete lettre au mot masque
            else:
                mot_masque += "*"#met une etoile dans le mot
        return mot_masque #donne le mot cache
     
    def callback():
        lettre_choisi.append(e.get())
        e.delete(0,END)
        return lettre_choisi
     
     
     
    continuer_partie = 'o'# Notre variable pour savoir quand arrêter la partie
     
    while continuer_partie != 'n':
        fenetre=Tk()
        c=Canvas(fenetre,width=100,height=100,bg="red")
        c.place(x=250,y=100)
        bienvenue=Label(fenetre,text="Bienvene sur le jeu du pendu \n Bonne chance!")
        bienvenue.place(x=400,y=10)
        fenetre.minsize(width=1000, height=700)
        mot_a_trouver = recup_mot()
        lettres_trouvees = []
        mot_trouve = recup_mot_masque(mot_a_trouver, lettres_trouvees)
        nb_chances = coups_restants
        while mot_a_trouver!=mot_trouve and nb_chances>0:
            print("Mot à trouver {0} (encore {1} chances)".format(mot_trouve, nb_chances))# ecrit l'avancement du mot à trouver et le nombre de coups restants
            e = Entry(fenetre)
            lettre_choisi=[]
            e.place(x=350,y=50)
            e.focus_set()
            b = Button(fenetre, text="Entrer la lettre", width=10, command=callback)
            b.place(x=500,y=45)
            lettre=str(lettre_choisi)
            if lettre in lettres_trouvees: # La lettre a déjà été choisie
                print("Vous avez déjà choisi cette lettre.")
            elif lettre in mot_a_trouver: # La lettre est dans le mot à trouver
                lettres_trouvees.append(lettre)# ajoute la lettre dans la liste
                print("...Bien joué...")
            else:
                nb_chances -= 1# reduit les coups restants de 1
                lettres_trouvees.append(lettre)# ajoute la lettre dans la liste
                print("... non, cette lettre ne se trouve pas dans le mot...")
            mot_trouve = recup_mot_masque(mot_a_trouver, lettres_trouvees)
     
        if mot_a_trouver==mot_trouve  :# A-t-on trouvé le mot ou nos chances sont-elles épuisées ?
            print("Félicitations ! Vous avez trouvé le mot {0}.".format(mot_a_trouver))#fin du jeu et affichage du mot.
        else:
            print("PENDU !!! Vous avez perdu.Le mot a trouver etait {0}!".format(mot_a_trouver))#fin du jeu et affichage du mot.
    os.system("pause")
    fenetre.mainloop()
    Merci !

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Le mot clef "while" signifie "tant que", il s'agit donc d'une boucle qui s'éternisera jusqu'à ce condition ou un break n'y mette fin.

    En plaçant la création de tes widgets dans cette boucle, est-ce que tu réalises que tu vas recréer ces widgets à la vitesse que ta machine permet, c'est-à-dire très très vite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        while mot_a_trouver!=mot_trouve and nb_chances>0:
            print("Mot à trouver {0} (encore {1} chances)".format(mot_trouve, nb_chances))
            e = Entry(fenetre)        # on crée une nouvelle fenêtre à chaque boucle !
            lettre_choisi=[]
            e.place(x=350,y=50)
            e.focus_set()
            b = Button(fenetre, text="Entrer la lettre", width=10, command=callback) # on crée un nouveau bouton à chaque boucle !
            b.place(x=500,y=45)
            lettre=str(lettre_choisi)    # le joueur n'a pas encore eu le temps d'entrer une lettre !
    Crée ta fenêtre en un seul bloc de code, et ensuite traite les entrées du joueur à partir de la fonction callback.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 13
    Points
    13
    Par défaut
    Le probleme est que le " if lettre in lettre trouvees " necessite que la liste lettre soit en str . Or si jamais je met lettre=str(lettre_choisi) alors le programme m'affiche en boucle " Mot à trouver ****** (encore x chances )

    Je bloque la dessus depuis un moment, désolé si mes questions peuvent paraître bete mais je debute !

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par RazorBCK Voir le message
    Le probleme est que le " if lettre in lettre trouvees " necessite que la liste lettre soit en str . Or si jamais je met lettre=str(lettre_choisi) alors le programme m'affiche en boucle " Mot à trouver ****** (encore x chances )

    Je bloque la dessus depuis un moment, désolé si mes questions peuvent paraître bete mais je debute !
    Bonjour,

    Procédez par étapes :

    Dans une logique purement algorithmique, le jeu du pendu est une boucle qui tient tout.

    Dans la logique visuelle (dont Tkinter), c'est la fenêtre qui va tenir la boucle principale et vous allez devoir jongler avec les interactions utilisateur au sein de la fenêtre.

    Donc :

    1. créez d'abord votre interface graphique : qu'est-ce que vous allez afficher dans la fenêtre de jeu ?

    Cela vous aidera à y voir un peu plus clair.

    2. créez les fonctionnalités qui vont répondre aux interactions de l'utilisateur (comment entre-t-il une lettre ? où ça ?)

    Et seulement après, une fois que vous aurez bien visualisé comment l'utilisateur doit "parler" à votre fenêtre, construisez toute la logique du jeu autour des éléments de votre fenêtre.

    Normalement, on procède selon le schéma MVC (Modèle-Vue-Contrôleur) mais là, comme vous débutez, il vaut mieux commencer par VISUALISER à quoi le jeu doit ressembler.

    Vous rectifierez le tir au fur et à mesure, une fois que vous aurez une base solide.

    Exemple de fenêtre de jeu :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import Tkinter as TK
     
    import random
     
     
    class JeuDuPendu (TK.Tk):
     
        MAX_TENTATIVES = 10
     
        DICO = [
            "maison", "baguette", "utilisateur", "veste", "stylo",
            "lunettes", "ordinateur", "informatique", "imprimante",
            "chariot", "merci" , "bonjour", "avant", "manger", "mobile",
            "boulangerie", "sortir", "rentrer" , "carte", "boitier",
            "trousse", "clavier", "micro", "souris", "tapis", "lapin",
            "chien", "chat", "oiseau", "physique", "formule",
            "musculation", "muscle", "machine", "prise", "poisson",
            "champion", "sport" , "opposer", "composant", "route",
            "chemin", "voiture", "recette", "usine", "cuisine",
            "chocolat", "porc", "ferme", "gros", "gras", "lard",
            "saucisson", "anticonstitutionnellement",
        ]
     
     
        def __init__ (self):
     
            # super class inits
     
            TK.Tk.__init__(self)
     
            # 'self' représente ici la fenêtre du jeu
     
            self.title("Jeu du Pendu")
     
            self.resizable(width=False, height=False)
     
            # texte de bienvenue
     
            TK.Label(self, text="Bienvenue au Jeu du Pendu !").pack()
     
            # affichage du mot à trouver
     
            self.mot_cache = TK.StringVar()
     
            TK.Label(
     
                self,
     
                textvariable=self.mot_cache,
     
                foreground="blue",
     
                font="serif 32 bold",
     
            ).pack(padx=10, pady=10)
     
            # cadre pour présenter bien
     
            _frame = TK.LabelFrame(self, text="Choisissez une lettre, SVP")
     
            # entrée clavier du joueur
     
            self.saisie_joueur = TK.Entry(_frame)
     
            self.saisie_joueur.pack(
     
                side=TK.LEFT, expand=1, fill=TK.X, padx=5,
            )
     
            TK.Button(
     
                _frame,
     
                text="Jouer !",
     
                command=self.joueur_joue,
     
            ).pack(side=TK.RIGHT, padx=5)
     
            # fin du cadre de présentation
     
            _frame.pack(side=TK.TOP, padx=5, ipady=5)
     
            # bouton quitter
     
            TK.Button(
     
                self,
     
                text="Quitter le jeu",
     
                command=self.quit,
     
            ).pack(side=TK.RIGHT, padx=5, pady=5)
     
            # fin de la présentation graphique
     
            # place au jeu !
     
        # end def
     
     
        def jouer (self):
     
            # initialisation d'une nouvelle partie
     
            self.init_jeu()
     
            # boucle programme de la fenêtre (!)
            # c'est la fenêtre Tk() qui dicte la boucle du jeu
            # et non pas la boucle du jeu qui dicte la fenêtre
     
            # attention: vous êtes en mode GRAPHIQUE !
     
            self.mainloop()
     
        # end def
     
     
        def init_jeu (self):
     
            # mettez ici l'initialisation du jeu :
     
            # réinitialiser nb tentatives
            # sélectionner mot à deviner
            # afficher mot à deviner
            # effacer potence
            # détacher le futur pendu, lui donner à boire ?
     
            # remplacer ceci par votre propre code (exemple bidon) :
     
            # réinitialiser nb tentatives
     
            self.nb_tentatives = self.MAX_TENTATIVES
     
            # extraire mot à trouver
     
            _mot = self.mot_a_trouver = random.choice(self.DICO)
     
            # afficher mot partiellement masqué
     
            self.mot_cache.set(
     
                _mot[0] + ("*" * (len(_mot) - 2)) + _mot[-1]
            )
     
            # etc, etc...
     
        # end def
     
     
        def joueur_joue (self):
     
            # mettez ici la réponse à apporter
            # à la lettre proposée par le joueur :
     
            pass # remplacer ceci par votre code
     
        # end def
     
    # end class JeuDuPendu
     
     
    # démarrer le programme :
     
    mon_jeu = JeuDuPendu()
     
    mon_jeu.jouer()
     
    exit(0)
    @+.

Discussions similaires

  1. Aide python mini projet ISN
    Par Trirouson dans le forum Général Python
    Réponses: 22
    Dernier message: 19/12/2013, 20h01
  2. Aide Python [From turtle import*]
    Par tuture38 dans le forum Général Python
    Réponses: 3
    Dernier message: 16/02/2013, 15h40
  3. Demande d'aide pour extraire des données Excel à l'aide python
    Par userinfo dans le forum Général Python
    Réponses: 5
    Dernier message: 05/01/2013, 11h45
  4. Aide Python et Apache 2
    Par otobenzina dans le forum Linux
    Réponses: 1
    Dernier message: 12/05/2012, 10h04
  5. aide python et apache2
    Par otobenzina dans le forum Apache
    Réponses: 1
    Dernier message: 12/05/2012, 01h09

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