Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu de Pendu

Python-Tkinter

    30 décembre 2016 à 20:14:57

    Bonsoir,
    Je dois créer un jeu de pendu sur python puis le faire fonctionner sur l'interface graphique Tkinter. J'ai fini de coder le pendu, mais je ne sais pas comment faire pour qu'il fonctionne sur tkinter, ni comment faire pour qu'à chaque erreur, l'image change. Si vous voulez bien m'accorder votre aide s'il vous plait, merci.

    Le code:

    #lettre dans mot
    def letter_word(letter, answer):
        positions= []

        #position_lettre
        x=0
        #on regarde chaque lettre du mot
        for alpha in answer:
            #lettre actuelle = lettre recherché
            if alpha == letter:
            #on ajoute la position a la liste x
                positions.append(x)
            x+=1

    #retourne la liste des positions
        return positions

    #affiche lettre trouvees
    def letter_found(positions,answer):
    #mot a afficher
        word=""

    #position_lettre
        x=0
        #on regarde chaque lettre du mot
        for letter in answer:
            #si lettre = lettre deja trouvé
            if x in positions:
                #on ajoute cette lettre au mot a word
                word+=letter
            else:
                #sinon, on met un tiret
                word+="-"
            x+=1
    #retourne le mot a afficher
        return word

    #ma liste de mots
    mots=["programmation", "python", "boa", "ordinateur", "ecran", "portable","fusil","voiture"]
    print("il y a", len(mots), "mots en tout, choisissez entre 1 et", len(mots))
    #choix de mot
    x=input("le mot numéro:")
    x=int(x)
    #si chiffre pas compris dans nombre de mots dans liste 
    while x>len(mots):
        print("Entre 1 et", len(mots))
        x=input("le mot numero: ")
        x=int(x)
    answer=mots[(x)-1]
    print(answer)
    #mot utilisés
    Used=[]
    #Essais
    Trials=0
    #lettres trouvés
    Found=[]

    #tant que l'utilisateur a encore de essais
    while Trials<10:
        my_guess=input("Pick a letter brother: ")
        while my_guess in Found:
            my_guess=input("Already used, pick another one bro: ")
    #on rajoute dans Found la lettre qu'on vient d'utiliser
        Found.append(my_guess)
        x=letter_word(my_guess, answer)
    #nombre d'essai augmente si liste vide, joueur pas trouvé lettre
        if x == []:
            Trials+=1
        Used+=x
        word=letter_found(Used,answer)
        print(word)
    #essais égal à 10, plus d'essais, perdu
        if Trials==10:
            print("You lost")
            break
    #mot a trouver = mot a afficher, gagné
        if word == answer:
            print("You won!")
            break
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      30 décembre 2016 à 20:22:53

      Tu peux utiliser l'objet Canvas sur tkinter et pour modifier l'image voir ICI par exemple !

      Pour démarrer avec tkinter, il y a suffisamment de tutoriels sur le net pour te débrouiller un minimum...

      • Partager sur Facebook
      • Partager sur Twitter
        30 décembre 2016 à 20:32:50

        Je sais que je dois créer un Canvas afin d'afficher l'image, un Label afin d'afficher mes réponses et un Entry pour demander au joueur d' entrer une réponse. J'ai ainsi fait quelques améliorations du programme mais sans pourtant réussir à bien le faire fonctionner.

        def pendu():

        def letter_word(letter, answer):
            positions= []
        
            x=0
            for alpha in answer:
                if alpha == letter:
                    positions.append(x)
                x+=1
        
            return positions
        
        def letter_found(positions,answer):
            word=""
        
            x=0
            for letter in answer:
                if x in positions:
                    word+=letter
                else:
                    word+="-"
                x+=1
        
            return word
        mots=["programmation", "python", "boa", "ordinateur", "ecran", "portable","fusil","voiture"]
        print("il y a", len(mots), "mots en tout, choisissez entre 1 et", len(mots))
        x=input("le mot numéro:")
        x=int(x)
        while x>len(mots):
            print("Entre 1 et", len(mots))
            x=input("le mot numero: ")
            x=int(x)
        answer=mots[(x)-1]
        print(answer)
        Used=[]
        Trials=0
        Found=[]
        
        while Trials<10:
            my_guess=input("Pick a letter brother: ")
            while my_guess in Found:
                my_guess=input("Already used, pick another one bro: ")
            Found.append(my_guess)
            x=letter_word(my_guess, answer)
            if x == []:
                Trials+=1
            Used+=x
            word=letter_found(Used,answer)
            print(word)
            if Trials==10:
                print("You lost")
                break
            if word == answer:
                print("You won!")
                break
        

        def submit():

        data=entr1.get()
        txt3.configure(text="Answer:"+str(pendu(data)))
        

        from tkinter import* fen1=Tk()

        txt1= Label(fen1, text='Le mot numéro: ') txt1.grid(row=1, sticky=E) entr1=Entry(fen1) entr1.grid(row=1, column=2) bou1= Button(fen1, text='Quitter', command=fen1.destroy) bou1.grid(row=4, column=2)

        txt2= Label(fen1, text='La lettre: ') txt2.grid(row=2, sticky=E) entr2=Entry(fen1) entr2.grid(row=2, column=2) bou2= Button(fen1, text='Submit', command=submit) bou2.grid(row=1, column=3)

        can1= Canvas(fen1, width=600, height=600, bg='white') photo=PhotoImage(file='one modified.gif') item=can1.create_image(300, 300, image=photo) can1.grid(row=1, column=5, rowspan=3, padx=10, pady=5)

        txt3= Label(fen1) txt3.grid(row=3, column=6) bou3= Button(fen1, text='Submit') bou3.grid(row=2, column=3)

        fen1.mainloop()

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          30 décembre 2016 à 20:48:48

          Regardes le lien que j'ai donné, on te montre avec itemconfigure comment modifier une image dans un Canvas.
          • Partager sur Facebook
          • Partager sur Twitter
            30 décembre 2016 à 20:54:47

            Merci beaucoup!

            Par rapport au "Entry", je sais qu'on peut obtenir ce que la personne tappe grâce à la fonction e.get() mais comment j'utilise ça après ? J'ai essayé de stocker dans une variable en faisant:

            def submit():

            data=entr1.get() txt3.configure(text="Answer:"+str(pendu(data)))

            mais je ne peux pas utiliser la variable dans le reste de mon programme après, elle n'est pas reconnue ...

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              30 décembre 2016 à 21:01:49

              Remets en forme correctement sur le site ou sur un site comme pastebin ton code, car là c'est illisible...
              • Partager sur Facebook
              • Partager sur Twitter
                30 décembre 2016 à 21:05:06

                Excusez moi, le lien vers le programme sur pastebin : http://pastebin.com/sy8SVJBW

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  30 décembre 2016 à 21:10:56

                  C'est bien ce que je pensais, des fonctions dans une fonction, pour un débutant je ne le recommande pas, et d'ailleurs même pour un pro, ça se fait que dans des situations spécifiques...

                  Ensuite tu mélanges du graphique et du console très embêtant avec des fonctions comme input qui devrait être remplacé par des objets Entry.

                  Il faudra déjà faire un peu le ménage et prêter attention aux conseils donnés ci-dessus.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 décembre 2016 à 21:16:29

                    Qu'est ce que vous me conseillez de faire ? Je suis complètement perdu et je n'ai pas énormément de temps devant moi non plus cependant ... J'aurais vraiment besoin de votre aide.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      30 décembre 2016 à 21:33:08

                      Tu devrais commencer par créer un code propre en mode console, sans print et input
                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 décembre 2016 à 21:45:18

                        D'accord, merci beaucoup pour votre aide ! Bonne soirée !

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          30 décembre 2016 à 21:47:22

                          Par exemple, voici une fonction qui fait 70% du boulot en mode console

                          >>> def replace(secret_word, word, letter):
                          ...     letters = list(word)
                          ...     for index, char in enumerate(secret_word):
                          ...         if secret_word[index] == letter:
                          ...             letters[index] = letter
                          ...     return ''.join(letters)
                          ... 
                          >>> secret = 'coucou'
                          >>> word = '******'
                          >>> word = replace(secret, word, 'c')
                          >>> word
                          'c**c**'
                          



                          • Partager sur Facebook
                          • Partager sur Twitter
                            30 décembre 2016 à 21:55:50

                            Je ne comprends pas comment ca marche ...

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              30 décembre 2016 à 22:05:07

                              Qu'est-ce que tu ne comprends pas ? Il suffit d'utiliser des print et ton interpréteur pour vérifier ce que fait chaque fonction...

                              >>> for index, char in enumerate(secret):
                              ...     print(index, char)
                              ... 
                              0 c
                              1 o
                              2 u
                              3 c
                              4 o
                              5 u
                              
                              >>> letters = list('******')
                              >>> letters
                              ['*', '*', '*', '*', '*', '*']
                              
                              >>> list(word)
                              ['c', '*', '*', 'c', '*', '*']
                              >>> 
                              >>> ''.join(list(word))
                              'c**c**'
                              




                              -
                              Edité par Anonyme 30 décembre 2016 à 22:07:52

                              • Partager sur Facebook
                              • Partager sur Twitter
                                30 décembre 2016 à 22:12:35

                                D'accord ! Ainsi je dois me baser sur ceci pour re-écrire totalement mon pendu .. merci beaucoup !

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Jeu de Pendu

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown