|
|
|
# quelque idée, qui peuvent peut-être aider, ou pas ...
|
|
|
|
|
|
|
|
import tkinter as tk
|
|
|
|
from random import randint
|
|
|
|
from Pile import Pile_lst as Pile
|
|
|
|
from File import File_lst as File
|
|
|
|
|
|
|
|
|
|
|
|
class Carte:
|
|
|
|
def __init__ (self,valeur, couleur):
|
|
|
|
self.valeur = valeur
|
|
|
|
self.couleur = couleur
|
|
|
|
|
|
|
|
def __repr__ (self): #permet de mettre "Carte(11, 1)" sous forme "Valet de cœur" (trouver sur python pas a pas)
|
|
|
|
couleurs = {1: "Cœur", 2: "Carreau", 3: "Trèfle", 4: "Pique"}
|
|
|
|
valeurs = {11: "Valet", 12: "Dame", 13: "Roi", 14: "As"}
|
|
|
|
valeur_str = valeurs.get(self.valeur, self.valeur)
|
|
|
|
couleur_str = couleurs.get(self.couleur, self.couleur)
|
|
|
|
return f"{valeur_str} de {couleur_str}"
|
|
|
|
|
|
|
|
def cartes_52 (self) : #créer les 52 cartes dans l'ordre
|
|
|
|
valeur = [2,3,4,5,6,7,8,9,10,11,12,13,14]
|
|
|
|
couleur = [1,2,3,4]
|
|
|
|
p52 = Pile()
|
|
|
|
x = 1
|
|
|
|
y = 1
|
|
|
|
while p52.taille() < 52 :
|
|
|
|
x = x + 1
|
|
|
|
p52.empiler (Carte (valeur [x],couleur [y]))
|
|
|
|
if x == 14 :
|
|
|
|
y = y + 1
|
|
|
|
x = 1
|
|
|
|
return p52
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def cartes_32 (self) : #créer les 32 cartes dans l'ordre
|
|
|
|
valeur = [7,8,9,10,11,12,13,14] # la valeur de l'as est mise a 14 pour facilité le travail
|
|
|
|
couleur = [1,2,3,4]
|
|
|
|
p32 = Pile()
|
|
|
|
x = 6
|
|
|
|
y = 1
|
|
|
|
while p32.taille() < 52 :
|
|
|
|
x = x + 1
|
|
|
|
p32.empiler (Carte (valeur [x],couleur [y]))
|
|
|
|
if x == 14 :
|
|
|
|
y = y + 1
|
|
|
|
x = 6
|
|
|
|
return p32
|
|
|
|
|
|
|
|
def compare (self,other):
|
|
|
|
if other.valeur > self.valeur: # si other est une carte avec une valeur plus grande
|
|
|
|
return -1
|
|
|
|
elif other.valeur < self.valeur: # si self est une carte avec une valeur plus grande
|
|
|
|
return 1
|
|
|
|
else : # même valeur, il y a bataille
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Jeux :
|
|
|
|
def __init__ (self):
|
|
|
|
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
|
|
|
|
|
|
|
|
# essaie de mélange, j'ai tester avec un jeu de carte papier ça mélange vraiment
|
|
|
|
x = 3
|
|
|
|
p = Piles () # pile pour aider à mélanger
|
|
|
|
f = Files () # file pour aider à mélanger
|
|
|
|
if self.valeur_paquet == 32:
|
|
|
|
for i in range(32):
|
|
|
|
for i in range (x) :
|
|
|
|
p.empiler(p32.depiler)
|
|
|
|
for i in range (x - 1) :
|
|
|
|
f.enfiler(p.depiler)
|
|
|
|
if p.taille() == 10 :
|
|
|
|
for i in range (10)
|
|
|
|
f.enfiler(p.depiler)
|
|
|
|
while p.taille() != 0 :
|
|
|
|
f.enfiler(p.depiler)
|
|
|
|
while f.taille() != 0 :
|
|
|
|
p32.empiler(f.defiler)
|
|
|
|
|
|
|
|
elif self.valeur_paquet == 52:
|
|
|
|
for i in range(52):
|
|
|
|
for i in range (x) :
|
|
|
|
p.empiler(p52.depiler)
|
|
|
|
for i in range (x - 1) :
|
|
|
|
f.enfiler(p.depiler)
|
|
|
|
if p.taille() == 10 :
|
|
|
|
for i in range (10)
|
|
|
|
f.enfiler(p.depiler)
|
|
|
|
while p.taille() != 0 :
|
|
|
|
f.enfiler(p.depiler)
|
|
|
|
while f.taille() != 0 :
|
|
|
|
p52.empiler(f.defiler)
|
|
|
|
|
|
|
|
def distribut (self): # distribut les cartes mélanger dans deux files, avec le même nombre de cartes
|
|
|
|
paquet_j1 = File ()
|
|
|
|
paquet_j2 = File ()
|
|
|
|
if self.valeur_paquet == 32: #faudra changer là aussi pour l'interface graphique
|
|
|
|
for i in range (16):
|
|
|
|
paquet_j1.enfiler(p32.depiler)
|
|
|
|
paquet_j2.enfiler(p32.depiler)
|
|
|
|
|
|
|
|
elif self.valeur_paquet == 52:
|
|
|
|
for i in range (26):
|
|
|
|
paquet_j1.enfiler(p52.depiler)
|
|
|
|
paquet_j2.enfiler(p52.depiler)
|
|
|
|
|
|
|
|
def mélange (y, p_c) : # essaie de mélange, avec y le nombre de cartes a mélanger et p_c le paquet a mélanger (une file)
|
|
|
|
x = 3
|
|
|
|
p = Piles () # pile pour aider à mélanger
|
|
|
|
f = Files () # file pour aider à mélanger
|
|
|
|
for i in range(y):
|
|
|
|
for i in range (x) :
|
|
|
|
p.empiler(p_c.depiler)
|
|
|
|
for i in range (x - 1) :
|
|
|
|
f.enfiler(p.depiler)
|
|
|
|
if p.taille() == 10 :
|
|
|
|
for i in range (10) :
|
|
|
|
f.enfiler(p.depiler)
|
|
|
|
while p.taille() != 0 :
|
|
|
|
f.enfiler(p.depiler)
|
|
|
|
while f.taille() != 0 :
|
|
|
|
p_c.enfiler(f.defiler)
|
|
|
|
return p_c
|
|
|
|
|
|
|
|
|
|
|
|
def on_joue ():
|
|
|
|
while (paquet_j1.taille() != 0) or (paquet_j2.taille() != 0): # tant que les deux joueur on des cartes, on continue de jouer.
|
|
|
|
carte_j1 = paquet_j1.defiler()
|
|
|
|
carte_j2 = paquet_j2.defiler()
|
|
|
|
|
|
|
|
#on perd
|
|
|
|
if compare(carte_j1,carte_j2) == -1 :
|
|
|
|
paquet_j2.enfiler(carte_j1)
|
|
|
|
paquet_j2.enfiler(carte_j2)
|
|
|
|
|
|
|
|
#on gagne
|
|
|
|
if compare(carte_j1,carte_j2) == 1 :
|
|
|
|
paquet_j1.enfiler(carte_j1)
|
|
|
|
paquet_j1.enfiler(carte_j2)
|
|
|
|
|
|
|
|
# égalité on fait la bataille
|
|
|
|
if compare(carte_j1,carte_j2) == 0 :
|
|
|
|
p1 = Pile () # pile de bataille du joueur 1
|
|
|
|
p2 = Pile () # pile de bataille du joueur 2
|
|
|
|
p1.empiler(carte_j1)
|
|
|
|
p2.empiler(carte_j2)
|
|
|
|
p1.empiler(paquet_j1.defiler()) #cette carte ne sera visible que si la troisiéme est égale a celle de l'adversaire
|
|
|
|
p2.empiler(paquet_j1.defiler()) #cette carte ne sera visible que si la troisiéme est égale a celle de l'adversaire
|
|
|
|
carte_3b_j1 = paquet_j1.defiler() #troisième carte de la bataille
|
|
|
|
carte_3b_j2 = paquet_j2.defiler() # troisième carte de la bataille
|
|
|
|
|
|
|
|
#on perd la bataille
|
|
|
|
if compare(carte_3b_j1,carte_3b_j2) == -1 :
|
|
|
|
while p2.taille() != 0 : # si p2 est vide, alors p1 aussi
|
|
|
|
paquet_j2.enfiler(p1.depiler())
|
|
|
|
paquet_j2.enfiler(p2.depiler())
|
|
|
|
|
|
|
|
#on gagne la bataille
|
|
|
|
if compare(carte_3b_j1,carte_3b_j2) == -1 :
|
|
|
|
while p2.taille() != 0 : # si p2 est vide, alors p1 aussi
|
|
|
|
paquet_j2.enfiler(p1.depiler())
|
|
|
|
paquet_j2.enfiler(p2.depiler())
|
|
|
|
|
|
|
|
#égalité a la bataille, on regarde la carte du milieu
|
|
|
|
if compare(carte_3b_j1,carte_3b_j2) == 0 :
|
|
|
|
carte_2b_j1 = p1.depiler() #deuxième carte de la bataille
|
|
|
|
carte_2b_j2 = p2.depiler() # deuxième carte de la bataille
|
|
|
|
|
|
|
|
#on perd la bataille
|
|
|
|
if compare(carte_2b_j1,carte_2b_j2) == -1 :
|
|
|
|
paquet_j2.enfiler(p1.depiler())
|
|
|
|
paquet_j2.enfiler(p2.depiler())
|
|
|
|
paquet_j2.enfiler(carte_2b_j1)
|
|
|
|
paquet_j2.enfiler(carte_2b_j2)
|
|
|
|
paquet_j2.enfiler(carte_3b_j1)
|
|
|
|
paquet_j2.enfiler(carte_3b_j2)
|
|
|
|
|
|
|
|
#on gagne la bataille
|
|
|
|
if compare(carte_2b_j1,carte_2b_j2) == 1 :
|
|
|
|
paquet_j1.enfiler(p1.depiler())
|
|
|
|
paquet_j1.enfiler(p2.depiler())
|
|
|
|
paquet_j1.enfiler(carte_2b_j1)
|
|
|
|
paquet_j1.enfiler(carte_2b_j2)
|
|
|
|
paquet_j1.enfiler(carte_3b_j1)
|
|
|
|
paquet_j1.enfiler(carte_3b_j2)
|
|
|
|
|
|
|
|
# égalité
|
|
|
|
if compare(carte_2b_j1,carte_2b_j2) == 0 :
|
|
|
|
print("le jeu de carte doit ếtre mal mélanger, on va y remédier")
|
|
|
|
paquet_j1 = mélange(paquet_j1.taille(),paquet_j1)
|
|
|
|
paquet_j2 = mélange(paquet_j2.taille(),paquet_j2)
|
|
|
|
|
|
|
|
|
|
|
|
print(on_joue)
|