Python :: Aufgabe #300 :: Lösung #1
2 Lösungen
#300
Kniffel (Yahtzee, Pasch)
Fortgeschrittener - Python
von JKooP
- 06.11.2020 um 15:24 Uhr
Schreibe eine Klasse/Modul mit der/dem es möglich ist das Spiel Kniffel in abgespeckter Form abzubilden.
Zur Vereinfachung soll statt 3 nur 1 Mal gewürfelt werden.
Als Ergebnis sollen alle möglichen Gewinnstufen eines Wurfs sowohl des oberen als auch des unteren Blocks mit der erreichten Punktzahl ausgegeben werden.
Beispielwurf: 2-2-2-4-4
Oberer Block:
Zweier: 2+2+2 = 6 (nur Summe der 2er zählen)
Vierer: 4+4 = 8 (nur Summe der 4er zählen)
Unterer Block:
Dreierpasch: 2+2+2 und 4+6 = 16 (Summe aller Augen)
Full House: Dreierpasch + Zweierpasch -> Sonderwertung = 25
Chance: 2+2+2+4+6 = 16 (Summe aller Augen)
Als Erweiterung kann auch das dreimalige Würfeln implementiert werden.
Da die Interaktion mit der Konsole nicht allzu bedienerfreundlich ist, sollte
man vielleicht auf eine grafischen Benutzeroberfläche ausweichen.
Viel Spaß
Zur Vereinfachung soll statt 3 nur 1 Mal gewürfelt werden.
Als Ergebnis sollen alle möglichen Gewinnstufen eines Wurfs sowohl des oberen als auch des unteren Blocks mit der erreichten Punktzahl ausgegeben werden.
Beispielwurf: 2-2-2-4-4
Oberer Block:
Zweier: 2+2+2 = 6 (nur Summe der 2er zählen)
Vierer: 4+4 = 8 (nur Summe der 4er zählen)
Unterer Block:
Dreierpasch: 2+2+2 und 4+6 = 16 (Summe aller Augen)
Full House: Dreierpasch + Zweierpasch -> Sonderwertung = 25
Chance: 2+2+2+4+6 = 16 (Summe aller Augen)
Als Erweiterung kann auch das dreimalige Würfeln implementiert werden.
Da die Interaktion mit der Konsole nicht allzu bedienerfreundlich ist, sollte
man vielleicht auf eine grafischen Benutzeroberfläche ausweichen.
Viel Spaß
#1
von Klaus (1960 Punkte)
- 02.12.2020 um 23:26 Uhr
Python-Code
from random import randint class Yahtzee: def __init__(self): self.roll=[] self.roll_result={} self.block = {} def start(self, iteration): for index in range(iteration): self.roll_dice() print(f'\nWurf: {self.roll}') self.evaluate_roll() self.show_result() def roll_dice(self): self.roll=[] self.roll_result={1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0} for index in range(5): self.roll.append(randint(1, 6)) for element in self.roll: self.roll_result[element] += 1 def evaluate_roll(self): self.block = { 'Einser': 0, 'Zweier': 0, 'Dreier': 0, 'Vierer': 0, 'Fünfer': 0, 'Sechser': 0, 'Dreierpasch': 0, 'Viererpasch': 0, 'Full House': 0, 'Kleine Straße': 0, 'Große Straße': 0, 'Yahtzee': 0, 'Chance': 0 } if self.__check_dice_rolled(): self.block['Einser'] = self.roll_result[1] * 1 self.block['Zweier'] = self.roll_result[2] * 2 self.block['Dreier'] = self.roll_result[3] * 3 self.block['Vierer'] = self.roll_result[4] * 4 self.block['Fünfer'] = self.roll_result[5] * 5 self.block['Sechser'] = self.roll_result[6] * 6 if max(self.roll_result.values()) >= 3: self.block['Dreierpasch'] = sum(self.roll) if max(self.roll_result.values()) >= 4: self.block['Viererpasch'] = sum(self.roll) if 3 in self.roll_result.values() and 2 in self.roll_result.values(): self.block['Full House'] = 25 check_list = sorted(set(self.roll)) if check_list == [1, 2, 3, 4] or check_list == [2, 3, 4, 5] or check_list == [3, 4, 5, 6]: self.block['Kleine Straße'] = 30 if sorted(self.roll) in [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]: self.block['Große Straße'] = 40 self.block['Kleine Straße'] = 30 if max(self.roll_result.values()) == 5: self.block['Yahtzee'] = 50 self.block['Chance'] = sum(self.roll) else: print('Sie müssen die Würfel erst werfen, bevor Sie das Ergebnis auswerten können.') def show_result(self): if self.__check_result_evaluated(): for element in self.block: if self.block[element] != 0: print(f'{element:15.15}{str(self.block[element]):>2.2} Pkt.') else: print('Sie müssen erst würfeln bzw. den Wurf auswerten, bevor Sie die Ergebnisse angezeigt bekommen.') def __check_dice_rolled(self): if not self.roll: return False else: return True def __check_result_evaluated(self): if not self.block: return False else: return True if __name__ == "__main__": y = Yahtzee() y.start(5)
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1