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.

170 lines
4.9 KiB

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