From 85ae96ea5348da591670bbb71b4a4af7d33ffabe Mon Sep 17 00:00:00 2001 From: OUEDRAGO Seyba Date: Sun, 11 Jan 2026 17:57:33 +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 --- File.cpython-312.pyc | Bin 0 -> 5656 bytes projet_bataille.py | 35 ++++++---- projet_bataille_tkinter.py | 127 ++++++++++++++++++++++++++++++++++++- 3 files changed, 147 insertions(+), 15 deletions(-) create mode 100644 File.cpython-312.pyc diff --git a/File.cpython-312.pyc b/File.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14d2209e2145390a2950e10259998920e253fa21 GIT binary patch literal 5656 zcmd5=-ER}w6~8kc+mqPA`5=LO0Fw|P&IUt)vMrwl!tR2oD{V?EMX5%{Gi;r8#^H{Q zh%sHZLaJS|8_=$ltki0Gtc%otB5&=Bvtfl9?E_Nxq5GDNwL;>l=iECpo;VJ$50!eQ z9N#(j+CaDI8CxUwZkGIi$o;v5{=v=n(!FDu}yNG z2t1$56PTO?Jip5mb)OdaaD)(A6Nye9^XX(#f-k==O}E($&yOSXSl~>7fLz2QV0X3P zYbE5@O0?7^evC%8Y{zD;HfzsiH|^8)=5wdJ{|{u}$Wn8ybFI-((yOj*MN&Hf+(p2^ zq@a;WQ4=P88sKMA(tJSu8sKI!p!tCYwE$3A3j%G?WT35cEzwp>ekYaI)wG$-MPaE+ zGqdUC@{Dd|6WLV8P_zR%LszbYh%%d?3Vx(hW>$|S9Su+`#IFzjYMnq9$p@rBROsE8EtHq%k|(CFnmRS7CiJ;$ ziK%hj{4krDojRY$CQ@n8{m9`XKRq~;0IlfMH7|1t*Nx52S+c68j8s-t^BvAsF^3g^ zP0SV`cggdfoki)BPz^pv^YbY%vIwV}Mv;d00YQ(PAW`Avz$HUV-N@;RnNrdTeto)` zRoIa!?nq@I{D2fAh9$$eisK#?9Tp0h=oO%1q-)`J>GsmKm55T26&eO^(heWcNH9;w1QA~CT6le5V&ZdL6r1?<+2S66hW(=B{d`e^CKYGkk?55D4rV=!ltWZlz)A-!gXQEc^7m4*DS z_qoETJ9iDwnPO4V@}+fyonq4g0$e^HaSg;7J+Oz3yl*3&4~{LKe0Xv-vZo^N*{r%7 z1QeLGm2oto7e<*84nfDOaibAN%!Fa$Su}1b8jaDNFsHfyNLf9r=iBP~!zUuxYzN|A z{?boMf2hd2HY@K3DTb_HLuV0k@*SbM>x`4%L5{g27KE(pLqvas7s#aK4Z{!kbdnBl;S|+Kg6iORHBS;Y26fc^h zB6JW5gh5g!Y-JVzC?16o2|6YY-y_eYqwAvR?_HNg{~(gRNQRIoNOsp`$=}Zx!TCw} zbDQH9wEMQJ`%?Hz)jZPgvSA(4eQ!yGRX z|7t%rywD>s3(&d`ez=wm35*#%AE~Rz;ELPW@#C8&@gp7$P>jX&EhH#R4+lEl;pKcI|HL#8}cSxvOscVbR8&Q6RU3X{-qw8YCY`JV{Y? zb%8q0N3n2>e}}Wd+n58P6Y%K$bL?TfVOMKsARelMcAVUhhgi7JcX^RuS8`|?^9qo= zq_UE>x4k!XYZGs-xMMmL33_b3(z}|LqFFsVy(e(=OkC@rrt99lO zGL3b4L&GWnE*l}&(BQHm^1@}iE5WL-(xqMVF%Y<*0}!}|DhLz!s&Ln;Z#EsS_nn^C z^)*N~&E~0CoU?{&Lz2Nfk=q9Z0#?Q}Q;_elJameyhIbh~3zG4u%wS@*!h1%)b&=8x zr3^Bd%(yo)EHMPJ1O~Mc@z(yVG}s6jyE49rk~e`sapu6|o6dpCuJP5*iXrb{CUNx*{whBxWgks4-Pa|oJL|6gkJH5`qW zkq0(MMi<)}i2m=fjYT+BV5{67AXlAdKE6Q}<3Ix5`z8W}J&s}kAXe_32T>0M8gF0_ zhV2rSr=A#=yuSgiiN#8zsn4u-o~?w>R^d@wC>5SYhE^g&6}id7PlCzJHfiX*syv5S zEPkxKzBn(4&76kK7Up5TQ?}E+upz`nhI;fK7A>7XxgQz70J1SijsRyP=IvU23Ps-m z;?(M$J&R)x#~?s%>#l4YTKEHzrH=>?^*8?{kzto*xp+U2b_u4%L(vGU+|I?+9FBOyb;?27o#rfC%(*FA+_kP7b?!Cu(Bc+l1qfex6{uM1n X@4xj#>UsSaQ{-!D$67y;_yg;|1}ZD6 literal 0 HcmV?d00001 diff --git a/projet_bataille.py b/projet_bataille.py index adf7e1e..2f4ee2f 100644 --- a/projet_bataille.py +++ b/projet_bataille.py @@ -18,8 +18,15 @@ class Carte: return 0 def __str__(self): - # retourne la carte - return str(self.valeur) + " " + self.couleur + # On définit la correspondance entre valeur (0-12) et nom + 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: @@ -37,7 +44,7 @@ class Jeu: self.f1 = File() # initialisation de la file du joueur 1 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 @@ -83,9 +90,9 @@ class Jeu: # vérifie si un joueur a assez de cartes pour continuer la bataille if self.f1.taille() < 2 and self.f1.taille() < 2: 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) - if self.f2.taille() < 2: + elif self.f2.taille() < 2: return "{} gagne ({} n'a pas assez de carte)".format(self.nom1, self.nom2) # chaque joueur place une carte face cachée dans le pot @@ -119,13 +126,13 @@ class Jeu: else: return "{} gagne".format(self.nom1) +if __name__ == "__main__": + nom1 = input("Nom du joueur 1 : ") # demande le nom du joueur 1 + 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 -nom1 = input("Nom du joueur 1 : ") # demande le nom du joueur 1 -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 - -jeu = Jeu(nom1, nom2) # création du jeu avec les noms des joueurs -f1, f2 = jeu.distribue(nb_total_cartes) # distribution des cartes -print(f"{nom1} :", f1) # affiche la file du joueur 1 -print(f"{nom2} :", f2) # affiche la file du joueur 2 -print(jeu.partie()) # lance la partie et affiche le résultat final + jeu = Jeu(nom1, nom2) # création du jeu avec les noms des joueurs + f1, f2 = jeu.distribue(nb_total_cartes) # distribution des cartes + print(f"{nom1} :", f1) # affiche la file du joueur 1 + print(f"{nom2} :", f2) # affiche la file du joueur 2 + print(jeu.partie()) # lance la partie et affiche le résultat final diff --git a/projet_bataille_tkinter.py b/projet_bataille_tkinter.py index f0ff774..533188c 100644 --- a/projet_bataille_tkinter.py +++ b/projet_bataille_tkinter.py @@ -1,4 +1,11 @@ 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.title("Fenêtre verte") @@ -11,16 +18,134 @@ for i in range(5): 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(): global compteur + + if mon_jeu.f1.est_vide() or mon_jeu.f2.est_vide(): + return + compteur += 1 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.grid(row=2, column=3, sticky="e", padx=20) bouton = tk.Button(fenetre, bg="red", width=10, height=5, command=incrementer) 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() \ No newline at end of file