bollet.c
11 months ago
3 changed files with 253 additions and 5 deletions
@ -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()) |
@ -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…
Reference in new issue