Exemplo n.º 1
0
class Game:
    def __init__(self, AI):
        self.wins = 0
        self.losses = 0
        self.ties = 0
        self.num = 0
        self.isAI = AI

    def play(self):
        playing = True
        no_of_games = 0

        while playing and no_of_games < 50:
            self.deck = Deck()
            self.deck.shuffle()

            self.player_hand = Hand()
            self.player_hand_split = Hand()
            self.dealer_hand = Hand(dealer=True)

            for i in range(2):
                self.player_hand.add_card(self.deck.deal())
                self.dealer_hand.add_card(self.deck.deal())

            print("------------")
            print("You:")
            self.player_hand.display()
            print()
            print("Dealer:")
            self.dealer_hand.display()
            print()

            game_over = False
            is_first_round = True
            split = False
            

            while not game_over:
                has_blackjack = (self.player_hand.get_value() == 21) or (self.player_hand_split.get_value() == 21)
                choice = ""
                
                if not has_blackjack:
                    if (self.player_hand.cards[0].value == self.player_hand.cards[1].value) and is_first_round:
                        if self.isAI:
                            dealer_up_card = ""
                            if self.dealer_hand.cards[1].value == "10" or self.dealer_hand.cards[1].value == "J" or self.dealer_hand.cards[1].value == "Q" or self.dealer_hand.cards[1].value == "K":
                                dealer_up_card = "T"
                            else:
                                dealer_up_card = self.dealer_hand.cards[1].value
                            player_up_card = ""
                            if self.player_hand.cards[0].value == "10" or self.player_hand.cards[0].value == "J" or self.player_hand.cards[0].value == "Q" or self.player_hand.cards[0].value == "K":
                                player_up_card = "T"
                            else:
                                player_up_card = self.player_hand.cards[0].value
                            choice = chart_pairs[dealer_up_card][player_up_card]
                        else:
                            choice = input("Hit(h), Stick(s), Split(p) or Double Down(d): ").lower()
                        if choice in ['p']:
                            split = True
                            self.player_hand_split.cards.append(self.player_hand.cards[1])
                            self.player_hand.cards.pop(1)
                        is_first_round = False
                    else:
                        if self.isAI:
                            dealer_up_card = ""
                            if self.dealer_hand.cards[1].value == "10" or self.dealer_hand.cards[1].value == "J" or self.dealer_hand.cards[1].value == "Q" or self.dealer_hand.cards[1].value == "K":
                                dealer_up_card = "T"
                            else:
                                dealer_up_card = self.dealer_hand.cards[1].value
                            player_up_card = ""
                            if self.player_hand.cards[0].value == "A" or self.player_hand.cards[1].value == "A":
                                if self.player_hand.cards[0].value == "A":
                                    player_up_card = self.player_hand.cards[1].value
                                else:
                                    player_up_card = self.player_hand.cards[0].value
                                choice = chart_ace[dealer_up_card][player_up_card]
                            else:
                                player_total = 0
                                if self.player_hand.cards[0].value == "J" or self.player_hand.cards[0].value == "Q" or self.player_hand.cards[0].value == "K":
                                    player_total += 10
                                else:
                                    player_total += int(self.player_hand.cards[0].value)
                                if self.player_hand.cards[1].value == "J" or self.player_hand.cards[1].value == "Q" or self.player_hand.cards[1].value == "K":
                                    player_total += 10
                                else:
                                    player_total += int(self.player_hand.cards[1].value)
                                player_up_card = str(player_total)
                                choice = chart_totals[dealer_up_card][player_up_card]
                            
                        else:
                            choice = input("Hit(h), Stick(s), or Double Down(d): ").lower()
                        is_first_round = False
                if choice in ['h','p']:
                    if self.player_hand.get_value() < 21:
                        self.player_hand.add_card(self.deck.deal())
                    self.player_hand.display()
                    if split == True:
                        if self.player_hand_split.get_value() < 21:
                            self.player_hand_split.add_card(self.deck.deal())
                        print("--------")
                        self.player_hand_split.display()
                    print()

                    if split == True:
                        if self.player_hand.get_value() > 21 and self.player_hand_split.get_value() > 21:
                            print("You are Bust!")
                            self.losses += 1
                            game_over = True
                    else:
                        if self.player_hand.get_value() > 21:
                            print("You are Bust!")
                            self.losses += 1
                            game_over = True

                elif choice in ['s','d'] or choice == "":
                    player_hand_split_value = 0
                    if choice == 'd':
                        self.player_hand.add_card(self.deck.deal())
                        self.player_hand.display()
                        if split == True:
                            self.player_hand_split.add_card(self.deck.deal())
                            print("--------")
                            self.player_hand_split.display()
                        print()
                    player_hand_value = self.player_hand.get_value()
                    player_hand_split_value = self.player_hand_split.get_value()

                    while self.dealer_hand.get_value() < 17:
                        self.dealer_hand.add_card(self.deck.deal())

                    dealer_hand_value = self.dealer_hand.get_value()

                    player_value = 0
                    if split:
                        if player_hand_value <= 21 and player_hand_split_value <= 21:
                            if player_hand_value == player_hand_split_value:
                                player_value = player_hand_value
                            elif player_hand_value > player_hand_split_value:
                                player_value = player_hand_value
                            else:
                                player_value = player_hand_split_value
                        elif player_hand_value > 21 and player_hand_split_value <= 21:
                            player_value = player_hand_split_value
                        else:
                            player_value = player_hand_value
                    else:
                        player_value = player_hand_value
                    
                    print()
                    print("Final Results")
                    print("-------------")
                    print("You:", player_value)
                    if player_value > 21:
                        print("Dealer Wins!")
                        self.losses += 1
                    else:
                        print("Dealer:", dealer_hand_value)

                        if player_value > dealer_hand_value:
                            print("You Win!")
                            self.wins += 1
                        elif player_value == dealer_hand_value:
                            print("Tie!")
                            self.ties += 1
                        else:
                            if dealer_hand_value <= 21:
                                print("Dealer Wins!")
                                self.losses += 1
                            else:
                                print("You Win!")
                                self.wins += 1
                    game_over = True
            self.num += 1
            if self.isAI:
                no_of_games += 1
                if no_of_games == 50:
                    playing = False
                    print("Wins: ",self.wins)
                    print("Ties: ",self.ties)
                    print("Losses: ",self.losses)
                    playing = False
                else:
                    game_over = False
                
            else:
                again = input("Play Again? [Y/N] ")
                if again.lower() == "n":
                    playing = False
                    print("Wins: ",self.wins)
                    print("Ties: ",self.ties)
                    print("Losses: ",self.losses)
                else:
                    game_over = False
                    print()
Exemplo n.º 2
0
        player.bet(x)
        print(f'{player.name} bets {player.bet_amt}')
        print('\n')
        time.sleep(1)

    #Deal Cards
    print("Let's deal\n")
    time.sleep(1)

    ct = 1

    while ct <= 2:

        for player in playerlist:
            player.receive_card(gamedeck.deal())
        dealer1.receive_card(gamedeck.deal())
        ct += 1

    #Show Dealer Top Card & Player Cards
    print(f'Dealer showing {dealer1.hand[1].value}:')
    print(dealer1.hand[1])
    print('\n')

    for player in playerlist:
        player.calc_hand_val()
        print(f'{player.name} has {player.hand_val}:')
        for card in player.hand:
            print(card)
        print('\n')
    print('----------\n')