You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

143 lines
5.6 KiB

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