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
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
 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
Exemplo n.º 9
0
 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
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
 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()
Exemplo n.º 12
0
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
Exemplo n.º 13
0
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
Exemplo n.º 14
0
def test_has_cards():
    deck = Deck()
    deck.create_deck()
    assert len(deck.cards) == 52
    for card in deck.cards:
        assert isinstance(card, Card)
Exemplo n.º 15
0
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)