fix another finish bug in myrummy
This commit is contained in:
+7
-1
@@ -38,8 +38,14 @@ Regeln der Implementierung:
|
||||
- Satz: gleiche Zahl, unterschiedliche Farben, 3-4 Karten
|
||||
- Folge: gleiche Farbe, aufsteigend, 3+ Karten
|
||||
- Joker dürfen in Folgen Lücken füllen
|
||||
- Erstmeldung: mindestens 30 Punkte
|
||||
- Erstmeldung: mindestens 30 Punkte (abschaltbar)
|
||||
- Wer keine Handkarten mehr hat, gewinnt
|
||||
- Zug = legen ODER ziehen, nie beides:
|
||||
- Wer gelegt hat, darf nicht mehr ziehen
|
||||
- Wer gezogen hat, darf nicht mehr legen und beendet den Zug mit finish
|
||||
- Nach dem Ziehen ist finish auch ohne 30 Punkte erlaubt (man darf passen,
|
||||
solange man noch nicht eröffnet hat)
|
||||
- Leerer Tisch + nicht gezogen: finish verlangt, dass man legt oder zieht
|
||||
|
||||
Hinweis: Das ist eine bewusst einfache CLI-Version. Die Regeln für Sonderfälle
|
||||
wie Joker-Rücknahme, 1-13-Runden, Punktwertung nach Spielende usw. können später
|
||||
|
||||
+18
-10
@@ -27,6 +27,7 @@ class Game:
|
||||
self.deck=deck(); random.shuffle(self.deck)
|
||||
self.history=[]
|
||||
self.drew=False
|
||||
self.melded=False
|
||||
self.handover=False
|
||||
for p in self.players:
|
||||
p.hand=sort_hand([self.deck.pop() for _ in range(14)])
|
||||
@@ -35,12 +36,12 @@ class Game:
|
||||
def p(self): return self.players[self.turn]
|
||||
|
||||
def save(self):
|
||||
self.history.append(copy.deepcopy((self.players,self.table,self.deck,self.drew)))
|
||||
self.history.append(copy.deepcopy((self.players,self.table,self.deck,self.drew,self.melded)))
|
||||
|
||||
def undo(self):
|
||||
if not self.history:
|
||||
print('Nichts zum Rückgängigmachen.'); return
|
||||
self.players,self.table,self.deck,self.drew=self.history.pop()
|
||||
self.players,self.table,self.deck,self.drew,self.melded=self.history.pop()
|
||||
|
||||
def clear(self): print('\033[2J\033[H',end='')
|
||||
|
||||
@@ -82,10 +83,12 @@ class Game:
|
||||
return n-1
|
||||
|
||||
def move_hand(self,h,g):
|
||||
if self.drew: raise ValueError('Du hast bereits gezogen - damit ist dein Zug beendet.')
|
||||
hi=self.idx(h,len(self.p.hand)); self.save()
|
||||
card=self.p.hand.pop(hi)
|
||||
if g.lower()=='new': self.table.append([card])
|
||||
else: self.table[self.idx(g,len(self.table))].append(card)
|
||||
self.melded=True
|
||||
|
||||
def move_table(self,g,c):
|
||||
gi=self.idx(g,len(self.table)); ci=self.idx(c,len(self.table[gi])); self.save()
|
||||
@@ -104,6 +107,7 @@ class Game:
|
||||
self.save(); x=self.table[gi]; self.table[gi]=x[:pos]; self.table.insert(gi+1,x[pos:])
|
||||
|
||||
def draw(self):
|
||||
if self.melded: raise ValueError('Du hast bereits Karten gelegt - ziehen ist dann nicht mehr erlaubt.')
|
||||
if self.drew: raise ValueError('Du hast bereits gezogen.')
|
||||
if not self.deck: raise ValueError('Stapel leer.')
|
||||
self.save(); self.p.hand.append(self.deck.pop()); self.p.hand=sort_hand(self.p.hand); self.drew=True
|
||||
@@ -112,17 +116,21 @@ class Game:
|
||||
if any(not g or not valid(g, self.wrap) for g in self.table):
|
||||
print('Zug ungültig: Es gibt eine ungültige Tischgruppe.')
|
||||
return False
|
||||
if not self.p.opened:
|
||||
if self.min30:
|
||||
total=sum(sum(points(c) for c in g) for g in self.table)
|
||||
if total<30:
|
||||
print(f'Erstmeldung braucht mindestens 30 Punkte. Aktuell: {total}')
|
||||
return False
|
||||
self.p.opened=True
|
||||
if self.table:
|
||||
if not self.p.opened:
|
||||
if self.min30:
|
||||
total=sum(sum(points(c) for c in g) for g in self.table)
|
||||
if total<30:
|
||||
print(f'Erstmeldung braucht mindestens 30 Punkte. Aktuell: {total}')
|
||||
return False
|
||||
self.p.opened=True
|
||||
elif not self.drew:
|
||||
print('Du musst entweder Karten legen oder ziehen.')
|
||||
return False
|
||||
if not self.p.hand:
|
||||
print(f'\n{self.p.name} gewinnt!')
|
||||
return True
|
||||
self.turn=1-self.turn; self.drew=False; self.history=[]
|
||||
self.turn=1-self.turn; self.drew=False; self.melded=False; self.history=[]
|
||||
self.handover=True
|
||||
return False
|
||||
|
||||
|
||||
Reference in New Issue
Block a user