Browse Source

test_interaction est une légère réecriture de projetbataille0.py,qui demande à être vérifiée ; test_interface semble fonctionner

master
bollet.c 9 months ago
parent
commit
477330fa37
  1. 10
      interface.py
  2. 88
      test_interaction.py
  3. 160
      test_interface.py

10
interface.py

@ -17,7 +17,7 @@ class Interface(tk.Frame):
#revoir le design
self.menu = tk.Frame()
C = tk.Canvas (self.menu, bg="black",height=250, width=300)
C = tk.Canvas(self.menu, bg="black",height=450, width=500)
coord = 10, 50, 240, 210
C.grid(row=0)
@ -26,8 +26,8 @@ class Interface(tk.Frame):
#image = tk.PhotoImage(file='title_img.png')
#canvas.create_image(50, 10, image=image)
#canvas.grid(row=2)
for i in range(20):
C.create_text(randint(0,300),randint(0,250),fill="white",font="Times 20 italic bold",text=choice(cartes))
for i in range(50):
C.create_text(randint(0,500),randint(0,450),fill="white",font="Times 20",text=choice(cartes))
titre = tk.Label(self.menu, text="Bataille",bg="grey", fg="white",font=("eufm10", 42))
titre.grid(row=0)
@ -35,7 +35,7 @@ class Interface(tk.Frame):
jouer_btn = tk.Button(self.menu, text ="Jouer", command=self.jouer)
jouer_btn.grid(row=1,pady=(30, 0))
jouer_btn.grid(row=1,pady=(0, 0))
self.menu.grid(row=0)
def jouer(self):
@ -53,6 +53,6 @@ class Interface(tk.Frame):
if __name__ == "__main__":
root = tk.Tk()
root.title("Bataille")
root.geometry("300x300")
root.geometry("500x500")
hello_frame = Interface(root)
hello_frame.mainloop()

88
test_interaction.py

@ -0,0 +1,88 @@
import tkinter as tk
import time
from random import shuffle
from File import File_chaine as File
from Pile import Pile_chaine as Pile
class Carte:
"""classe d'une carte de valeur 'valeur' et de couleur 'couleur'"""
def __init__(self, valeur, couleur):
"""création de la carte"""
self.valeur = valeur
self.couleur = couleur
def compare(self, other):
"""comparaison entre deux cartes"""
if self.valeur > other.valeur:
return 1
elif self.valeur < other.valeur:
return -1
return 0
def affichage(self):
"""affichage de la carte"""
if self.valeur <= 10:
tmp = str(self.valeur)
else:
tmp = ["Valet","Dame","Roi"][self.valeur-11]
return tmp + " de " + self.couleur
def __repr__(self):
"""affichage plus joli de la carte - bien que trop petit pour un terminal"""
pique = "🂡🂢🂣🂤🂥🂦🂧🂨🂩🂪🂫🂬🂭🂮"
coeur = "🂱🂲🂳🂴🂵🂶🂷🂸🂹🂺🂻🂼🂽🂾"
carreau = "🃁🃂🃃🃄🃅🃆🃇🃈🃉🃊🃋🃌🃍🃎"
trefle = "🃑🃒🃓🃔🃕🃖🃗🃘🃙🃚🃛🃜🃝🃞"
if self.couleur == "Pique":
return pique[self.valeur - 1]
if self.couleur == "Coeur":
return coeur[self.valeur - 1]
if self.couleur == "Carreaux":
return carreau[self.valeur - 1]
if self.couleur == "Trèfle":
return trefle[self.valeur - 1]
class Jeux:
"""classe d'un jeu"""
def __init__(self, nb_cartes):
"""initialisation du jeu"""
self.paquet = []
self.nb_cartes = nb_cartes
couleurs = ["Coeur", "Carreaux", "Trèfle", "Pique"]
if self.nb_cartes == 32:
valeurs = [1, 7, 8, 9, 10, 11, 12, 13]
else:
valeurs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
if self.nb_cartes > 52:
raise ValueError("Nombre de cartes invalide")
for couleur in couleurs:
for valeur in valeurs:
self.paquet.append(Carte(valeur, couleur))
shuffle(self.paquet)
if self.nb_cartes != 32 and self.nb_cartes != 52:
for i in range(52 - self.nb_cartes):
self.paquet.pop()
print(self.paquet)
print(len(self.paquet))
def distribue(self):
"""distribution des cartes"""
f1 = File()
f2 = File()
for i in range(self.nb_cartes//2):
f1.enfiler(self.paquet.pop())
f2.enfiler(self.paquet.pop())
return f1, f2
#une fonction utile
def vider_dans(mise_1, mise_2,paquet_joueur):
"""ajoute les cartes des mises dans le paquet du joueur (et supprime les mises)"""
while not mise_1.est_vide():
paquet_joueur.enfiler(mise_1.depiler())
while not mise_2.est_vide():
paquet_joueur.enfiler(mise_2.depiler())

160
test_interface.py

@ -0,0 +1,160 @@
import tkinter as tk
from tkinter import messagebox
from random import choice, randint
from test_interaction import Jeux, vider_dans
from Pile import Pile_chaine as Pile
pique = "🂡🂢🂣🂤🂥🂦🂧🂨🂩🂪🂫🂬🂭🂮"
coeur = "🂱🂲🂳🂴🂵🂶🂷🂸🂹🂺🂻🂼🂽🂾"
carreau = "🃁🃂🃃🃄🃅🃆🃇🃈🃉🃊🃋🃌🃍🃎"
trefle = "🃑🃒🃓🃔🃕🃖🃗🃘🃙🃚🃛🃜🃝🃞"
cartes = pique + coeur + carreau + trefle
class Interface(tk.Frame):
"""interface du jeu"""
def __init__(self, master):
"""initialisation de l'interface : présentation du menu"""
self.master = master
tk.Frame.__init__(self, master)
self.grid(row=0)
#revoir le design
self.afficher_menu()
def clearFrame(self, frame):
"""efface tous les widgets de la frame"""
for widget in frame.winfo_children():
widget.destroy()
frame.destroy()
def afficher_menu(self):
"""affiche le menu"""
if hasattr(self, 'jeu'):
self.clearFrame(self.jeu)
self.menu = tk.Frame()
self.menu.grid()
self.C = tk.Canvas(self.menu, bg="black",height=500, width=800, highlightthickness=0)
self.C.grid(row=0)
for i in range(50):
self.C.create_text(randint(0,800),randint(0,500),fill="white",font="Times 20",text=choice(cartes))
titre = tk.Label(self.menu, text="Bataille",bg="black", fg="white",font=("eufm10", 42),anchor ="n")
titre.grid(sticky="N", row=0, pady=(100, 0))
jouer_btn = tk.Button(self.menu, text ="Jouer", command=self.jouer, width=20, height=2, relief="flat")
jouer_btn.grid(row=0,pady=(100, 0))
quitter = tk.Button(self.menu, text ="Quitter", command=self.master.destroy, width=20, height=2, relief="flat")
quitter.grid(row=0,pady=(200, 0))
rnd_fond = tk.Button(self.menu, text ="joli", bg="black", fg="white", activebackground="black", command=self.joli, width=20, relief="flat")
rnd_fond.grid(sticky="S",row=0)
def joli(self):
"""affiche un fond aleatoire different"""
self.C.delete("all")
for i in range(50):
self.C.create_text(randint(0,800),randint(0,500),fill="white",font="Times 20",text=choice(cartes))
def jouer(self):
"""interface de jeu"""
self.clearFrame(self.menu)
self.jeu = tk.Frame()
self.jeu.grid()
jeu = Jeux(6)
(self.paquet_joueur, self.paquet_ordi) = jeu.distribue()
self.mise_joueur = Pile()
self.mise_ordi = Pile()
self.joueur = tk.Frame(self.jeu, bg='green')
self.vous = tk.Label(self.joueur, text="Vous",bg="green", fg="black",font=("arial", 15))
self.vous.grid(row=0, padx=(10, 10))
self.carte_joueur = tk.Label(self.joueur, text=" ",bg="white", fg="black",font=("arial", 200))
self.carte_joueur.grid(row=1, column=0, padx=(10, 10),pady=(10, 10))
self.nb_carte_joueur = tk.Label(self.joueur, text=str(self.paquet_joueur.taille()),bg="green", fg="black",font=("arial", 60))
self.nb_carte_joueur.grid(row=2, padx=(10, 10),pady=(10, 10))
self.carte_restantes1 = tk.Label(self.joueur, text="cartes restantes",bg="green", fg="black",font=("arial", 15))
self.carte_restantes1.grid(row=3, padx=(10, 10))
self.joueur.grid(row=0,column=0)
self.manche_suivante = tk.Button(self.jeu, text ="suivant",fg="white", bg="maroon", command=self.carte_suivante, width=20, height=2, relief="flat")
self.manche_suivante.grid(row=0,column=1)
self.etat = tk.Label(self.jeu, text="",bg="white", fg="black",font=("eufm10", 10))
self.etat.grid(row=0,column=1, pady=(100,0))
self.goto_menu = tk.Button(self.jeu, text ="Aller au menu", bg="lightgray", command=self.afficher_menu, width=20, height=2, relief="flat")
self.goto_menu.grid(row=0,column=1, pady=(200,0))
self.ordi = tk.Frame(self.jeu, bg='red')
self.vous = tk.Label(self.ordi, text="L'ordinateur",bg="red", fg="black",font=("arial", 15))
self.vous.grid(row=0, padx=(10, 10))
self.carte_ordi = tk.Label(self.ordi, text=" ",bg="white", fg="black",font=("arial", 200))
self.carte_ordi.grid(row=1, padx=(10, 10),pady=(10, 10))
self.nb_carte_ordi = tk.Label(self.ordi, text=str(self.paquet_ordi.taille()),bg="red", fg="black",font=("arial", 60))
self.nb_carte_ordi.grid(row=2, padx=(10, 10),pady=(10, 10))
self.carte_restantes2 = tk.Label(self.ordi, text="cartes restantes",bg="red", fg="black",font=("arial", 15))
self.carte_restantes2.grid(row=3, padx=(10, 10))
self.ordi.grid(row=0,column=2)
def affiche_top_carte(self):
"""affiche la carte du haut des paquets des joueurs et la taille de leurs paquets"""
self.carte_joueur.config(text=self.paquet_joueur.tete())
self.nb_carte_joueur.config(text=self.paquet_joueur.taille())
self.carte_ordi.config(text=self.paquet_ordi.tete())
self.nb_carte_ordi.config(text=self.paquet_ordi.taille())
def carte_suivante(self):
"""méthode principale : réalise une manche"""
if not self.paquet_joueur.est_vide() and not self.paquet_ordi.est_vide():
self.affiche_top_carte()
if self.mise_joueur.est_vide() or self.mise_ordi.est_vide():
self.mise_joueur.empiler(self.paquet_joueur.defiler())
self.mise_ordi.empiler(self.paquet_ordi.defiler())
#self.affiche_top_carte()
if self.mise_joueur.sommet().compare(self.mise_ordi.sommet()) == 1:
vider_dans(self.mise_joueur, self.mise_ordi, self.paquet_joueur)
self.etat.config(text=" Vous gagnez cette manche. ")
elif self.mise_joueur.sommet().compare(self.mise_ordi.sommet()) == -1:
vider_dans(self.mise_joueur, self.mise_ordi, self.paquet_ordi)
self.etat.config(text="L'ordinateur gagne cette manche.")
else:
if self.paquet_joueur.taille() <= 1:
messagebox.showinfo("Fin de Partie", "Vous avez perdu, l'ordinateur a gagné.")
self.afficher_menu()
return
elif self.paquet_ordi.taille() <= 1:
messagebox.showinfo("Fin de Partie", "L'ordinateur a perdu, vous avez gagné.")
self.afficher_menu()
return
for i in range(2):
self.mise_joueur.empiler(self.paquet_joueur.defiler())
self.mise_ordi.empiler(self.paquet_ordi.defiler())
self.etat.config(text="Egalité...")
if self.paquet_joueur.est_vide():
messagebox.showinfo("Fin de Partie", "Vous avez perdu, l'ordinateur a gagné.")
self.afficher_menu()
elif self.paquet_ordi.est_vide():
messagebox.showinfo("Fin de Partie", "L'ordinateur a perdu, vous avez gagné.")
self.afficher_menu()
if __name__ == "__main__":
root = tk.Tk()
root.title("Bataille")
root.geometry("800x500")
hello_frame = Interface(root)
hello_frame.mainloop()
Loading…
Cancel
Save