Петър обнови решението на 08.11.2022 00:58 (преди около 2 години)
+import random
+
+suits = ["clubs", "diamonds", "hearts", "spades"]
+
+
+class Card:
+ def __init__(self, suit, face):
+ self.suit = suit
Бих използвал protected имена на атрибути като тези, които не използваш извън класа - self._suit
+ self.face = face
+
+ def get_suit(self):
+ return self.suit
+
+ def get_face(self):
+ return self.face
+
+
+class Deck:
+ def __init__(self, *face_filter):
+ self.cards = []
+ if not face_filter:
+ self.face_filter = [2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K", "A"]
Смятам, че ще е по-удачно всички елементи да са от един и същи тип - str
. А и условието го изисква.
+ else:
+ self.face_filter = face_filter[0]
+ for face in self.face_filter:
+ for suit in suits:
+ self.cards.append(Card(suit, face))
+
+ def cut(self):
+ self.cards = self.cards[1:] + [self.cards[0]]
Цепенето на карти трябва да има случаен елемент. Не е редно всеки път да цепиш само на първата карта.
+
+ def shuffle(self):
+ random.shuffle(self.cards)
+
+ def get_cards(self):
+ return self.cards
+
+
+class Player:
+ def get_cards(self):
+ return self.cards
+
+
+class Game:
+ def __init__(self, number_of_players, dealing_direction, dealing_instructions):
+ self.number_of_players = number_of_players
+ self.dealing_direction = dealing_direction
+ self.dealing_instructions = dealing_instructions
+ self.deck = Deck()
+ self.players = []
Това като че ли не го пълниш.
+
+ def get_players(self):
+ return self.players
+
+ def prepare_deck(self):
+ for p in self.players:
+ self.deck += p.cards
+ p.cards = []
+ self.deck.shuffle()
+ self.deck.cut()
+
+ def deal(self, player):
+ current_index = players.index(player)
+ finish = current_index
+ n = len(self.players)
+ direction = 1
+ if self.dealing_direction == "rtl":
+ direction = -1
+ for i in self.dealing_instructions:
+ while 0 <= current_index < n:
+ self.players[current_index] += self.deck[:i]
+ self.deck = self.deck[i:]
+ current_index += direction
+ current_index -= (n - 1) * direction
+ while not current_index == finish:
+ self.players[current_index] += self.deck[:i]
+ self.deck = self.deck[i:]
+ current_index += direction
+
+ def get_deck(self):
+ return self.deck
+
+
+class Belot(Game):
+ def __init__(self):
+ super().__init__(4, "ltr", (2, 3, 3))
+ self.deck = Deck()
+
+
+class Poker(Game):
+ def __init__(self):
+ super().__init__(6, "rtl", (1, 1, 1, 1, 1))
Броят играчи за Покер е 9.