forked from menault/TD3_DEV51_Qualite_Algo
163 lines
4.6 KiB
Python
163 lines
4.6 KiB
Python
import tkinter as tk
|
|
from tkinter import messagebox
|
|
import random
|
|
|
|
MOTS = ["Chat", "Chien", "Maison", "Livre", "Arbre", "Fleur", "Eau", "Lune", "Soleil", "Oiseau", "Voiture", "Table", "Porte", "Nez", "Pain", "Neige", "Œuf", "Mer", "Ballon", "Jardin"]
|
|
|
|
PENDU_ETAPES = [
|
|
"""
|
|
+---+
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
=======""",
|
|
"""
|
|
+---+
|
|
| |
|
|
O |
|
|
|
|
|
|
|
|
|
|
|
=======""",
|
|
"""
|
|
+---+
|
|
| |
|
|
O |
|
|
| |
|
|
|
|
|
|
|
|
=======""",
|
|
"""
|
|
+---+
|
|
| |
|
|
O |
|
|
/| |
|
|
|
|
|
|
|
|
=======""",
|
|
"""
|
|
+---+
|
|
| |
|
|
O |
|
|
/|\\ |
|
|
|
|
|
|
|
|
=======""",
|
|
"""
|
|
+---+
|
|
| |
|
|
O |
|
|
/|\\ |
|
|
/ |
|
|
|
|
|
=======""",
|
|
"""
|
|
+---+
|
|
| |
|
|
O |
|
|
/|\\ |
|
|
/ \\ |
|
|
|
|
|
======="""
|
|
]
|
|
|
|
COULEUR_FOND = "#f5f5f5"
|
|
COULEUR_BOUTON = "#1976d2"
|
|
COULEUR_BOUTON_SURVOL = "#1565c0"
|
|
COULEUR_TEXTE = "#212121"
|
|
COULEUR_ERREUR = "#d32f2f"
|
|
|
|
class JeuPendu:
|
|
#interface graphique
|
|
def __init__(self, master):
|
|
self.master = master
|
|
self.master.title("TROUVE LE MOT OU MEURT !!!")
|
|
self.master.configure(bg=COULEUR_FOND)
|
|
self.master.resizable(False, False)
|
|
self.reset_game()
|
|
|
|
def reset_game(self):
|
|
self.mot = random.choice(MOTS).lower()
|
|
self.mot_affiche = ["_" for _ in self.mot]
|
|
self.erreurs_restantes = 6
|
|
self.lettres_utilisees = []
|
|
|
|
for widget in self.master.winfo_children():
|
|
widget.destroy()
|
|
|
|
|
|
self.label_titre = tk.Label(self.master, text="TROUVE LE MOT OU MEURT !!!", font=("Helvetica", 28, "bold"),
|
|
bg=COULEUR_FOND, fg=COULEUR_TEXTE)
|
|
self.label_titre.pack(pady=(20, 10))
|
|
|
|
self.label_dessin = tk.Label(self.master, text=PENDU_ETAPES[0], font=("Courier", 14),
|
|
bg=COULEUR_FOND, justify="left", fg="#333")
|
|
self.label_dessin.pack()
|
|
|
|
self.label_mot = tk.Label(self.master, text=" ".join(self.mot_affiche), font=("Helvetica", 26),
|
|
bg=COULEUR_FOND, fg=COULEUR_TEXTE)
|
|
self.label_mot.pack(pady=10)
|
|
|
|
self.label_erreurs = tk.Label(self.master,
|
|
text=f"Erreurs restantes : {self.erreurs_restantes}",
|
|
font=("Helvetica", 16),
|
|
bg=COULEUR_FOND, fg=COULEUR_ERREUR)
|
|
self.label_erreurs.pack(pady=(0, 20))
|
|
|
|
self.cadre_lettres = tk.Frame(self.master, bg=COULEUR_FOND)
|
|
self.cadre_lettres.pack(pady=10)
|
|
|
|
self.boutons_lettres = {}
|
|
|
|
#Affiche les lettres à choisir
|
|
for i, lettre in enumerate("ABCDEFGHIJKLMNOPQRSTUVWXYZ"):
|
|
bouton = tk.Button(
|
|
self.cadre_lettres,
|
|
text=lettre,
|
|
width=4,
|
|
height=2,
|
|
font=("Helvetica", 12, "bold"),
|
|
bg=COULEUR_BOUTON,
|
|
fg="white",
|
|
activebackground=COULEUR_BOUTON_SURVOL,
|
|
command=lambda l=lettre.lower(): self.deviner_lettre(l)
|
|
)
|
|
bouton.grid(row=i // 9, column=i % 9, padx=3, pady=3)
|
|
self.boutons_lettres[lettre.lower()] = bouton
|
|
|
|
def guess_letter(self, lettre):
|
|
if lettre in self.lettres_utilisees:
|
|
return
|
|
|
|
self.lettres_utilisees.append(lettre)
|
|
self.boutons_lettres[lettre].config(state="disabled", bg="#b0bec5") #grise la lettre choisie
|
|
|
|
#Vérifie si la lette est dans le mot à deviner
|
|
if lettre in self.mot:
|
|
for i, l in enumerate(self.mot):
|
|
if l == lettre:
|
|
self.mot_affiche[i] = lettre
|
|
self.label_mot.config(text=" ".join(self.mot_affiche))
|
|
else:
|
|
self.erreurs_restantes -= 1
|
|
self.label_erreurs.config(text=f"Erreurs restantes : {self.erreurs_restantes}")
|
|
etape = 6 - self.erreurs_restantes
|
|
self.label_dessin.config(text=PENDU_ETAPES[etape])
|
|
|
|
#Vérifie si le jeu est fini
|
|
if "_" not in self.mot_affiche:
|
|
messagebox.showinfo("Victoire !", f"Bravo ! Tu as trouvé le mot : {self.mot}")
|
|
self.reset_game()
|
|
elif self.erreurs_restantes == 0:
|
|
self.label_dessin.config(text=PENDU_ETAPES[-1])
|
|
messagebox.showinfo("Défaite", f"Tu as perdu ! Le mot était : {self.mot}")
|
|
self.reset_game()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
root = tk.Tk()
|
|
jeu = JeuPendu(root)
|
|
root.mainloop()
|