diff --git a/bataille.py b/bataille.py index a32489e..5cfc7ad 100644 --- a/bataille.py +++ b/bataille.py @@ -1,99 +1,149 @@ -# import tkinter as tk -# -# from random import randint - +import tkinter as tk +from random import shuffle from File import File_lst as File +from Pile import Pile_lst as Pile class Carte: - def __init__ (self,valeur, couleur): + def __init__(self, valeur, couleur): # initialise les cartes avec une valeur et une couleur self.valeur = valeur self.couleur = couleur - - if valeur == 'as': - self.valeur == 14 - if valeur == 'roi': - self.valeur == 13 - if valeur == 'dame': - self.valeur == 12 - if valeur == 'valet': - self.valeur == 11 - if valeur == '10': - self.valeur == 10 - if valeur == '9': - self.valeur == 9 - if valeur == '8': - self.valeur == 8 - if valeur == '7': - self.valeur == 7 - - couleur = "carreau","trefle", "coeur", "pique" - - - - - def compare (self,other): - if other.valeur > self.valeur: # si other est une carte avec une valeur plus grande -<<<<<<< HEAD - return -1 -======= - return 1 ->>>>>>> 0e34c5d2a482acb938aa071c89dd8dd92408e054 - elif other.valeur < self.valeur: # si self est une carte avec une valeur plus grande + + def __repr__ (self): #permet de mettre "Carte(11, 1)" sous forme "Valet de cœur" (trouver sur python pas a pas) + couleur = {1: "Cœur", 2: "Carreau", 3: "Trèfle", 4: "Pique"} + valeur = {11: "Valet", 12: "Dame", 13: "Roi", 14: "As"} + valeur_str = valeur.get(self.valeur, self.valeur) + couleur_str = couleur.get(self.couleur, self.couleur) + return f"{valeur_str} de {couleur_str}" + + def compare(self, other):# compare la valeur des cartes des deux joueurs + if self.valeur > other.valeur:# si self est une carte avec une valeur plus grande return 1 - else : # meme valeur, il y a bataille - return 0 - -class Jeux : -<<<<<<< HEAD - def __init__ (self, paquet): - valeurs = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] # 11 = valet, 12 = dame, 13 = roi, 14 = as - couleurs = ['Coeur', 'Carreau', 'Trèfle', 'Pique'] - self.paquet = [] -======= - def __init__ (self): - for i in range 32: - - c = Carte(x,y) ->>>>>>> 0e34c5d2a482acb938aa071c89dd8dd92408e054 - self.valeur_paquet = int(input("voulez vous jouer avec un paquet de 32 ou de 52 cartes?")) # nombre de carte dans le paquet,à remplacer par un boutton - if self.valeur_paquet == 52: #faudra changer là aussi pour l'interface graphique - pass - elif self.valeur_paquet == 32: - valeurs = [7, 8, 9, 10, 11, 12, 13, 14] - - #pour faire le paquet - - for couleur in couleurs: - for valeur in valeurs: - self.paquet.append(Carte(valeur, couleur)) - + elif self.valeur < other.valeur:# si other est une carte avec une valeur plus grande + return -1 + return 0 # même valeur, il y a bataille + +class Jeux: + def __init__(self, taille_paquet = 32): # creer les piles et files necessaire au jeu + self.taille_paquet = taille_paquet + self.paquet = self.creer_paquet() + self.melanger_paquet() self.joueur1 = File() self.joueur2 = File() - self.distribue() - - def distribue (self) : # en sah jss pas sur de ma connerie, à tester -<<<<<<< HEAD - while self.paquet: - self.joueur1.ajouter(self.paquet.pop()) - self.joueur2.ajouter(self.paquet.pop()) - def jouer(self): - #while not self.joueur1.est_vide() and not self.joueur2.est_vide(): - carte1= self.joueur1.retirer - carte2= self.joueur2.retirer - print("joueur1 fait",carte1) - print("joueur1 fait",carte2) -======= - return - # joueur1 = File() - # joueur2 = File() - # while paquet != 0 : - # joueur1.enfiler(paquet.depiller()) - # joueur2.enfiler(paquet.depiller()) - # return joueur1 and joueur2 - - - ->>>>>>> 0e34c5d2a482acb938aa071c89dd8dd92408e054 -#pour les tests: -#f=Jeux() -#print(f.paquet) + self.distribuer_cartes() + + def creer_paquet(self): #crer le nombre de carte choisi + if self.taille_paquet == 52: + valeurs = list(range(2, 15)) + else: + valeurs = list(range(7, 15)) + couleurs = ["Coeur", "Carreau", "Trefle", "Pique"] + paquet = Pile() + for couleur in couleurs: + for valeur in valeurs: + paquet.empiler(Carte(valeur, couleur)) + return paquet + + def melanger_paquet(self):#mélange le paquet + cartes = [] + while not self.paquet.est_vide(): + cartes.append(self.paquet.depiler()) + shuffle(cartes) + for carte in cartes: + self.paquet.empiler(carte) + + def distribuer_cartes(self):#distribue les cartes aux joueurs + while not self.paquet.est_vide(): + self.joueur1.enfiler(self.paquet.depiler()) + if not self.paquet.est_vide(): + self.joueur2.enfiler(self.paquet.depiler()) + + def jouer_tour(self): #joue un tour + if self.joueur1.est_vide() or self.joueur2.est_vide(): + return "Fin du jeu" + + carte1 = self.joueur1.defiler() + carte2 = self.joueur2.defiler() + + resultat = carte1.compare(carte2) + if resultat == 1:# Joueur 1 a gagné + self.joueur1.enfiler(carte1) + self.joueur1.enfiler(carte2) + return f"Joueur 1 gagne le tour avec {carte1} contre {carte2}." + elif resultat == -1:# Joueur 2 a gagné + self.joueur2.enfiler(carte1) + self.joueur2.enfiler(carte2) + return f"Joueur 2 gagne le tour avec {carte2} contre {carte1}." + else:# bataille + return self.bataille([carte1], [carte2]) + + def bataille(self, pile1, pile2): # si bataille, elle compare les cartes deux et/ou trois + if self.joueur1.taille() < 2 or self.joueur2.taille() < 2: + return "Un joueur n'a plus assez de cartes pour continuer la bataille." + + pile1.append(self.joueur1.defiler()) + pile1.append(self.joueur1.defiler()) + pile2.append(self.joueur2.defiler()) + pile2.append(self.joueur2.defiler()) + + carte_bataille1 = pile1[-1] + carte_bataille2 = pile2[-1] + + resultat = carte_bataille1.compare(carte_bataille2) + if resultat == 1:# Joueur 1 a gagné + for carte in pile1 + pile2: + self.joueur1.enfiler(carte) + return f"Bataille! Joueur 1 remporte avec {carte_bataille1} contre {carte_bataille2}." + elif resultat == -1: # Joueur 2 a gagné + for carte in pile1 + pile2: + self.joueur2.enfiler(carte) + return f"Bataille! Joueur 2 remporte avec {carte_bataille2} contre {carte_bataille1}." + else: + return self.bataille(pile1, pile2) # bataille + +class Lancer_Jeu: + def __init__(self, root): # interface tkinter, pour ouvrir la fenetre, creer les bouton et faire le nombre de cartes en réponse a cocher + self.root = root + self.root.title("Jeu de Bataille") + + self.taille_paquet = tk.IntVar(value=32) + + self.label_options = tk.Label(root, text="Choisissez le nombre de cartes :", font=("Helvetica", 12)) + self.label_options.pack(pady=5) + + self.option_32 = tk.Radiobutton(root, text="32 cartes", variable=self.taille_paquet, value=32, font=("Helvetica", 10)) + self.option_32.pack() + + self.option_52 = tk.Radiobutton(root, text="52 cartes", variable=self.taille_paquet, value=52, font=("Helvetica", 10)) + self.option_52.pack() + + self.bouton_demarrer = tk.Button(root, text="Démarrer le jeu", command=self.demarrer_jeu, font=("Helvetica", 12)) + self.bouton_demarrer.pack(pady=10) + + self.label_info = tk.Label(root, text="", font=("Helvetica", 14)) + self.label_info.pack(pady=10) + + self.label_score = tk.Label(root, text="", font=("Helvetica", 12)) + self.label_score.pack(pady=10) + + self.bouton_tour = tk.Button(root, text="Jouer un tour", command=self.jouer_tour, font=("Helvetica", 12), state=tk.DISABLED) + self.bouton_tour.pack(pady=10) + + def demarrer_jeu(self): # commence la partie après avoir eu le nombre de cartes a utilisé, avec la fonction du bouton + self.jeu = Jeux(taille_paquet=self.taille_paquet.get()) + self.label_info.config(text="Le jeu commence! Cliquez pour jouer un tour.") + self.bouton_tour.config(state=tk.NORMAL) + + def jouer_tour(self): # joue un tour, avec la fonction du bouton + resultat = self.jeu.jouer_tour() + self.label_info.config(text=resultat) + if self.jeu.joueur1.est_vide(): + self.label_score.config(text="Joueur 2 a gagné la partie!") + self.bouton_tour.config(state=tk.DISABLED) + elif self.jeu.joueur2.est_vide(): + self.label_score.config(text="Joueur 1 a gagné la partie!") + self.bouton_tour.config(state=tk.DISABLED) + +if __name__ == "__main__": + root = tk.Tk() + lancer = Lancer_Jeu(root) + root.mainloop() \ No newline at end of file