Files
TD3_DEV51_gallego_dubreuil/pendue.py
2025-10-08 12:13:38 +02:00

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()