From 700595c6cf3268ff42670d15da998493e9f40c00 Mon Sep 17 00:00:00 2001 From: DUPRE Tommy Date: Sun, 11 Jan 2026 18:11:12 +0100 Subject: [PATCH] =?UTF-8?q?Transf=C3=A9rer=20les=20fichiers=20vers=20''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- projet_bataille_tkinter.py | 78 ++++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 20 deletions(-) diff --git a/projet_bataille_tkinter.py b/projet_bataille_tkinter.py index 533188c..5901b22 100644 --- a/projet_bataille_tkinter.py +++ b/projet_bataille_tkinter.py @@ -1,87 +1,116 @@ -import tkinter as tk -from projet_bataille import * -from time import sleep +import tkinter as tk # Librairie pour créer l'interface graphique +from projet_bataille import * # Import du jeu de bataille (cartes, files, comparaisons) +from time import sleep # Permet de faire des pauses (pas utilisé ici) +# Initialisation des noms des joueurs nom1 = "" nom2 = "" + +# Création du jeu avec les deux joueurs 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.title("Fenêtre verte") 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): fenetre.grid_rowconfigure(i, weight=1) fenetre.grid_columnconfigure(i, weight=1) +# Compteur de tours compteur = 0 +# Carte du joueur 1 label_carte1 = tk.Label(fenetre, bg="white", fg="black", font=("Arial", 14), width=9, height=8) 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.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.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.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_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) +# Fonction appelée quand on valide les noms def valider_noms(): global nom1, nom2 + + # Récupération des noms entrés nom1 = entree1.get() nom2 = entree2.get() + # Valeurs par défaut si champs vides if nom1 == "": nom1 = "Joueur 1" if nom2 == "": nom2 = "Joueur 2" - # On met à jour les noms sur le tapis vert + # Mise à jour des labels label_nom1.config(text=nom1) label_nom2.config(text=nom2) - # On ferme la petite fenêtre + # Fermeture de la fenêtre des noms fenetre_noms.destroy() +# Fonction appelée à chaque clic sur le bouton (un tour de jeu) def incrementer(): 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(): return + # Incrémentation du tour compteur += 1 label_compteur.config(text="Tour " + str(compteur)) + # Joueur 1 joue une carte c1 = mon_jeu.f1.defiler() label_carte1.config(text=str(c1)) label_paquet1.config(text=str(mon_jeu.f1.taille())) + + # Joueur 2 joue une carte c2 = mon_jeu.f2.defiler() label_carte2.config(text=str(c2)) label_paquet2.config(text=str(mon_jeu.f2.taille())) + # Comparaison des deux cartes score = c1.compare(c2) if score == 1: - # Joueur 1 gagne + # Joueur 1 gagne le pli mon_jeu.f1.enfiler(c1) mon_jeu.f1.enfiler(c2) + elif score == -1: - # Joueur 2 gagne + # Joueur 2 gagne le pli mon_jeu.f2.enfiler(c1) mon_jeu.f2.enfiler(c2) + else: + # Égalité → bataille label_compteur.config(text="BATAILLE !") - pot = [c1, c2] + pot = [c1, c2] # Pot de cartes en jeu 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) + # Vérification du nombre de cartes restantes if mon_jeu.f1.taille() < 2 and mon_jeu.f2.taille() < 2: label_compteur.config(text=" égalité au bout de " + str(compteur) + " tour") 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") 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.f2.defiler()) - # On tire la nouvelle carte de combat + # 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 + # Mise à jour de l'affichage 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 + # Attribution du pot + if score == 1: for carte in pot: mon_jeu.f1.enfiler(carte) break - elif score == -1: # Si J2 gagne + elif score == -1: for carte in pot: mon_jeu.f2.enfiler(carte) break + + # Mise à jour du nombre de cartes label_paquet1.config(text=str(mon_jeu.f1.taille())) label_paquet2.config(text=str(mon_jeu.f2.taille())) + # Vérification de la victoire if mon_jeu.f1.est_vide(): label_compteur.config(text=nom2 + " gagne car " + nom1 + " n'a plus de carte") bouton.config(state="disabled") @@ -124,17 +156,21 @@ def incrementer(): 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)) +# 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) +# Bouton pour jouer un tour bouton = tk.Button(fenetre, bg="red", width=10, height=5, command=incrementer) bouton.grid(row=2, column=4, padx=30) +# Fenêtre secondaire pour entrer les noms fenetre_noms = tk.Toplevel(fenetre) fenetre_noms.title("Noms des joueurs") fenetre_noms.geometry("300x200") fenetre_noms.config(bg="white") +# Champs de saisie des noms tk.Label(fenetre_noms, text="Nom Joueur 1 :", bg="white").pack(pady=5) entree1 = tk.Entry(fenetre_noms) 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.pack() +# Bouton pour lancer la partie 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.mainloop() \ No newline at end of file +# Lancement de la boucle principale +fenetre.mainloop()