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.

150 lines
4.4 KiB

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