Browse Source

Transférer les fichiers vers ''

master
DUPRE Tommy 3 months ago
parent
commit
700595c6cf
  1. 78
      projet_bataille_tkinter.py

78
projet_bataille_tkinter.py

@ -1,87 +1,116 @@
import tkinter as tk import tkinter as tk # Librairie pour créer l'interface graphique
from projet_bataille import * from projet_bataille import * # Import du jeu de bataille (cartes, files, comparaisons)
from time import sleep from time import sleep # Permet de faire des pauses (pas utilisé ici)
# Initialisation des noms des joueurs
nom1 = "" nom1 = ""
nom2 = "" nom2 = ""
# Création du jeu avec les deux joueurs
mon_jeu = Jeu(nom1, nom2) mon_jeu = Jeu(nom1, nom2)
mon_jeu.distribue(52) # Ou le nombre que tu souhaites
# Distribution des 52 cartes entre les deux joueurs
mon_jeu.distribue(52)
# Création de la fenêtre principale
fenetre = tk.Tk() fenetre = tk.Tk()
fenetre.title("Fenêtre verte") fenetre.title("Fenêtre verte")
fenetre.geometry("1280x720") fenetre.geometry("1280x720")
fenetre.configure(bg="green") fenetre.configure(bg="green") # Fond vert (table de jeu)
# Configuration de la grille (5 lignes / 5 colonnes)
for i in range(5): for i in range(5):
fenetre.grid_rowconfigure(i, weight=1) fenetre.grid_rowconfigure(i, weight=1)
fenetre.grid_columnconfigure(i, weight=1) fenetre.grid_columnconfigure(i, weight=1)
# Compteur de tours
compteur = 0 compteur = 0
# Carte du joueur 1
label_carte1 = tk.Label(fenetre, bg="white", fg="black", font=("Arial", 14), width=9, height=8) label_carte1 = tk.Label(fenetre, bg="white", fg="black", font=("Arial", 14), width=9, height=8)
label_carte1.grid(row=1, column=2) label_carte1.grid(row=1, column=2)
# Nombre de cartes restantes du joueur 1
label_paquet1 = tk.Label(fenetre, text=mon_jeu.f1.taille(), bg="green", fg="white", font=("Aria", 20)) 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_paquet1.grid(row=1, column=3)
# Carte du joueur 2
label_carte2 = tk.Label(fenetre, bg="white", fg="black", font=("Arial", 14), width=9, height=8) label_carte2 = tk.Label(fenetre, bg="white", fg="black", font=("Arial", 14), width=9, height=8)
label_carte2.grid(row=3, column=2) label_carte2.grid(row=3, column=2)
# Nombre de cartes restantes du joueur 2
label_paquet2 = tk.Label(fenetre, text=mon_jeu.f2.taille(), bg="green", fg="white", font=("Aria", 20)) 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_paquet2.grid(row=3, column=3)
# Affichage des noms des joueurs
label_nom1 = tk.Label(fenetre, text=nom1, bg="green", fg="white", font=("Aria", 20)) 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_nom2 = tk.Label(fenetre, text=nom2, bg="green", fg="white", font=("Aria", 20))
label_nom1.grid(row=1, column=1) label_nom1.grid(row=1, column=1)
label_nom2.grid(row=3, column=1) label_nom2.grid(row=3, column=1)
# Fonction appelée quand on valide les noms
def valider_noms(): def valider_noms():
global nom1, nom2 global nom1, nom2
# Récupération des noms entrés
nom1 = entree1.get() nom1 = entree1.get()
nom2 = entree2.get() nom2 = entree2.get()
# Valeurs par défaut si champs vides
if nom1 == "": nom1 = "Joueur 1" if nom1 == "": nom1 = "Joueur 1"
if nom2 == "": nom2 = "Joueur 2" if nom2 == "": nom2 = "Joueur 2"
# On met à jour les noms sur le tapis vert # Mise à jour des labels
label_nom1.config(text=nom1) label_nom1.config(text=nom1)
label_nom2.config(text=nom2) label_nom2.config(text=nom2)
# On ferme la petite fenêtre # Fermeture de la fenêtre des noms
fenetre_noms.destroy() fenetre_noms.destroy()
# Fonction appelée à chaque clic sur le bouton (un tour de jeu)
def incrementer(): def incrementer():
global compteur global compteur
# Si un joueur n'a plus de cartes, on arrête
if mon_jeu.f1.est_vide() or mon_jeu.f2.est_vide(): if mon_jeu.f1.est_vide() or mon_jeu.f2.est_vide():
return return
# Incrémentation du tour
compteur += 1 compteur += 1
label_compteur.config(text="Tour " + str(compteur)) label_compteur.config(text="Tour " + str(compteur))
# Joueur 1 joue une carte
c1 = mon_jeu.f1.defiler() c1 = mon_jeu.f1.defiler()
label_carte1.config(text=str(c1)) label_carte1.config(text=str(c1))
label_paquet1.config(text=str(mon_jeu.f1.taille())) label_paquet1.config(text=str(mon_jeu.f1.taille()))
# Joueur 2 joue une carte
c2 = mon_jeu.f2.defiler() c2 = mon_jeu.f2.defiler()
label_carte2.config(text=str(c2)) label_carte2.config(text=str(c2))
label_paquet2.config(text=str(mon_jeu.f2.taille())) label_paquet2.config(text=str(mon_jeu.f2.taille()))
# Comparaison des deux cartes
score = c1.compare(c2) score = c1.compare(c2)
if score == 1: if score == 1:
# Joueur 1 gagne # Joueur 1 gagne le pli
mon_jeu.f1.enfiler(c1) mon_jeu.f1.enfiler(c1)
mon_jeu.f1.enfiler(c2) mon_jeu.f1.enfiler(c2)
elif score == -1: elif score == -1:
# Joueur 2 gagne # Joueur 2 gagne le pli
mon_jeu.f2.enfiler(c1) mon_jeu.f2.enfiler(c1)
mon_jeu.f2.enfiler(c2) mon_jeu.f2.enfiler(c2)
else: else:
# Égalité → bataille
label_compteur.config(text="BATAILLE !") label_compteur.config(text="BATAILLE !")
pot = [c1, c2] pot = [c1, c2] # Pot de cartes en jeu
c1_og = str(c1) c1_og = str(c1)
c2_og = str(c2) c2_og = str(c2)
while True: while True:
# On vérifie s'ils ont assez de cartes (besoin de 2 cartes chacun minimum) # Vérification du nombre de cartes restantes
if mon_jeu.f1.taille() < 2 and mon_jeu.f2.taille() < 2: if mon_jeu.f1.taille() < 2 and mon_jeu.f2.taille() < 2:
label_compteur.config(text=" égalité au bout de " + str(compteur) + " tour") label_compteur.config(text=" égalité au bout de " + str(compteur) + " tour")
return return
@ -92,31 +121,34 @@ def incrementer():
label_compteur.config(text=nom1 + " gagne au bout de " + str(compteur) + " tour car " + nom2 + " n'a plus assez de cartes") label_compteur.config(text=nom1 + " gagne au bout de " + str(compteur) + " tour car " + nom2 + " n'a plus assez de cartes")
return return
# On tire une carte face cachée (on l'ajoute juste au pot) # Carte face cachée
pot.append(mon_jeu.f1.defiler()) pot.append(mon_jeu.f1.defiler())
pot.append(mon_jeu.f2.defiler()) pot.append(mon_jeu.f2.defiler())
# On tire la nouvelle carte de combat # Carte de combat
c1 = mon_jeu.f1.defiler() c1 = mon_jeu.f1.defiler()
c2 = mon_jeu.f2.defiler() c2 = mon_jeu.f2.defiler()
pot.extend([c1, c2]) pot.extend([c1, c2])
# On met à jour l'affichage avec les nouvelles cartes # Mise à jour de l'affichage
label_carte1.config(text=str(c1_og) + "\n" + str(c1)) label_carte1.config(text=str(c1_og) + "\n" + str(c1))
label_carte2.config(text=str(c2_og) + "\n" + str(c2)) label_carte2.config(text=str(c2_og) + "\n" + str(c2))
score = c1.compare(c2) score = c1.compare(c2)
# Qui gagne le pot ? # Attribution du pot
if score == 1: # Si J1 gagne if score == 1:
for carte in pot: mon_jeu.f1.enfiler(carte) for carte in pot: mon_jeu.f1.enfiler(carte)
break break
elif score == -1: # Si J2 gagne elif score == -1:
for carte in pot: mon_jeu.f2.enfiler(carte) for carte in pot: mon_jeu.f2.enfiler(carte)
break break
# Mise à jour du nombre de cartes
label_paquet1.config(text=str(mon_jeu.f1.taille())) label_paquet1.config(text=str(mon_jeu.f1.taille()))
label_paquet2.config(text=str(mon_jeu.f2.taille())) label_paquet2.config(text=str(mon_jeu.f2.taille()))
# Vérification de la victoire
if mon_jeu.f1.est_vide(): if mon_jeu.f1.est_vide():
label_compteur.config(text=nom2 + " gagne car " + nom1 + " n'a plus de carte") label_compteur.config(text=nom2 + " gagne car " + nom1 + " n'a plus de carte")
bouton.config(state="disabled") bouton.config(state="disabled")
@ -124,17 +156,21 @@ def incrementer():
label_compteur.config(text=nom1 + " gagne car " + nom2 + " n'a plus de carte") label_compteur.config(text=nom1 + " gagne car " + nom2 + " n'a plus de carte")
bouton.config(state="disabled") bouton.config(state="disabled")
label_compteur = tk.Label( fenetre, text="Tour 0", bg="green", fg="white", font=("Arial", 20)) # Affichage du compteur de tours
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 pour jouer un tour
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)
# Fenêtre secondaire pour entrer les noms
fenetre_noms = tk.Toplevel(fenetre) fenetre_noms = tk.Toplevel(fenetre)
fenetre_noms.title("Noms des joueurs") fenetre_noms.title("Noms des joueurs")
fenetre_noms.geometry("300x200") fenetre_noms.geometry("300x200")
fenetre_noms.config(bg="white") fenetre_noms.config(bg="white")
# Champs de saisie des noms
tk.Label(fenetre_noms, text="Nom Joueur 1 :", bg="white").pack(pady=5) tk.Label(fenetre_noms, text="Nom Joueur 1 :", bg="white").pack(pady=5)
entree1 = tk.Entry(fenetre_noms) entree1 = tk.Entry(fenetre_noms)
entree1.pack() entree1.pack()
@ -143,9 +179,11 @@ tk.Label(fenetre_noms, text="Nom Joueur 2 :", bg="white").pack(pady=5)
entree2 = tk.Entry(fenetre_noms) entree2 = tk.Entry(fenetre_noms)
entree2.pack() entree2.pack()
# Bouton pour lancer la partie
tk.Button(fenetre_noms, text="Commencer la partie", command=valider_noms).pack(pady=20) 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é # Bloque la fenêtre principale tant que les noms ne sont pas validés
fenetre_noms.grab_set() fenetre_noms.grab_set()
fenetre.mainloop() # Lancement de la boucle principale
fenetre.mainloop()

Loading…
Cancel
Save