diff --git a/interface.py b/interface.py index fd4ab71..4313eac 100644 --- a/interface.py +++ b/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() diff --git a/test_interaction.py b/test_interaction.py new file mode 100644 index 0000000..056741f --- /dev/null +++ b/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()) \ No newline at end of file diff --git a/test_interface.py b/test_interface.py new file mode 100644 index 0000000..902d306 --- /dev/null +++ b/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() + \ No newline at end of file