From 4c7290f0fa6a68524c1b068f5f283fa2545e6cfb Mon Sep 17 00:00:00 2001 From: gallego Date: Wed, 8 Oct 2025 12:13:38 +0200 Subject: [PATCH] v1 --- pendue.py | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 pendue.py diff --git a/pendue.py b/pendue.py new file mode 100644 index 0000000..a3373df --- /dev/null +++ b/pendue.py @@ -0,0 +1,162 @@ +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()