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