""" Jeu du pendu 
  > Tire un mot d'une liste de vocabulaire courrant contenant 230 verbes, 73 adjectifs et 297 noms
  > Donne 10 chances au joueur pour trouver le mot : son score augmente de 10 (gagné) ou de -5 (perdu)
  version 2 : utilise tkinter pour le dessin du pendu et l'affichage (mot, message et score)                 """
from random import *
from tkinter import *

def affiche():
    cadre.itemconfig(pendu,image=photo[erreurs])
    mot_affiche.set(MOT)

def recommencer(event):
    global erreurs,cherche,jouer
    jouer=True
    cherche=True
    erreurs=0
    choix()
    saisie.pack()
    
def correction(MOT):
    global lettre
    reste,cherche,trouve=0,True,False
    lettre=saisir.get()
    for i in range(len(mot)-2):
        if mot[i+1]==lettre :
            MOT=MOT[0:2*(i+1)]+lettre.upper()+MOT[2*(i+1)+1:]
            trouve=True
    for i in range(len(MOT)):
        if MOT[i]=="_" :
            reste+=1
    if reste==0 :
        cherche=False
    saisir.set("")
    return MOT,cherche,trouve

def tirage():
    r=randint(0,2)
    type_mot=types[r]                   # choix du type
    f=open(fichiers[r],encoding="utf8")        
    liste_mots=f.read()                 # lecture de la liste des mots du type
    f.close()
    mots=liste_mots.split()
    mot=choice(mots)                    # choix du mot
    MOT=""
    for c in mot:
        if c in accents :               # enlever les accents du mot
            c=accents[c]
        MOT+=c
    etiquette1.configure(text="Deviner un "+type_mot)
    return MOT

def choix():
    global mot,MOT
    mot=tirage()
    MOT=""
    for i in range(len(mot)):
        if i==0 or i==len(mot)-1:
            MOT+=mot[i].upper()+" "
        else :
            MOT+="_ "
    affiche()

def jeu(event):
    global MOT,erreurs,cherche,trouve,score,jouer
    if erreurs<erreurs_max and cherche: 
        MOT,cherche,trouve=correction(MOT)
        if not trouve: erreurs+=1
        if erreurs_max==1+erreurs:
            etiquette1.configure(text="il ne reste plus qu'une chance, entrer une lettre. ")
        else : etiquette1.configure(text="il reste {} chances, entrer une lettre.".format(erreurs_max-erreurs))
        affiche()
    if jouer and (erreurs==erreurs_max or not cherche):
        if erreurs==erreurs_max and cherche:
            score-=5
            etiquette1.configure(text="PENDU! Le mot était {} - Score={} - Pour rejouer : barre espace".format(mot,score))
            cadre.itemconfig(pendu,image=photo[11])
        if not cherche:
            score+=10
            etiquette1.configure(text="BRAVO! - Score={} - Pour rejouer : barre espace".format(score))
            cadre.itemconfig(pendu,image=photo[12])
        saisie.pack_forget()
        jouer=False
    
fen = Tk()
fen.title("Jeu du pendu")

etiquette1=Label(fen,text='Entrer successivement des lettres minuscules au clavier pour trouver le mot')
etiquette1.pack()

cadre=Canvas(fen,height=300,width=500,borderwidth=0)
cadre.pack()

photo=[]
photo.append(PhotoImage(file='pendu/p0.png'))  #0
photo.append(PhotoImage(file='pendu/p1.png'))  #1    
photo.append(PhotoImage(file='pendu/p2.png'))  #2   
photo.append(PhotoImage(file='pendu/p3.png'))  #3   
photo.append(PhotoImage(file='pendu/p4.png'))  #4   
photo.append(PhotoImage(file='pendu/p5.png'))  #5   
photo.append(PhotoImage(file='pendu/p6.png'))  #6   
photo.append(PhotoImage(file='pendu/p7.png'))  #7   
photo.append(PhotoImage(file='pendu/p8.png'))  #8   
photo.append(PhotoImage(file='pendu/p9.png'))  #9   
photo.append(PhotoImage(file='pendu/p10.png')) #10 
photo.append(PhotoImage(file='pendu/p11.png')) #11 
photo.append(PhotoImage(file='pendu/p12.png')) #12
pendu=cadre.create_image(250,150,image=photo[0])

mot_affiche = StringVar()
mot_affiche.set("")
affichage=Label(fen,textvariable=mot_affiche,font=("Helvetica", 24))
affichage.pack()

saisir=StringVar() 
saisir.set("")
saisie=Entry(textvariable=saisir, width=3,font=("Helvetica", 24),justify=CENTER)
saisie.bind("<Return>",jeu)
saisie.focus_set() 
saisie.pack()

saisie.bind('<space>',recommencer)

types=("adjectif","verbe","nom")
fichiers=("adjectifs.txt","verbes.txt","noms.txt")
accents={"é":"e","è":"e","ë":"e","ê":"e","à":"a","â":"a","ü":"u","û":"u","ô":"o","ç":"c"}
erreurs,cherche,jouer,score,erreurs_max,MOT,mot=0,True,True,0,10,"","" # initialisations diverses
choix()
fen.mainloop() 
    
