From 55e44425368fdde2a7064303ca0819b654d97534 Mon Sep 17 00:00:00 2001 From: Elith Date: Mon, 12 Jan 2026 18:31:03 +0100 Subject: [PATCH] Classe Bataille --- tkinter_romans.py | 165 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 143 insertions(+), 22 deletions(-) diff --git a/tkinter_romans.py b/tkinter_romans.py index 4a41cae..f3dfc81 100644 --- a/tkinter_romans.py +++ b/tkinter_romans.py @@ -1,29 +1,150 @@ -import tkinter as tk +import tkinter as tk +from Jeux import Jeux -fenetre = tk.Tk() -fenetre.title("Jeu de la Bataille") -fenetre.geometry('1500x800') -fenetre.configure(bg='green') +class Bataille: + def __init__(self): + self.jeu = Jeux(32) + self.joueur, self.ordi = self.jeu.distribue() -label = tk.Label(fenetre, text="JEU DE LA BATAILLE", font=("Arial", 25, "bold"), fg="black") -label.pack() -label_joueur = tk.Label(fenetre, text="Carte du joueur : ") -label_joueur.pack(pady=5) + self.fenetre = tk.Tk() + self.fenetre.title("Jeu de la Bataille") + self.fenetre.geometry("1500x800") + self.fenetre.configure(bg="green") -label_ordi = tk.Label(fenetre, text="Carte de l'ordinateur : ") -label_ordi.pack(pady=5) + tk.Label( + self.fenetre, + text="JEU DE LA BATAILLE", + font=("Arial", 25, "bold"), + bg="green" + ).pack(pady=10) -label_info = tk.Label(fenetre, text="Clique sur 'Jouer'") -label_info.pack(pady=10) + self.label_joueur = tk.Label( + self.fenetre, + text="Carte du joueur : ", + font=("Arial", 16), + bg="green" + ) + self.label_joueur.pack(pady=10) -label = tk.Label(fenetre, text="À chaque tour de jeu, chaque joueur joue la carte supérieure de son paquet.\n" -"Le joueur ayant la carte de plusgrande valeur récupère les deux cartes et les remets sous son paquet.\n" -"En cas d’égalité, chaque joueur ajoute une carte à l’envers, puis une autre carte àl’endroit," -"et on compare ànouveau les valeurs.\n En cas de nouvelle égalité, on réitère le processus." -"Le gagnant remporte l’ensemble descartes jouées.\n", bg="red") -label.pack() + self.label_ordi = tk.Label( + self.fenetre, + text="Carte de l'ordinateur : ", + font=("Arial", 16), + bg="green" + ) + self.label_ordi.pack(pady=10) -bouton_quitter = tk.Button(fenetre,text="Quitter",font=("Arial", 11),fg="white",width=12,command=fenetre.destroy) -bouton_quitter.pack(pady=10) + self.label_info = tk.Label( + self.fenetre, + text="Clique sur 'Jouer'", + font=("Arial", 14), + bg="green" + ) + self.label_info.pack(pady=15) -fenetre.mainloop() + self.label_score = tk.Label( + self.fenetre, + text=f"Vos cartes : {self.joueur.taille()} | Cartes ordinateur : {self.ordi.taille()}", + font=("Arial", 14), + bg="green" + ) + self.label_score.pack(pady=10) + + tk.Label( + self.fenetre, + text= + "À chaque tour de jeu, chaque joueur joue la carte supérieure de son paquet.\n" + "Le joueur ayant la carte de plus grande valeur récupère les deux cartes.\n" + "En cas d’égalité : bataille, le gagnant récupère toutes les cartes jouées.\n" + "Le joueur sans carte perd la partie.", + bg="red", + font=("Arial", 12), + width=120, + height=6 + ).pack(pady=15) + + tk.Button( + self.fenetre, + text="Jouer", + font=("Arial", 14), + width=15, + command=self.jouer_tour + ).pack(pady=10) + + tk.Button( + self.fenetre, + text="Quitter", + font=("Arial", 11), + fg="white", + bg="black", + width=12, + command=self.fenetre.destroy + ).pack(pady=10) + + self.fenetre.mainloop() + + def mettre_a_jour_score(self): + self.label_score.config( + text=f"Vos cartes : {self.joueur.taille()} | Cartes ordinateur : {self.ordi.taille()}" + ) + + + def jouer_tour(self): + pile = [] + + if self.joueur.est_vide(): + self.label_info.config(text="Vous avez perdu") + return + if self.ordi.est_vide(): + self.label_info.config(text="Vous avez gagné") + return + + c1 = self.joueur.defiler() + c2 = self.ordi.defiler() + pile.extend([c1, c2]) + + self.label_joueur.config(text=f"Carte du joueur : {c1}") + self.label_ordi.config(text=f"Carte de l'ordinateur : {c2}") + + res = c1.compare(c2) + + while res == 0: + self.label_info.config(text="BATAILLE !") + if not self.joueur.est_vide(): + pile.append(self.joueur.defiler()) + if not self.ordi.est_vide(): + pile.append(self.ordi.defiler()) + + # Vérifie que les joueurs ont encore une carte pour comparer + if self.joueur.est_vide(): + self.label_info.config(text="Vous avez perdu") + self.mettre_a_jour_score() + return + if self.ordi.est_vide(): + self.label_info.config(text="Vous avez gagné") + self.mettre_a_jour_score() + return + + # Carte face visible + c1 = self.joueur.defiler() + c2 = self.ordi.defiler() + pile.extend([c1, c2]) + + self.label_joueur.config(text=f"Carte du joueur : {c1}") + self.label_ordi.config(text=f"Carte de l'ordinateur : {c2}") + + res = c1.compare(c2) + + # Distribue la pile au gagnant + if res == 1: + for carte in pile: + self.joueur.enfiler(carte) + self.label_info.config(text=f"Vous gagnez le pli avec {len(pile)} cartes") + else: + for carte in pile: + self.ordi.enfiler(carte) + self.label_info.config(text=f"L'ordinateur gagne le pli avec {len(pile)} cartes") + + self.mettre_a_jour_score() + +Bataille() \ No newline at end of file