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