예제 #1
0
class UnitTestDealer_DealHand(unittest.TestCase):
    def setUp(self):
        self.dealer = Dealer()

    def test_succsesful_deal(self):
        self.dealer.deal_hand()
        self.assertEqual(len(self.dealer.cards), 2)
예제 #2
0
class DealerEntryIntegrationTests(unittest.TestCase):
    def setUp(self):
        self.dealer = Dealer()

    def test_player_card_addition(self):
        """This test will ensure that the dealer properly deals to the player"""
        self.dealer.deal_hand()
        self.assertEqual(self.dealer.player.get_number_cards(), 2)

    def test_end_hand_resets_cards(self):
        """This will ensure that when the game is wrapped up, 
        the player hand is properly cleared by the dealer."""
        self.dealer.deal_hand()
        self.dealer.end_hand()
        self.assertEqual(self.dealer.player.get_number_cards(), 0)
예제 #3
0
파일: Table.py 프로젝트: td736/Blackjack
class Table:
    def __init__(self):
        self.dealer = Dealer()
        self.player_list = []

    def add_player(self):
        name = input("Name: ")
        buy_in = input("Buy-in: ")
        self.player_list.append(Player(name, int(buy_in)))

    def remove_player(self, name):
        for player in self.player_list:
            if player.name == name:
                self.player_list.remove(player)

    def start_hand(self):
        self.dealer.reset_table()
        for player in self.dealer.players:
            player.bet(int(input("{}'s bet: ".format(player.name))))
            self.dealer.deal_hand()

    def hit_loop(self):
        for player in self.dealer.players:
            print("{}'s turn.".format(player.name))
            player.display_cards()

            while input("Hit or stand(s): ") != "s":
                self.dealer.hit(player)

                if player.card_value > 21:
                    print("{} bust with:".format(player.name))
                    player.display_cards()
                    break

                elif player.card_value == 21:
                    print("{} has 21 with: ".format(player.name))
                    player.display_cards()
                    break

                player.display_cards()

    def dealers_turn(self):
        self.dealer.play_own_hand()

        if self.dealer.card_value > 21:
            print("Dealer busts with {}.".format(self.dealer.display_cards()))
            for player in self.dealer.players:
                if player.card_value <= 21:
                    self.dealer.winners.append(player)

        elif self.dealer.card_value <= 21:
            for player in self.dealer.players:
                if player.card_value == self.dealer.card_value:
                    print("{} tied with dealer. ${} returned.".format(
                        player.name, player.money_bet))
                    player.money += player.money_bet

                elif 21 >= player.card_value > self.dealer.card_value:
                    print("{} beats the dealer. Won ${}.".format(
                        player.name, player.money_bet * 2))
                    self.dealer.winners.append(player)

                elif player.card_value < self.dealer.card_value <= 21:
                    print("{} lost ${}.".format(player.name, player.money_bet))

        print("Dealers cards are:")
        self.dealer.display_cards()
        self.dealer.pay_winners()
예제 #4
0
파일: Game.py 프로젝트: afcarl/BlackJack.py
class Game(object):
    def __init__(self):
        self.game_over = False
        self.player = Player()
        self.deck = Deck()
        self.dealer = Dealer(self.deck)
        self.start_game()

    def start_game(self):
        print 'Welcome to Blackjack Version 0.1.0'
        print 'Developed by Christian M. Brandalise'
        print '------------------------------------'
        player_name = raw_input('Please enter you name\n')

        try:
            self.player.set_name(player_name)
        except:
            print 'Error'
        else:
            self.game_loop()

    def set_bet(self):
        bet = raw_input('Please enter your bet from 1 to {cash}'.format(
            cash=self.player.cash))
        try:
            bet = int(bet)
        except:
            print 'You did not enter a number.'

        if bet in range(1, self.player.cash + 1):
            self.player.cash -= bet
            self.dealer.current_bet += bet

    def display_balance(self):
        print 'Your balance \n'
        print self.player.cash
        print 'Dealers balance \n'
        print self.dealer.register

    def check_win(self, player_hand, dealer_hand):
        if self.check_hand_value(player_hand) > self.check_hand_value(
                dealer_hand):
            return True
        else:
            return False

    def hit(self):
        card = self.dealer.deal_card()
        self.player.add_card_to_hand(card)

    def check_hand_value(self, hand):
        total = 0
        for card in hand:
            if card.rank in ['2', '3', '4', '5', '6', '7', '8', '9', '10']:
                total += int(card.rank)
            elif card.rank in ['Jack', 'Queen', 'King']:
                total += 10
            else:
                c_ace = total
                c_ace += 11
                if c_ace > 21:
                    total += 1
                else:
                    total += 11

        return total

    def check_bust(self, hand):
        if self.check_hand_value(hand) > 21:

            return True
        else:
            return False

    def award_bet(self, to_who):
        if to_who == 'dealer':
            self.dealer.register += self.dealer.current_bet
            self.dealer.current_bet = 0
        else:
            winning = self.dealer.current_bet * 2
            self.dealer.register -= winning
            self.player.cash += winning

    def game_loop(self):
        print 'Let\'s play some Blackjack!'
        self.set_bet()
        self.display_balance()
        print '********* Dealing your hand ***********\n'
        hand = self.dealer.deal_hand(2)
        self.player.set_hand(hand)
        self.player.display_hand()
        print '\n'
        print '********* Dealing dealers hand ***********\n'
        dhand = self.dealer.deal_hand(2)
        self.dealer.set_dealer_hand(dhand)
        self.dealer.display_hand(True)
        print '******************************************'
        while not self.game_over:

            self.player.display_hand()
            print '\n'

            self.dealer.display_hand(True)
            print 'What would you like to do?'
            print '1. HIT'
            print '2. STOP'
            choice = int(raw_input())

            if choice in range(1, 4):
                if choice == 1:
                    self.hit()
                    self.player.display_hand()
                    if self.check_bust(self.player.hand):
                        print 'You busted!'
                        self.award_bet('dealer')
                        self.display_balance()
                        self.game_over = True

                elif choice == 2:
                    print 'Let\'s see who won!'
                    if self.check_win(self.player.hand, self.dealer.hand):
                        self.award_bet('player')
                        self.display_balance()
                        print "Blackjack! Congratulations"

                    else:
                        self.award_bet('dealer')
                        self.display_balance()
                        print "The dealer has won"
                    self.dealer.display_hand(False)
                    self.game_over = True

        else:
            print 'The game has ended my dear'
            self.game_loop()
예제 #5
0
class Game(object):

    def __init__(self):
        self.game_over = False
        self.player = Player()
        self.deck = Deck()
        self.dealer = Dealer(self.deck)
        self.start_game()

    def start_game(self):
        print 'Welcome to Blackjack Version 0.1.0'
        print 'Developed by Christian M. Brandalise'
        print '------------------------------------'
        player_name = raw_input('Please enter you name\n')

        try:
            self.player.set_name(player_name)
        except:
            print 'Error'
        else:
            self.game_loop()

    def set_bet(self):
        bet = raw_input('Please enter your bet from 1 to {cash}'.format(cash=self.player.cash))
        try:
            bet = int(bet)
        except:
            print 'You did not enter a number.'

        if bet in range(1, self.player.cash + 1):
            self.player.cash -= bet
            self.dealer.current_bet += bet

    def display_balance(self):
        print 'Your balance \n'
        print self.player.cash
        print 'Dealers balance \n'
        print self.dealer.register

    def check_win(self, player_hand, dealer_hand):
        if self.check_hand_value(player_hand) > self.check_hand_value(dealer_hand):
            return True
        else:
            return False

    def hit(self):
        card = self.dealer.deal_card()
        self.player.add_card_to_hand(card)

    def check_hand_value(self, hand):
        total = 0
        for card in hand:
            if card.rank in ['2', '3', '4', '5', '6', '7', '8', '9', '10']:
                total += int(card.rank)
            elif card.rank in ['Jack', 'Queen', 'King']:
                total += 10
            else:
                c_ace = total
                c_ace += 11
                if c_ace > 21:
                    total += 1
                else:
                    total += 11

        return total

    def check_bust(self, hand):
        if self.check_hand_value(hand) > 21:

            return True
        else:
            return False

    def award_bet(self, to_who):
        if to_who == 'dealer':
            self.dealer.register += self.dealer.current_bet
            self.dealer.current_bet = 0
        else:
            winning = self.dealer.current_bet * 2
            self.dealer.register -= winning
            self.player.cash += winning


    def game_loop(self):
        print 'Let\'s play some Blackjack!'
        self.set_bet()
        self.display_balance()
        print '********* Dealing your hand ***********\n'
        hand = self.dealer.deal_hand(2)
        self.player.set_hand(hand)
        self.player.display_hand()
        print '\n'
        print '********* Dealing dealers hand ***********\n'
        dhand = self.dealer.deal_hand(2)
        self.dealer.set_dealer_hand(dhand)
        self.dealer.display_hand(True)
        print '******************************************'
        while not self.game_over:

            self.player.display_hand()
            print '\n'

            self.dealer.display_hand(True)
            print 'What would you like to do?'
            print '1. HIT'
            print '2. STOP'
            choice = int(raw_input())

            if choice in range(1,4):
                if choice == 1:
                    self.hit()
                    self.player.display_hand()
                    if self.check_bust(self.player.hand):
                        print 'You busted!'
                        self.award_bet('dealer')
                        self.display_balance()
                        self.game_over = True

                elif choice == 2:
                    print 'Let\'s see who won!'
                    if self.check_win(self.player.hand, self.dealer.hand):
                        self.award_bet('player')
                        self.display_balance()
                        print "Blackjack! Congratulations"
                        
                    else:
                        self.award_bet('dealer')
                        self.display_balance()
                        print "The dealer has won"
                    self.dealer.display_hand(False)
                    self.game_over = True

        else:
            print 'The game has ended my dear'
            self.game_loop()
def main():
    player = Player()
    dealer = Dealer()
    print "Hello! Welcome to Blackjack!"
    print "The table minimum is " + str(table_min) + " and table maximum is " + str(table_max)
    """Initialize variables"""
    hand_counter = 1
    while True:
        try:
            player.set_current_bal(decimal.Decimal(raw_input("How much would you like to start with? \n")))
            break
        except decimal.InvalidOperation:
            print "\nPlease type in a valid number.\n"
    while True:
        """Check if the player can play first."""
        if not player.get_current_bal() >= table_min:
            print "Sorry! You do not have enough money. Thank you for playing. "
            print "Your current balance is $" + str(player.get_current_bal())
            break

        """Get command (Check Balance, Leave Table, Next hand)"""
        print "\nCommands:"
        command = raw_input("Current balance is $" + str(
            player.get_current_bal()) + "   x = Exit   Enter in bet amount:\n(Or Enter to keep the previous bet.)\n")
        while command != 'x' or command != 'X':
            if command == '':
                if player.get_current_bet() < table_min:
                    print "You have not put in an initial bet. " \
                          "Please bet above the table minimum: $" + str(table_min) + "\n"
                elif player.get_current_bet() > player.get_current_bal() or \
                        not table_min <= player.get_current_bet() <= table_max:
                    player.set_current_bet(0)
                    print "Please reenter your bet below your balance and within the table range: " \
                          "$" + str(table_min) + "-$" + str(table_max) + "\n"
                else:
                    break
            elif command == 'x' or command == 'X':
                break
            else:
                try:
                    if table_min <= decimal.Decimal(command) <= player.get_current_bal() and decimal.Decimal(command) <= table_max:
                        player.set_current_bet(decimal.Decimal(command))
                        break
                    else:
                        print "Please bet below your balance and within the table range: " \
                              "$" + str(table_min) + "-$" + str(table_max) + "\n"
                except decimal.InvalidOperation:
                    print "\nPlease type in a valid command or " +\
                          "number above the table minimum ($" + str(table_min) + ")\n"
            command = raw_input("Current balance is $" + str(
                player.get_current_bal()) + "   x = Exit   Enter in bet amount:\n"
                                            "(Or Enter to keep the previous bet.)\n")

        if command == 'x':  # Exit the game
            break  # I know there is a better way to do this but this works.

        """Deal Hands"""
        print "\nHand " + str(hand_counter)
        player.set_hand([Card(0, 10), Card(0, 10)])
        dealer.set_hand(dealer.deal_hand())

        dealer.show_hand(dealer.get_hand(), [player.get_hand()], False)
        dealer, player, continue_game = dealer.insurance(dealer, player)

        if continue_game:
            """play"""
            dealer, player, bust = player.play(dealer, player, True)
            if not bust:
                player.set_current_bal_difference(-player.get_current_bet())
                print "Dealer wins."
            else:
                if len(player.get_hands()) == 1:
                    if len(player.get_hand()) == 2 and Dealer.value_hand(player.get_hand()) == 21:
                        player.set_current_bal_difference(decimal.Decimal(1.5) * player.get_current_bet())
                        print "Winner Winner Chicken Dinner! Blackjack! You win!"
                    else:
                        dealer, player = dealer.dealer_play(dealer, player)
                        dealer_hand = Dealer.value_hand(dealer.get_hand())
                        player_hand = Dealer.value_hand(player.get_hand())
                        if player_hand > dealer_hand or dealer_hand > 21:
                            player.set_current_bal_difference(player.get_current_bet())
                            print "You win!"
                        elif player_hand == dealer_hand:
                            print "Push! Tie"
                        else:
                            player.set_current_bal_difference(-player.get_current_bet())
                            print "Dealer wins."
                else:
                    dealer, player = dealer.dealer_play(dealer, player)
                    dealer_hand = Dealer.value_hand(dealer.get_hand())
                    split_hand = 1
                    for hand in player.get_hands():
                        player_hand = Dealer.value_hand(hand)
                        if player_hand > 21:
                            print "Hand " + str(split_hand) + " busts!"
                        elif player_hand > dealer_hand or dealer_hand > 21:
                            player.set_current_bal_difference(player.get_current_bet())
                            print "Hand " + str(split_hand) + " wins!"
                        elif player_hand == dealer_hand:
                            print "Hand " + str(split_hand) + " pushes! Tie"
                        else:
                            player.set_current_bal_difference(-player.get_current_bet())
                            print "Hand " + str(split_hand) + " Dealer wins"
                        split_hand += 1
        else:
            dealer.show_hand(dealer.get_hand(), player.get_hand(), True)
            if Dealer.value_hand(dealer.get_hand()) == 21 and Dealer.value_hand(player.get_hand()) == 21:
                print "Push! Tie"
            elif Dealer.value_hand(dealer.get_hand()) == 21:
                print "Dealer Wins. Dealer Hand Value: 21"
            else:
                print "Dealer Wins! ~ But not exactly sure why"

        hand_counter += 1