-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
146 lines (121 loc) · 6.12 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import random
class Carte:
def __init__(self, numero: int, valeur: int):
self.numero = numero
self.valeur = valeur
class Rangee:
def __init__(self, premiere_carte):
self.cartes = [premiere_carte]
class Jeu:
def __init__(self, joueurs: list):
self.joueurs = joueurs
self.rangees = []
self.pile = []
self.a_placer = []
def distribuer(self):
# Créer la pile
for i in range(1, 105):
tdb = 1
if i % 10 == 0: tdb = 3
elif i % 5 == 0: tdb = 2
if i % 11 == 0: tdb = 5
if i == 55: tdb = 7
self.pile.append(Carte(i, tdb))
random.shuffle(self.pile)
for joueur in self.joueurs:
for i in range(10):
index = random.randint(0, len(self.pile) - 1)
joueur.cartes_main.append(self.pile[index])
self.pile.pop(index)
joueur.cartes_main = sorted(joueur.cartes_main, key=lambda carte: carte.numero)
#print("Pile:", [str(carte.numero) + " / " + str(carte.valeur) for carte in self.pile])
for i in range(4):
self.rangees.append(Rangee(self.pile[0]))
self.pile.pop(0)
#print("Pile:", [str(carte.numero) + " / " + str(carte.valeur) for carte in self.pile])
def verifCartes(self): # Trop long, a simplifier
for carteP in self.pile:
for joueur in self.joueurs:
for carteJ in joueur.cartes_main:
if carteJ.numero == carteP.numero:
print("Il y a deux meme cartes de valeur", carteP.numero)
def afficherCartes(self):
print("----- Rangee: ")
[print("Rangee" + ":", [str(carte.numero) + " / " + str(carte.valeur) for carte in rangee.cartes]) for rangee in self.rangees]
print("----- Cartes a placer: ")
[print(self.joueurs[couple[0]].pseudo + ":", str(couple[1].numero) + " / " + str(couple[1].valeur)) for couple in self.a_placer]
print("----- Cartes en main: ")
[print(joueur.pseudo + ":", [str(carte.numero) + " / " + str(carte.valeur) for carte in joueur.cartes_main]) for joueur in self.joueurs]
def tour(self):
self.a_placer = []
# Chacun choisi une carte (random pour les autres joueurs)
print("-----------------------------------------------")
for j, joueur in enumerate(self.joueurs):
print("\n----- Tour de", joueur.pseudo)
print("----- Rangee: ")
[print("Rangee" + ":", [str(carte.numero) + " / " + str(carte.valeur) for carte in rangee.cartes]) for rangee in self.rangees]
print("----- Cartes en main: ")
print(joueur.pseudo + ":", [str(carte.numero) + " / " + str(carte.valeur) for carte in joueur.cartes_main])
carte_num = 0
while carte_num not in [carte.numero for carte in joueur.cartes_main]: #la carte est bien presente
carte_num = input("Numero de la carte a poser: ")
if carte_num.isdigit():
carte_num = int(carte_num)
for i in range(len(joueur.cartes_main)):
if joueur.cartes_main[i].numero == carte_num:
self.a_placer.append((j, joueur.cartes_main[i]))
joueur.cartes_main.pop(i)
break
self.a_placer = sorted(self.a_placer, key=lambda couple: couple[1].numero)
# On place les cartes
print("-----------------------------------------------")
print("\n----- Cartes a placer: ")
[print(self.joueurs[couple[0]].pseudo + ":", str(couple[1].numero) + " / " + str(couple[1].valeur)) for couple in self.a_placer]
#self.afficherCartes()
# On joue le jeu
for couple in self.a_placer:
rangeeToGo = None
for rangee in self.rangees:
if couple[1].numero > rangee.cartes[-1].numero:
if rangeeToGo == None or rangee.cartes[-1].numero > rangeeToGo.cartes[-1].numero:
rangeeToGo = rangee
if rangeeToGo == None:
print("\n----- Tour de", self.joueurs[couple[0]].pseudo)
print("----- Rangee: ")
[print("Rangee" + ":", [str(carte.numero) + " / " + str(carte.valeur) for carte in rangee.cartes]) for rangee in self.rangees]
print(joueur.pseudo + ":", [str(carte.numero) + " / " + str(carte.valeur) for carte in joueur.cartes_main])
print("Votre numero (" + str(couple[1].numero) + " / " + str(couple[1].valeur) + ") est plus petit que ceux sur les rangees")
#selection de la rangee a prendre
rangee_num = 0
while rangee_num not in range(1, 5):
rangee_num = input("Numero de la rangee a prendre: ")
if rangee_num.isdigit():
rangee_num = int(rangee_num)
#prends la rangee
self.joueurs[couple[0]].cartes_main.extend(self.rangees[rangee_num - 1].cartes)
self.rangees[rangee_num - 1].cartes = [couple[1]]
self.joueurs[couple[0]].cartes_main = sorted(self.joueurs[couple[0]].cartes_main, key=lambda carte: carte.numero)
else:
#On verifie si 6 qui prends
if len(rangeeToGo.cartes) >= 5:
#prends la rangee
self.joueurs[couple[0]].cartes_main.extend(rangeeToGo.cartes)
rangeeToGo.cartes = []
self.joueurs[couple[0]].cartes_main = sorted(self.joueurs[couple[0]].cartes_main, key=lambda carte: carte.numero)
rangeeToGo.cartes.append(couple[1])
#self.afficherCartes()
class Joueur:
def __init__(self, pseudo):
self.pseudo = pseudo
self.cartes_main = []
joueurs = [
Joueur("Joueur 1"),
Joueur("Joueur 2"),
Joueur("Joueur 3")
]
jeu = Jeu(joueurs)
jeu.distribuer()
#jeu.afficherCartes()
jeu.verifCartes()
while True:
jeu.tour()