有人可以帮我这个二十一点python代码吗?

时间:2019-06-02 02:15:57

标签: python blackjack

我想知道每张卡发完后如何包括这些值的总和。

import random

suits = ("Clubs", "Diamonds", "Spades", "Hearts")

ranks = ("Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King", "Ace")

values = {"Two": 2, "Three": 3, "Four": 4, "Five": 5, "Six": 6, "Seven": 7, "Eight": 8, "Nine": 9, "Ten": 10, "Jack": 10,
           "Queen": 10, "King": 10, "Ace": 11}

playing = True



class Card:

    def __init__(self,suit,rank):
        self.suit = suit
        self.rank = rank

    def __str__(self):
        return self.rank+ " of " +self.suit

class Deck:

    def __init__(self):
        self.deck = [] # start with an empty list
        for suit in suits:
            for rank in ranks:
                self.deck.append(Card(suit,rank))

    def __str__(self):
        deck_comp = ' '
        for card in self.deck:
            deck_comp += '\n' + card.__str__()
        return "The deck has: " + deck_comp

    def shuffle(self):
        random.shuffle(self.deck)

    def deal(self):
        single_card = self.deck.pop()
        return single_card


class Hand:

    def __init__(self):
        self.cards = [] # start with empty list as we deal
        self.value = 0 # add value but start with zero
        self.aces = 0 # add an attribute to keep track of aces

    def add_card(self,card):
        self.cards.append(card)
        self.value += values[card.rank]

        if card.rank == "Ace":
            self.aces += 1

    def adjust_for_ace(self):
        while self.value > 21 and self.aces:
            self.value -= 10
            self.aces -= 1
class Chips:

    def __init__(self,total=100):
        self.total = total
        self.bet = 0

    def win_bet(self):
        self.total += self.bet

    def lose_bet(self):
        self.total -= self.bet

def take_bet(chips):

    while True:

        try:
            chips.bet = int(input("How many chips would you like to bet? "))
            print("\n")
        except ValueError:
            print("Please type in a number! ")

        else:
            if chips.bet > chips.total:
                print("You do not have enough chips, you have {}".format(chips.total))
            else:
                break

def hit(deck,hand):

    hand.add_card(deck.deal())
    hand.adjust_for_ace()

def hit_or_stand(deck,hand):

    global playing

    while True:

        print("\n")
        x = input("Hit or Stand? Enter h or s ")
        print("\n")

        if x[0].lower() == "h":
            hit(deck,hand)

        elif x[0].lower() == "s":
            print("Player Stands, Dealer's Turn ")
            print("\n")
            playing = False

        else:
            print("Sorry, please input h or s only! ")
            print("\n")
            continue

        break

def player_busts(player,dealer,chips):

    print("\n")
    print("Player Busts!! ")
    chips.lose_bet()

def player_wins(player,dealer,chips):

    print("\n")
    print("Player Wins!! ")
    chips.win_bet()

def dealer_busts(player,dealer,chips):

    print("\n")
    print("Player Wins!! Dealer Busts!! ")
    chips.win_bet()

def dealer_wins(player,dealer,chips):

    print("\n")
    print("Player loses, Dealer Wins!! ")
    chips.lose_bet()

def push(player,dealer):

    print("\n")
    print("TIE, PUSH")

def show_some(player,dealer):

    print("Dealer's hand: ")
    print("One card hidden!")
    print(dealer.cards[1])
    print("\n")
    print("Player's hand: ")
    for card in player.cards:
        print(card)

def show_all(player,dealer):

    print("\n")
    print("Dealer's Hand: ")

    for card in dealer.cards:
        print(card)
    print("\n")
    print("Player's Hand: ")
    for card in player.cards:
        print(card)

while True:

    print("Welcome to Markelo's BlackJack")

    deck = Deck()
    deck.shuffle()

    player_hand = Hand()
    player_hand.add_card(deck.deal())
    player_hand.add_card(deck.deal())

    dealer_hand = Hand()
    dealer_hand.add_card(deck.deal())
    dealer_hand.add_card(deck.deal())

    player_chips = Chips()

    take_bet(player_chips)

    show_some(player_hand, dealer_hand)

    while playing:

        hit_or_stand(deck,player_hand)

        show_some(player_hand, dealer_hand)

        if player_hand.value > 21:

            player_busts(player_hand, dealer_hand, player_chips)

            break

    if player_hand.value <= 21:

        while dealer_hand.value < 17:

            hit(deck, dealer_hand)

        show_all(player_hand, dealer_hand)

        if dealer_hand.value > 21:

            dealer_busts(player_hand, dealer_hand, player_chips)

        elif dealer_hand.value > player_hand.value:

            dealer_wins(player_hand, dealer_hand, player_chips)

        elif dealer_hand.value < player_hand.value:

            player_wins(player_hand, dealer_hand, player_chips)

        else:

            push(player_hand, dealer_hand)

    print("\n Player total chips are at {}".format(player_chips.total))

    new_game = input("Would you like to player another game? y/n: ")

    if new_game[0].lower() == "y":

        playing = True
        continue

    else:

        print("Thank you for playing Markelo's BlackJack")
        break

每手之后,我希望它在底端的值总和上显示相同的结果。像这样:

Three of Diamonds
Ace of Dimonds
Sum: 4 or 14

0 个答案:

没有答案