def __init__(self): self.card_db = CardParser() self.black_deck = self.create_deck(card_type='Q') self.white_deck = self.create_deck(card_type='A') self.all_cards = {card.card_id: card for card in self.black_deck + self.white_deck} self.discarded_white_cards = [] self.discarded_black_cards = [] self.judged_cards = [] self.current_black_card = None
class CardHandler(): def __init__(self): self.card_db = CardParser() self.black_deck = self.create_deck(card_type='Q') self.white_deck = self.create_deck(card_type='A') self.all_cards = {card.card_id: card for card in self.black_deck + self.white_deck} self.discarded_white_cards = [] self.discarded_black_cards = [] self.judged_cards = [] self.current_black_card = None def create_deck(self, card_type, expansions=None): """ Initialises new white or black card deck for play :param card_type: Indicates whether to return a white deck or black deck :return: """ if not expansions: expansions = ["Base"] deck = [] cards = self.card_db.return_cards() index = 0 for card in cards: if card['expansion'] not in expansions: continue if card['cardType'] == card_type: card = Card(card_id=index, card_type=card['cardType'], text=card['text'], num_answers=card['numAnswers'], expansion=card['expansion']) deck.append(card) index += 1 random.shuffle(deck) return deck def draw_hand(self, player): """ For the player specified, draw back up to 10 cards. :param player: :return: """ cards_to_draw = (10 - player.hand_size) if len(self.white_deck) < cards_to_draw: self.shuffle_discards_into_white_deck() for _ in range(cards_to_draw): player.hand.add(self.white_deck.pop()) assert player.hand_size == 10 return def draw_black_card(self): """ For the card czar specified, draw 1 fresh black cards. :param player: :return: """ cards_to_draw = 1 if len(self.black_deck) < cards_to_draw: self.shuffle_discards_into_black_deck() return self.black_deck.pop() def discard(self, card=None): """ Appends a card being removed from a players hand to the discard pile :type card: Card :return: """ self.discarded_white_cards.append(card) return def shuffle_discards_into_white_deck(self): self.white_deck.append(self.discarded_white_cards) random.shuffle(self.white_deck) return def shuffle_discards_into_black_deck(self): self.black_deck.append(self.discarded_black_cards) random.shuffle(self.black_deck) return def get_card_by_id(self, card_id): return self.all_cards.get(card_id)