Browse Source

Transférer les fichiers vers ''

master
OUEDRAGO Seyba 3 months ago
parent
commit
85ae96ea53
  1. BIN
      File.cpython-312.pyc
  2. 19
      projet_bataille.py
  3. 127
      projet_bataille_tkinter.py

BIN
File.cpython-312.pyc

Binary file not shown.

19
projet_bataille.py

@ -18,8 +18,15 @@ class Carte:
return 0 return 0
def __str__(self): def __str__(self):
# retourne la carte # On définit la correspondance entre valeur (0-12) et nom
return str(self.valeur) + " " + self.couleur noms = {
0: "As", 1: "2", 2: "3", 3: "4", 4: "5",
5: "6", 6: "7", 7: "8", 8: "9",
9: "10", 10: "Valet", 11: "Dame", 12: "Roi"
}
# On récupère le nom correspondant à la valeur
nom_carte = noms.get(self.valeur, str(self.valeur))
return nom_carte + " de " + self.couleur
class Jeu: class Jeu:
@ -37,7 +44,7 @@ class Jeu:
self.f1 = File() # initialisation de la file du joueur 1 self.f1 = File() # initialisation de la file du joueur 1
self.f2 = File() # initialisation de la file du joueur 2 self.f2 = File() # initialisation de la file du joueur 2
couleurs = ["pique", "carreau", "coeur", "trèfle"] # Couleurs des cartes couleurs = ["", "", "", ""] # Couleurs des cartes
nombre = nb_total_cartes // 4 # Nombre de cartes par couleur nombre = nb_total_cartes // 4 # Nombre de cartes par couleur
@ -83,9 +90,9 @@ class Jeu:
# vérifie si un joueur a assez de cartes pour continuer la bataille # vérifie si un joueur a assez de cartes pour continuer la bataille
if self.f1.taille() < 2 and self.f1.taille() < 2: if self.f1.taille() < 2 and self.f1.taille() < 2:
return "égalité" return "égalité"
if self.f1.taille() < 2: elif self.f1.taille() < 2:
return "{} gagne ({} n'a pas assez de carte)".format(self.nom2, self.nom1) return "{} gagne ({} n'a pas assez de carte)".format(self.nom2, self.nom1)
if self.f2.taille() < 2: elif self.f2.taille() < 2:
return "{} gagne ({} n'a pas assez de carte)".format(self.nom1, self.nom2) return "{} gagne ({} n'a pas assez de carte)".format(self.nom1, self.nom2)
# chaque joueur place une carte face cachée dans le pot # chaque joueur place une carte face cachée dans le pot
@ -119,7 +126,7 @@ class Jeu:
else: else:
return "{} gagne".format(self.nom1) return "{} gagne".format(self.nom1)
if __name__ == "__main__":
nom1 = input("Nom du joueur 1 : ") # demande le nom du joueur 1 nom1 = input("Nom du joueur 1 : ") # demande le nom du joueur 1
nom2 = input("Nom du joueur 2 : ") # demande le nom du joueur 2 nom2 = input("Nom du joueur 2 : ") # demande le nom du joueur 2
nb_total_cartes = int(input("Nombre total de cartes dans le paquet : ")) # Nombre total de cartes nb_total_cartes = int(input("Nombre total de cartes dans le paquet : ")) # Nombre total de cartes

127
projet_bataille_tkinter.py

@ -1,4 +1,11 @@
import tkinter as tk import tkinter as tk
from projet_bataille import *
from time import sleep
nom1 = ""
nom2 = ""
mon_jeu = Jeu(nom1, nom2)
mon_jeu.distribue(52) # Ou le nombre que tu souhaites
fenetre = tk.Tk() fenetre = tk.Tk()
fenetre.title("Fenêtre verte") fenetre.title("Fenêtre verte")
@ -11,16 +18,134 @@ for i in range(5):
compteur = 0 compteur = 0
label_carte1 = tk.Label(fenetre, bg="white", fg="black", font=("Arial", 14), width=9, height=8)
label_carte1.grid(row=1, column=2)
label_paquet1 = tk.Label(fenetre, text=mon_jeu.f1.taille(), bg="green", fg="white", font=("Aria", 20))
label_paquet1.grid(row=1, column=3)
label_carte2 = tk.Label(fenetre, bg="white", fg="black", font=("Arial", 14), width=9, height=8)
label_carte2.grid(row=3, column=2)
label_paquet2 = tk.Label(fenetre, text=mon_jeu.f2.taille(), bg="green", fg="white", font=("Aria", 20))
label_paquet2.grid(row=3, column=3)
label_nom1 = tk.Label(fenetre, text=nom1, bg="green", fg="white", font=("Aria", 20))
label_nom2 = tk.Label(fenetre, text=nom2, bg="green", fg="white", font=("Aria", 20))
label_nom1.grid(row=1, column=1)
label_nom2.grid(row=3, column=1)
def valider_noms():
global nom1, nom2
nom1 = entree1.get()
nom2 = entree2.get()
if nom1 == "": nom1 = "Joueur 1"
if nom2 == "": nom2 = "Joueur 2"
# On met à jour les noms sur le tapis vert
label_nom1.config(text=nom1)
label_nom2.config(text=nom2)
# On ferme la petite fenêtre
fenetre_noms.destroy()
def incrementer(): def incrementer():
global compteur global compteur
if mon_jeu.f1.est_vide() or mon_jeu.f2.est_vide():
return
compteur += 1 compteur += 1
label_compteur.config(text="Tour " + str(compteur)) label_compteur.config(text="Tour " + str(compteur))
c1 = mon_jeu.f1.defiler()
label_carte1.config(text=str(c1))
label_paquet1.config(text=str(mon_jeu.f1.taille()))
c2 = mon_jeu.f2.defiler()
label_carte2.config(text=str(c2))
label_paquet2.config(text=str(mon_jeu.f2.taille()))
score = c1.compare(c2)
if score == 1:
# Joueur 1 gagne
mon_jeu.f1.enfiler(c1)
mon_jeu.f1.enfiler(c2)
elif score == -1:
# Joueur 2 gagne
mon_jeu.f2.enfiler(c1)
mon_jeu.f2.enfiler(c2)
else:
label_compteur.config(text="BATAILLE !")
pot = [c1, c2]
c1_og = str(c1)
c2_og = str(c2)
while True:
# On vérifie s'ils ont assez de cartes (besoin de 2 cartes chacun minimum)
if mon_jeu.f1.taille() < 2 and mon_jeu.f2.taille() < 2:
label_compteur.config(text=" égalité au bout de " + str(compteur) + " tour")
return
elif mon_jeu.f1.taille() < 2:
label_compteur.config(text=nom2 + " gagne au bout de " + str(compteur) + " tour car " + nom1 + " n'a plus assez de cartes")
return
elif mon_jeu.f2.taille() < 2:
label_compteur.config(text=nom1 + " gagne au bout de " + str(compteur) + " tour car " + nom2 + " n'a plus assez de cartes")
return
# On tire une carte face cachée (on l'ajoute juste au pot)
pot.append(mon_jeu.f1.defiler())
pot.append(mon_jeu.f2.defiler())
# On tire la nouvelle carte de combat
c1 = mon_jeu.f1.defiler()
c2 = mon_jeu.f2.defiler()
pot.extend([c1, c2])
# On met à jour l'affichage avec les nouvelles cartes
label_carte1.config(text=str(c1_og) + "\n" + str(c1))
label_carte2.config(text=str(c2_og) + "\n" + str(c2))
score = c1.compare(c2)
# Qui gagne le pot ?
if score == 1: # Si J1 gagne
for carte in pot: mon_jeu.f1.enfiler(carte)
break
elif score == -1: # Si J2 gagne
for carte in pot: mon_jeu.f2.enfiler(carte)
break
label_paquet1.config(text=str(mon_jeu.f1.taille()))
label_paquet2.config(text=str(mon_jeu.f2.taille()))
if mon_jeu.f1.est_vide():
label_compteur.config(text=nom2 + " gagne car " + nom1 + " n'a plus de carte")
bouton.config(state="disabled")
elif mon_jeu.f2.est_vide():
label_compteur.config(text=nom1 + " gagne car " + nom2 + " n'a plus de carte")
bouton.config(state="disabled")
label_compteur = tk.Label( fenetre, text="Tour 0", bg="green", fg="white", font=("Arial", 20)) label_compteur = tk.Label( fenetre, text="Tour 0", bg="green", fg="white", font=("Arial", 20))
label_compteur.grid(row=2, column=3, sticky="e", padx=20) label_compteur.grid(row=2, column=3, sticky="e", padx=20)
bouton = tk.Button(fenetre, bg="red", width=10, height=5, command=incrementer) bouton = tk.Button(fenetre, bg="red", width=10, height=5, command=incrementer)
bouton.grid(row=2, column=4, padx=30) bouton.grid(row=2, column=4, padx=30)
fenetre.mainloop() fenetre_noms = tk.Toplevel(fenetre)
fenetre_noms.title("Noms des joueurs")
fenetre_noms.geometry("300x200")
fenetre_noms.config(bg="white")
tk.Label(fenetre_noms, text="Nom Joueur 1 :", bg="white").pack(pady=5)
entree1 = tk.Entry(fenetre_noms)
entree1.pack()
tk.Label(fenetre_noms, text="Nom Joueur 2 :", bg="white").pack(pady=5)
entree2 = tk.Entry(fenetre_noms)
entree2.pack()
tk.Button(fenetre_noms, text="Commencer la partie", command=valider_noms).pack(pady=20)
# On empêche de cliquer sur la fenêtre principale tant qu'on n'a pas validé
fenetre_noms.grab_set()
fenetre.mainloop()
Loading…
Cancel
Save