1 changed files with 141 additions and 91 deletions
@ -1,99 +1,149 @@ |
|||||
# import tkinter as tk |
import tkinter as tk |
||||
# |
from random import shuffle |
||||
# from random import randint |
|
||||
|
|
||||
from File import File_lst as File |
from File import File_lst as File |
||||
|
from Pile import Pile_lst as Pile |
||||
|
|
||||
class Carte: |
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.valeur = valeur |
||||
self.couleur = couleur |
self.couleur = couleur |
||||
|
|
||||
if valeur == 'as': |
def __repr__ (self): #permet de mettre "Carte(11, 1)" sous forme "Valet de cœur" (trouver sur python pas a pas) |
||||
self.valeur == 14 |
couleur = {1: "Cœur", 2: "Carreau", 3: "Trèfle", 4: "Pique"} |
||||
if valeur == 'roi': |
valeur = {11: "Valet", 12: "Dame", 13: "Roi", 14: "As"} |
||||
self.valeur == 13 |
valeur_str = valeur.get(self.valeur, self.valeur) |
||||
if valeur == 'dame': |
couleur_str = couleur.get(self.couleur, self.couleur) |
||||
self.valeur == 12 |
return f"{valeur_str} de {couleur_str}" |
||||
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):# compare la valeur des cartes des deux joueurs |
||||
def compare (self,other): |
if self.valeur > other.valeur:# si self est une carte avec une valeur plus grande |
||||
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 |
|
||||
return 1 |
return 1 |
||||
else : # meme valeur, il y a bataille |
elif self.valeur < other.valeur:# si other est une carte avec une valeur plus grande |
||||
return 0 |
return -1 |
||||
|
return 0 # même valeur, il y a bataille |
||||
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)) |
|
||||
|
|
||||
|
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.joueur1 = File() |
||||
self.joueur2 = File() |
self.joueur2 = File() |
||||
self.distribue() |
self.distribuer_cartes() |
||||
|
|
||||
def distribue (self) : # en sah jss pas sur de ma connerie, à tester |
def creer_paquet(self): #crer le nombre de carte choisi |
||||
<<<<<<< HEAD |
if self.taille_paquet == 52: |
||||
while self.paquet: |
valeurs = list(range(2, 15)) |
||||
self.joueur1.ajouter(self.paquet.pop()) |
else: |
||||
self.joueur2.ajouter(self.paquet.pop()) |
valeurs = list(range(7, 15)) |
||||
def jouer(self): |
couleurs = ["Coeur", "Carreau", "Trefle", "Pique"] |
||||
#while not self.joueur1.est_vide() and not self.joueur2.est_vide(): |
paquet = Pile() |
||||
carte1= self.joueur1.retirer |
for couleur in couleurs: |
||||
carte2= self.joueur2.retirer |
for valeur in valeurs: |
||||
print("joueur1 fait",carte1) |
paquet.empiler(Carte(valeur, couleur)) |
||||
print("joueur1 fait",carte2) |
return paquet |
||||
======= |
|
||||
return |
def melanger_paquet(self):#mélange le paquet |
||||
# joueur1 = File() |
cartes = [] |
||||
# joueur2 = File() |
while not self.paquet.est_vide(): |
||||
# while paquet != 0 : |
cartes.append(self.paquet.depiler()) |
||||
# joueur1.enfiler(paquet.depiller()) |
shuffle(cartes) |
||||
# joueur2.enfiler(paquet.depiller()) |
for carte in cartes: |
||||
# return joueur1 and joueur2 |
self.paquet.empiler(carte) |
||||
|
|
||||
|
def distribuer_cartes(self):#distribue les cartes aux joueurs |
||||
|
while not self.paquet.est_vide(): |
||||
>>>>>>> 0e34c5d2a482acb938aa071c89dd8dd92408e054 |
self.joueur1.enfiler(self.paquet.depiler()) |
||||
#pour les tests: |
if not self.paquet.est_vide(): |
||||
#f=Jeux() |
self.joueur2.enfiler(self.paquet.depiler()) |
||||
#print(f.paquet) |
|
||||
|
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() |
Loading…
Reference in new issue