def test_shuffle(): deck = Deck() deck_shuffled = Deck(shuffle=True) nums = [card.num for card in deck.cards] assert nums == list(range(1, 53)) nums_shuffled = [card.num for card in deck_shuffled.cards] assert len(nums_shuffled) == 52 assert nums != nums_shuffled
def __init__(self, name: str, cards: Cards): cards = copy(cards) shuffle(cards) self.name = name # maybe use descriptors? self.temp_card: Optional[Card] = None self.hand = Hand() self.reserve = Reserve() self.discard = Discard() self.deck = Deck(initial=cards)
class Fighter: def __init__(self, name: str, cards: Cards): cards = copy(cards) shuffle(cards) self.name = name # maybe use descriptors? self.temp_card: Optional[Card] = None self.hand = Hand() self.reserve = Reserve() self.discard = Discard() self.deck = Deck(initial=cards) def draw(self): # TODO: think about error handling assert self.temp_card is None self.temp_card = self.deck.draw() def place_card_into(self, collection: CollectionNames): assert self.temp_card mapping: Dict[CollectionNames, Collection] = { CollectionNames.HAND: self.hand, CollectionNames.RESERVE: self.reserve, CollectionNames.DISCARD: self.discard } mapping[collection].append(self.temp_card) self.temp_card = None
def test_deck_shuffled(): game = Game() deck = Deck(shuffle=False) game_cards = [card.num for card in game.deck.cards] deck_cards = [card.num for card in deck.cards] assert game_cards != deck_cards
def test_double_down(self): player = Player(bank=Bank(10), bet_amount=5) deck = Deck(card_nums=[10, 9, 10, 5, 5]) game = Game(player=player, deck=deck) game.start() assert player.balance == 5 assert player.total == 10 player.double_down(deck.deal_one()) # Should double bet and withdraw assert player.balance == 0 assert player.total == 20 game.dealer_go() assert game.dealer.total == 19 assert player.status == Statuses["WIN"] # Should win double original bet assert player.balance == 20
def test_tie(self): player = Player(bank=Bank(10), bet_amount=5) game = Game(player=player, deck=Deck(card_nums=[10, 9, 10, 9])) game.start() assert player.balance == 5 assert player.total == 19 game.dealer_go() assert player.status == Statuses["TIE"] assert player.balance == 10
def test_player_blackjack(self): player = Player(bank=Bank(10), bet_amount=5) game = Game(player=player, deck=Deck(card_nums=[10, 9, 10, 1])) game.start() assert player.balance == 5 assert player.total == 21 game.dealer_go() assert player.status == Statuses["BLACKJACK"] assert player.balance == 17.5
def test_empty_deck(): deck = Deck(card_nums=[1]) deck.deal_one() deck.deal_one() assert len(deck.cards) == 51 # should shuffle nums = [card.num for card in deck.cards] unshuffled = Deck() unshuffled.deal_one() ordered_nums = [card.num for card in unshuffled.cards] assert nums != ordered_nums
def test_player_bet(self): player = Player(bank=Bank(10), bet_amount=5) game = Game(player=player, deck=Deck(card_nums=[10, 10, 10, 10, 10])) game.start() assert player.balance == 5 assert player.total == 20 game.player_go() assert player.total == 30 assert player.status == Statuses["BUST"] assert player.balance == 5
def play(json=None, deck_nums=None): validate_body(json) type = json["type"] print(type, flush=True) if type == "DEAL": player = Player(bank=Bank(json["balance"]), bet_amount=int(json["bet"])) deck = (Deck(card_nums=deck_nums, shuffle=True) if deck_nums else Deck( shuffle=True)) game = Game(player=player, deck=deck) game.start() return make_response(game) validate_deck_input(deck_nums) player_cards = deserialize_cards(json["player_cards"]) dealer_cards = deserialize_cards(json["dealer_cards"]) deck = Deck(card_nums=deck_nums) player = Player(bank=Bank(json["balance"]), bet_amount=json["bet"], cards=player_cards) dealer = Dealer(cards=dealer_cards) game = Game(player=player, dealer=dealer, deck=deck) if type == "HIT": card = game.player_go() if type == "STAY": dealer_cards = game.dealer_go() if type == "DOUBLE": card = game.player_double_down() # Double down should end game dealer_cards = game.dealer_go() return make_response(game)
def __init__(self, deck=None, player=None, dealer=None): # TODO: deck, player, dealer validation self.deck = deck or Deck(shuffle=True) self.player = player or Player() self.dealer = dealer or Dealer()
def test_dealer_bust(): dealer = Dealer() # cards = make_cards(deck_bust) dealer.play_turn(Deck(card_nums=deck_bust)) assert dealer.status == Statuses["BUST"] assert dealer.total == 22
def test_dealer_stay(): dealer = Dealer() # cards = make_cards(deck_stay) dealer.play_turn(Deck(card_nums=deck_stay)) assert dealer.status == Statuses["PLAYING"] assert dealer.total == 20
def test_has_cards(): deck = Deck() deck.create_deck() assert len(deck.cards) == 52 for card in deck.cards: assert isinstance(card, Card)
def test_deck_makes_cards_from_nums(): deck = Deck(card_nums=[1, 2, 3]) assert len(deck.cards) == 3 for card in deck.cards: assert isinstance(card, Card)