import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk from bataille.Jeux import Jeux from structure.File import File_lst class BatailleGUI: """Interface graphique pour le jeu de bataille""" def __init__(self, root): """Constructeur de la classe BatailleGUI""" self.root = root self.root.title("Jeu de Bataille") # Set background image self.bg_image = Image.open("gui/ressources/tapis.png") self.bg_image = self.bg_image.resize((1000, 700)) self.bg_photo = ImageTk.PhotoImage(self.bg_image) self.bg_label = tk.Label(root, image=self.bg_photo) self.bg_label.place(relwidth=1, relheight=1) self.jeux = Jeux() self.f1, self.f2 = self.jeux.distribue(File_lst) self.total_cartes_label = tk.Label(root, text=f"Total cartes: {len(self.jeux.paquet)}", bg="green", fg="white") self.total_cartes_label.grid(row=0, column=0, columnspan=3) self.canvas_joueur1 = tk.Canvas(root, width=200, height=300, bg="green") self.canvas_joueur1.grid(row=2, column=0, padx=20, pady=20) self.canvas_joueur2 = tk.Canvas(root, width=200, height=300, bg="green") self.canvas_joueur2.grid(row=2, column=2, padx=20, pady=20) self.label_joueur1 = tk.Label(root, text="Joueur 1", bg="green", fg="white") self.label_joueur1.grid(row=3, column=0) self.label_joueur2 = tk.Label(root, text="Joueur 2", bg="green", fg="white") self.label_joueur2.grid(row=3, column=2) self.bouton_tour = tk.Button(root, text="Jouer un tour", command=self.jouer_tour) self.bouton_tour.grid(row=4, column=1) self.bouton_restart = tk.Button(root, text="Redémarrer", command=self.restart_game) self.bouton_restart.grid(row=5, column=1) self.bouton_auto = tk.Button(root, text="Défilement auto", command=self.auto_play) self.bouton_auto.grid(row=6, column=0) self.bouton_quit_auto = tk.Button(root, text="Quitter auto play", command=self.quit_auto_play) self.bouton_quit_auto.grid(row=6, column=2) self.bouton_quit = tk.Button(root, text="Quitter", command=root.quit) self.bouton_quit.grid(row=7, column=1) self.auto_playing = False self.update_cartes() def update_cartes(self): """Met à jour les cartes des joueurs""" self.label_joueur1.config(text=f"Joueur 1: {self.f1.taille()} cartes") self.label_joueur2.config(text=f"Joueur 2: {self.f2.taille()} cartes") if not self.f1.est_vide(): carte1 = self.f1.tete() img1 = f"gui/ressources/{carte1.valeur}-{carte1.couleur}.png" image1 = Image.open(img1) image1 = image1.resize((200, 300)) self.photo1 = ImageTk.PhotoImage(image1) self.canvas_joueur1.create_image(0, 0, anchor=tk.NW, image=self.photo1) if not self.f2.est_vide(): carte2 = self.f2.tete() img2 = f"gui/ressources/{carte2.valeur}-{carte2.couleur}.png" image2 = Image.open(img2) image2 = image2.resize((200, 300)) self.photo2 = ImageTk.PhotoImage(image2) self.canvas_joueur2.create_image(0, 0, anchor=tk.NW, image=self.photo2) def jouer_tour(self): """Joue un tour de jeu""" if self.f1.est_vide() or self.f2.est_vide(): if self.f1.taille() > self.f2.taille(): messagebox.showinfo("Fin de la partie", "Le joueur 1 a gagné!") else: messagebox.showinfo("Fin de la partie", "Le joueur 2 a gagné!") self.restart_game() self.auto_playing = False return cartes_jouees = [] while True: if self.f1.est_vide() or self.f2.est_vide(): if self.f1.taille() > self.f2.taille(): messagebox.showinfo("Fin de la partie", "Le joueur 1 a gagné!") else: messagebox.showinfo("Fin de la partie", "Le joueur 2 a gagné!") self.restart_game() self.auto_playing = False return carte1 = self.f1.defiler() carte2 = self.f2.defiler() cartes_jouees.extend([carte1, carte2]) if carte1.valeur > carte2.valeur: # Ajoutez chaque carte une par une for carte in cartes_jouees: self.f1.enfiler(carte) break elif carte2.valeur > carte1.valeur: # Ajoutez chaque carte une par une for carte in cartes_jouees: self.f2.enfiler(carte) break else: if self.f1.taille() < 1 or self.f2.taille() < 1: messagebox.showinfo("Fin de la partie", "Un joueur n'a pas assez de cartes pour continuer!") return cartes_jouees.extend([self.f1.defiler(), self.f2.defiler()]) self.update_cartes() def restart_game(self): """Redémarre le jeu""" self.jeux = Jeux() self.f1, self.f2 = self.jeux.distribue(File_lst) self.update_cartes() def auto_play(self): """Défilement automatique""" self.auto_playing = True while not self.f1.est_vide() and not self.f2.est_vide() and self.auto_playing: self.jouer_tour() self.root.update() self.root.after(300) def quit_auto_play(self): """Quitter le défilement automatique""" self.auto_playing = False