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)
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)
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()
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()
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