""" Commentaires : ============== Il n'y a pas de fichier README. Message des commits peu explicites ! On ne peut pas choisir le nombre de cartes. On ne voit pas quelles cartes ont été jouées en cas de bataille. Mauvaise gestion de la fin de partie en cas de bataille : vous testez si il reste des cartes aux joueurs après qu'ils aient joué, et seulement pour la carte retournée !! Il aurait été bien de prévoir un bouton pour aller jusqu'à la fin de la partie. Note finale : 16 """ import tkinter as tk from Jeux import Jeux class Bataille: def __init__(self): self.jeu = Jeux(32) self.joueur, self.ordi = self.jeu.distribue() self.fenetre = tk.Tk() self.fenetre.title("Jeu de la Bataille") self.fenetre.geometry("1500x800") self.fenetre.configure(bg="green") tk.Label( self.fenetre, text="JEU DE LA BATAILLE", font=("Arial", 25, "bold"), bg="green" ).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) self.label_ordi = tk.Label( self.fenetre, text="Carte de l'ordinateur : ", font=("Arial", 16), bg="green" ) self.label_ordi.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) 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()