Programme du pendu

Résolu/Fermé
AlexandreBnz Messages postés 1 Date d'inscription samedi 28 mai 2016 Statut Membre Dernière intervention 29 mai 2016 - 29 mai 2016 à 18:50
 Flaubert - 31 mai 2016 à 08:21
Bonsoir,
Etant élève en Terminale S, j'ai mon bac d'isn dans quelques jours
Je réalise un pendu
J'ai un problème d'affichage lorsque je saisis ma lettre, elle ne se met pas le mot si la lettre saisie est exacte, et si elle est ne figure pas dans le mot, l'image n'est pas remplacée
D'ailleurs, l'image ne s'affiche meme pas en position normale au commencement
Je vous joins ci-dessous mon programme
Merci d'avance pour tout aide


from tkinter import*
from random import*

Fen1 = Tk() #FENETRE 1
Fen1.geometry("800x600")
T="Le jeu du pendu"
Fen1.title(T)
can=Canvas(Fen1, width=800, height=600)
can.place(x=0, y=0)

def f_jouer():
global Fen1
Fen1.destroy()

fond = PhotoImage(file="image_pendu_.gif")
img = can.create_image(400,300,image=fond)

bouton=Button(Fen1, text="quitter", command=Fen1.destroy) # Bouton qui détruit la fenetre
bouton.place(x=600,y=100)

bouton1=Button(Fen1, text="Jouer", command=f_jouer) # Bouton qui lance la fenetre 2 et qui detruit la 1
bouton1.pack()
bouton1.place(x=200 ,y=100)


#Fenetre 2
Fen2=Tk()
Fen2.geometry("800x600")
T="Le jeu du pendu "
Fen2.title(T)
can2=Canvas(Fen2,width=800,height=600,bg= '#DACBDF')
can2.place(x=0,y=0)

mot = ''
mot_masque=''
texte=can2.create_text(400,400,fill='blue',font='arial',text='')


def sport():
global Fen2, mot
Sports =["Tennis","Football","Basketball","Hockey","Athletisme","Boxe","Golf","Natation","VolleyBall",]
mot=choice(Sports)
print(mot)
Mot_masque()


def metiers():
global Fen2, mot
Metiers =["Medecin","Policier","Infirmier","Avocat","Cuisinier","Musicien","Pompier","Photographe","Chirurgien",]
mot=choice(Metiers)
print(mot)
Mot_masque()

def langues():
global Fen2, mot
Langues =["Chinois","Anglais","Espagnol","Hindi","Français","Russe","Arabe","Portugais","Japonais","Italien",]
mot=choice(Langues)
print(mot)
Mot_masque()

def pays():
global Fen2, mot
Pays =["France","Portugal","Suisse","Italie","Angleterre","Pays Bas","Belgique","Allemagne","Suede","Autriche",]
mot=choice(Pays)
print(mot)
Mot_masque()

def Mot_masque():
global mot, texte
Mot_masque='_ '*len(mot)
can2.itemconfig(texte,text=Mot_masque)


#Bouton et place du boutons

bouton_sports = Button(Fen2, text ="Sports", relief=RAISED,command=sport)
bouton_metiers = Button(Fen2, text ="Metiers", relief=RAISED,command=metiers)
bouton_langues = Button(Fen2, text ="Langues", relief=RAISED,command=langues)
bouton_pays = Button(Fen2, text ="Pays", relief=RAISED,command=pays)

bouton_sports.place(x=700,y=100)
bouton_metiers.place(x=700, y=150)
bouton_langues.place(x=700, y=200)
bouton_pays.place(x=700, y=250)



### Fonction placement lettre correct
def lettre_mot(lettre) :
global partie, mot_masque, mot_choisi, nb_echecs, image_pendu

if partie :
nouveau_mot_masque = ""
lettre_mot=False
i=0

while i<len(mot_choisi):

if mot_choisi[i]==lettre: # Lettre entrée est dans le mot
nouveau_mot_masque = nouveau_mot_masque + lettre
lettre_mot = True
else: # Place la lettre entrée au bon endroit
nouveau_mot_masque = nouveau_mot_masque + mot_masque[i]
i+=1
mot_masque = nouveau_mot_masque
afficher_mot(mot_masque)

if not lettre_mot : # Si lettre fausse, on changer le dessin.
nb_echecs += 1
image = "pendu_"+str(nb_echecs)+".gif"
photo=PhotoImage(file=pendug)
imag_pendu.config(image=photo)
image_pendu.image=photo


if nb_echecs == 7: # Fin de partie : plus de vies
partie = False
afficher_mot(mot_choisi)
elif mot_masque == mot_choisi: # mot trouvé
partie = False

def init_jeu():
global mot_choisi, Mot_masque, image_pendu, mot, lettre
global nb_echecs, partie
nb_echecs = 0
partie = True
Mot_masque='_ '*len(mot)
print=Mot_masque
fichimg=PhotoImage(file="pendu_0.gif")
image_pendu=can.create_image(200,200,image=fichimg)



#Boutons pour les 26 lettres

bouton=[0]*26
for i in range(26):
bouton[i] = Button(Fen2,text=chr(i+65),command=lambda x=i+65:lettre_mot(chr(x)))
bouton[i].pack(side=LEFT )


#Boutons quitter et recommencer
bouton2 = Button(Fen2,text='Quitter',command=Fen2.destroy)
bouton2.place(x=700,y=500)

bouton1 = Button(Fen2,text='Recommencer',command=init_jeu)
bouton1.place(x=100,y=500)

init_jeu()

Fen2.update()
Fen2.mainloop()

1 réponse

Il y a énormément de choses qui ne vont pas dans ton code.

Si je teste en choisissant sport, voilà ce que j'obtiens :

Athletisme
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.4/tkinter/__init__.py", line 1536, in __call__
return self.func(*args)
File "temp.py", line 44, in sport
Mot_masque()
TypeError: 'str' object is not callable


Et c'est normal vu ce que tu fais dans ta fonction init_jeu.

def init_jeu():
    global mot_choisi, Mot_masque, image_pendu, mot, lettre
    global nb_echecs, partie
    nb_echecs = 0
    partie = True
    Mot_masque='_ '*len(mot)
    print=Mot_masque
    fichimg=PhotoImage(file="pendu_0.gif")
    image_pendu=can.create_image(200,200,image=fichimg)


Mot_masque n'est plus une fonction mais une chaine de caractères, donc attention au choix des noms de variables, fonction lors de leurs définitions.

print=Mot_masque Hum, print est une fonction python, quel est le but de la manœuvre de faire ceci ?

Il y a de multiples choses à revoir aussi dans ton code, utiliser entry de tkinter plutôt que 26 boutons.
Il ne doit y avoir qu'une seule fenêtre Tk dans un script.

Pour le problème d'images, je sais pas, la flemme de tester.
0