group-b/group_b/deck.py

47 lines
1.1 KiB
Python

class Card():
def __init__(self, name, deck):
self.name = name
self.deck = deck
def discard(self):
self.deck.discard(self)
return None
def __str__(self):
return self.name
from random import randint
from typing import List
class Deck():
def __init__(self):
self._cards = self.load_cards()
self._discard = []
def load_cards(self) -> List[Card]:
raise NotImplemented()
def shuffle(self):
self._cards.extend(self._discard)
self._discard = []
# (ref:fisher-yates)
for old_slot, card in enumerate(reversed(self._cards)):
new_slot = randint(0, len(self._cards)-1)
self._cards[old_slot], self._cards[new_slot] = (
self._cards[new_slot], self._cards[old_slot]
)
def draw(self) -> Card:
if len(self._cards) == 0:
print("shuffle...")
self.shuffle()
return self._cards.pop()
def discard(self, card: Card):
self._discard.append(card)
def depth(self) -> int:
return len(self._cards)