Exemple #1
0
    def test_concludeRound(self):
        """at the end of the round  all players should be deleted properly and reset"""
        table = Table()
        newPlayer = Player(0, '1', Role.HUMAN)
        table.activePlayers.append(newPlayer)
        newPlayer = Player(20, '2', Role.HUMAN)
        newPlayer.bet = 20
        table.activePlayers.append(newPlayer)
        newPlayer = Player(40, '3', Role.HUMAN)
        newPlayer.bet = 20
        table.activePlayers.append(newPlayer)

        for player in table.activePlayers:
            player.hand.add(Card(CardValues.QUEEN, Suits.DIAMONDS))
            player.hand.add(Card(CardValues.QUEEN, Suits.DIAMONDS))
            player.hand.add(Card(CardValues.QUEEN, Suits.DIAMONDS))
        
        newPlayer = Player(40, '4', Role.HUMAN)
        newPlayer.bet = 20
        newPlayer.hand.add(Card(CardValues.QUEEN, Suits.DIAMONDS))
        newPlayer.hand.add(Card(CardValues.ACE, Suits.DIAMONDS))
        table.activePlayers.append(newPlayer)

        table.hand.add(Card(CardValues.QUEEN, Suits.DIAMONDS))
        table.hand.add(Card(CardValues.KING, Suits.DIAMONDS))

        table.concludeRound()
        assert(len(table.activePlayers) == 2)
        assert (table.activePlayers[0].name == '3')
        assert (table.activePlayers[1].name == '4')
        assert (len(table.activePlayers[0].hand.cards) == 0)
        assert (table.activePlayers[0].purse == 20)
        assert (table.activePlayers[1].purse == 60)
        assert (len(table.activePlayers[1].hand.cards) == 0)
Exemple #2
0
    def test_dealInitialHands(self):
        """Each player should recive an card from the first to dealer in the initial deal
            This process should happend twice """

        table = Table()
        newPlayer = Player(0, '1', Role.HUMAN)
        table.activePlayers.append(newPlayer)
        newPlayer = Player(20, '2', Role.HUMAN)
        newPlayer.bet = 20
        table.activePlayers.append(newPlayer)
        newPlayer = Player(40, '3', Role.HUMAN)
        newPlayer.bet = 20
        table.activePlayers.append(newPlayer)

        table.dealInitialHands()

        for player in table.activePlayers:
            assert(len(player.hand.cards) == 2)

        for i in range(len(table.activePlayers)):
            assert(table.activePlayers[i].hand.cards[0] == table.deck._Deck__deck[i])
            assert(table.activePlayers[i].hand.cards[1] == table.deck._Deck__deck[i + 4])

        assert(table.hand.cards[0] == table.deck._Deck__deck[3])
        assert(table.hand.cards[1] == table.deck._Deck__deck[7])
def test_a_player_can_win_or_lose_a_hand():
    p = Player()
    p.bet(100)
    assert p.bank == 900
    p.payout(200)
    assert p.bank == 1100
    p.bet(500)
    assert p.bank == 600
    p.payout(0)
    assert p.bank == 600
Exemple #4
0
class SetupGame:
    def __init__(self):

        # game logic related
        self.pot = 0
        self.player = Player()
        self.dealer = Dealer()

        # interface related - add interface elements here
        self.root = Tk()
        self.root.title('Casino')
        self.root.iconbitmap(
            'C:/Users/SavSamuShaman/Desktop/blackjack/pkc2.ico')
        # labels
        self.header_label = Label(
            self.root,
            text="You walk to the table and the dealer ask for your name")
        self.message_label = Label(
            self.root, text='Best of luck a the blackjack table ;)')
        self.error_message_label = Label(self.root)
        self.player_money_label = Label(
            self.root, text=f'Your money : {self.player.chips}')
        self.dealer_money_label = Label(
            self.root, text=f'Dealer money : {self.dealer.chips}')
        self.pot_label = Label(self.root, text=f'Pot : 0')
        self.current_score_label = Label(self.root, text=f'Current score : 0')
        # buttons
        self.hit_me_button = Button(self.root,
                                    text='Hit me',
                                    command=self.hit_me)
        self.stay_button = Button(self.root, text='Stay', command=self.stay)
        self.bet_button = Button(self.root, text='Bet', command=self.bet)
        self.start_button = Button(self.root,
                                   text='Tell the dealer your name',
                                   command=self.set_up_environ)
        # input box
        self.entry = Entry(self.root, width=30)

        # element placement
        self.header_label.grid(row=0, column=1)
        self.entry.grid(row=1, column=1, columnspan=3)
        self.start_button.grid(row=2, column=1, padx=15, pady=20)

        self.root.mainloop()

    def set_up_environ(self):

        name_input = self.entry.get()
        if name_input:
            self.player.name = name_input
        self.entry.delete(0, END)

        self.entry.grid_forget()
        self.start_button.grid_forget()

        # reusing existing elements
        self.header_label[
            'text'] = 'The Red Sparrow welcomes you, {name}'.format(
                name=self.player.name)
        self.start_button['text'] = 'Begin'
        self.start_button['command'] = self.new_round

        self.start_button.grid(row=4, column=1)
        self.message_label.grid(row=2, column=1)
        self.player_money_label.grid(row=3, column=2)
        self.dealer_money_label.grid(row=3, column=0)
        self.pot_label.grid(row=3, column=1)
        return

    def bet(self):
        """Clears variables and starts a new round on valid bet"""
        try:
            amount = int(self.entry.get())
            if amount > self.player.chips:
                self.error_message_label['text'] = 'Not enough money'
                self.error_message_label.grid(row=6, column=1)
                return

            self.clear_game()
            self.pot += self.player.bet(amount) + self.dealer.bet(amount)

            self.entry.grid_forget()
            self.bet_button.grid_forget()
            self.error_message_label.grid_forget()
            self.entry.delete(0, END)

            self.current_score_label['text'] = 'Current score : 0'
            self.message_label[
                'text'] = 'Best of luck a the blackjack table ;)'
            self.pot_label['text'] = 'Pot :{pot}'.format(pot=self.pot)
            self.update_money_labels()

            self.current_score_label.grid(row=4, column=1)
            self.stay_button.grid(row=4, column=0)
            self.hit_me_button.grid(row=4, column=2)

        except ValueError:
            self.error_message_label['text'] = 'Invalid bet'
            self.error_message_label.grid(row=6, column=1)

        return

    def hit_me(self):
        # hit me --> deal me a card in blackjack
        card = self.dealer.deal_card()
        self.player.add_to_score(card)
        player_score = self.player.current_score

        if player_score < 21:
            pass
        elif player_score == 21:
            self.player.win(self.pot)
            self.message_label['text'] = f'{self.player.name} has Blackjack !'
            self.conclude_round()
        else:
            self.dealer.win(self.pot)
            self.message_label['text'] = f'{self.player.name} busted out'
            self.conclude_round()

        self.current_score_label['text'] = 'Current score : {score}'.format(
            score=player_score)
        return

    def stay(self):
        player_score = self.player.current_score
        player_points = abs(21 - player_score)
        dealer_points = abs(21 - conclude_game(self.dealer))

        if dealer_points < player_points:
            self.dealer.win(self.pot)
            self.message_label[
                'text'] = f'The dealer was closer to 21. You lose'
        elif dealer_points == player_points:
            self.dealer.win(self.pot / 2)
            self.player.win(self.pot / 2)
            self.message_label['text'] = "It's a tie"
        else:
            self.player.win(self.pot)
            self.message_label['text'] = f"You win ${self.pot}"

        self.current_score_label[
            'text'] = f'Your score : {player_score} \nDealer score {self.dealer.current_score}'

        self.conclude_round()
        return

    def new_round(self):
        self.start_button.grid_forget()

        self.entry.grid(row=5, column=1)
        self.bet_button.grid(row=5, column=2)
        return

    def conclude_round(self):
        self.update_money_labels()
        self.hit_me_button.grid_forget()
        self.stay_button.grid_forget()
        self.new_round()
        return

    def clear_game(self):
        self.dealer.clear_score()
        self.player.clear_score()
        self.pot = 0
        return

    def update_money_labels(self):
        self.dealer_money_label['text'] = f'Dealer money : {self.dealer.chips}'
        self.player_money_label['text'] = f'Player money : {self.player.chips}'
        return
def test_a_player_can_bet_amounts():
    p = Player()
    assert p.bet(50) == 50
    assert p.bank == 950
Exemple #6
0
class TestPlayer(unittest.TestCase):
    def setUp(self):
        self.player = Player()

    def test_player_hand_property(self):
        self.player.hand = "8♥"
        self.assertEqual(self.player.hand, ["8♥"])
        self.assertRaises(ValueError, setattr, self.player, "hand", 1)

    def test_player_money_property(self):
        self.assertEqual(self.player.money, Decimal("2000.0"))

    def test_hit_card(self):
        deck = ["8♥", "6♣", "2♦"]
        self.player.hit_card(deck)
        self.assertEqual(self.player.hand, ["8♥"])
        self.assertEqual(self.player.points, 8)
        self.assertEqual(len(deck), 2)

    def test_show_points(self):
        deck = ["8♥", "6♣", "2♦"]
        for card in range(3):
            self.player.hit_card(deck)

        import sys
        from io import StringIO
        saved_stdout = sys.stdout
        try:
            fake_out = StringIO()
            sys.stdout = fake_out
            self.player.show_points()
            output = fake_out.getvalue().strip()
            self.assertEqual(output, "Points in game: 16")
        finally:
            sys.stdout = saved_stdout

    def test_show_hand(self):
        self.player.hand = ["8♥", "6♣", "2♦"]
        import sys
        from io import StringIO
        saved_stdout = sys.stdout
        try:
            fake_out = StringIO()
            sys.stdout = fake_out
            self.player.show_hand()
            output = fake_out.getvalue().strip()
            self.assertEqual(output, "The player have 3 cards: 8♥, 6♣, 2♦")
        finally:
            sys.stdout = saved_stdout

    def test_show_money(self):
        import sys
        from io import StringIO
        saved_stdout = sys.stdout
        try:
            fake_out = StringIO()
            sys.stdout = fake_out
            self.player.show_money()
            output = fake_out.getvalue().strip()
            self.assertEqual(output, "Money in game: 2000.0")
        finally:
            sys.stdout = saved_stdout

    def test_deal_cards(self):
        deck = ["8♥", "6♣", "2♦", "10♦", "3♣"]
        self.player.deal_cards(deck)
        self.assertEqual(self.player.hand, ["8♥", "6♣", "2♦"])
        self.assertEqual(deck, ["10♦", "3♣"])
        self.assertEqual(len(deck), 2)

    def test_bet(self):
        self.assertEqual(self.player.bet(100), 100)
        self.assertRaises(Exception, lambda: self.player.bet(10))

    def test_get_card_value(self):
        self.assertEqual(self.player.get_card_value("6♣"), 6)


    def tearDown(self):
        pass