Python 21点游戏
Pushkin. 人气:0游戏玩法
游戏玩法: 该游戏由 2 到 6 个人玩,使用除大小王之外的 52 张牌,
游戏者的目标是使手中的牌的点数之和不超过 21 点且尽量大。
有着悠久的历史。黑杰克简称为21点,1700年左右法国赌场就有这种21点的纸牌游戏。
1931年,当美国内华达州宣布赌博为合法活动时,21点游戏第一次公开出现在内华达州的赌场俱乐部,
15年内,它取代掷骰子游戏,而一举成为非常流行的赌场庄家参与的赌博游戏。
代码 - v1
import random deck = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11] * 4 random.shuffle(deck) print( " ********************************************************** ") print( " Welcome to the game Casino - BLACK JACK (21点)! ") print( " ********************************************************** ") d_cards = [] # Initialising dealer's cards p_cards = [] # Initialising player's cards while len(d_cards) != 2: random.shuffle(deck) d_cards.append(deck.pop()) if len(d_cards) == 2: print('荷官有 X ', d_cards[1]) # Displaying the Player's cards while len(p_cards) != 2: random.shuffle(deck) p_cards.append(deck.pop()) if len(p_cards) == 2: print("你一共 ", str(sum(p_cards)) + "点 :",p_cards) if sum(p_cards) > 21: print("你的点数:",p_cards) print("你输了 !\n **************荷官 Wins !!******************\n") exit() if sum(d_cards) > 21: print("荷官的点数:", d_cards) print("荷官输了 !\n ************** You are the Winner !!******************\n") exit() if sum(d_cards) == 21: print("荷官的点数:", d_cards) print("***********************荷官 is the Winner !!******************") exit() if sum(d_cards) == 21 and sum(p_cards) == 21: print("*****************The match is tie 平手!!*************************") exit() def dealer_choice(): if sum(d_cards) < 17: while sum(d_cards) < 17: random.shuffle(deck) d_cards.append(deck.pop()) print("你一共 " + str(sum(p_cards)) + "点 :", p_cards) print("荷官一共 " + str(sum(d_cards)) + "点 :", d_cards) if sum(p_cards) == sum(d_cards): print("***************The match is tie 平手!!****************") exit() if sum(d_cards) == 21: if sum(p_cards) < 21: print("***********************Dealer is the Winner !!******************") elif sum(p_cards) == 21: print("********************There is tie !!**************************") else: print("***********************Dealer is the Winner !!******************") elif sum(d_cards) < 21: if sum(p_cards) < 21 and sum(p_cards) < sum(d_cards): print("***********************Dealer is the Winner !!******************") if sum(p_cards) == 21: print("**********************Player is winner !!**********************") if sum(p_cards) < 21 and sum(p_cards) > sum(d_cards): print("**********************Player is winner !!**********************") else: if sum(p_cards) < 21: print("**********************Player is winner !!**********************") elif sum(p_cards) == 21: print("**********************Player is winner !!**********************") else: print("***********************Dealer is the Winner !!******************") while sum(p_cards) < 21: k = input('Want to hit or stay?\n Press 1 for hit and 0 for stay ') if k == 1: random.shuffle(deck) p_cards.append(deck.pop()) print('你的点数:' + str(sum(p_cards)), p_cards) if sum(p_cards) > 21: print('*************你输了 !*************\n Dealer Wins !!') if sum(p_cards) == 21: print('*******************你赢了 !!*****************************') else: dealer_choice() break
测试
case-1
**********************************************************
Welcome to the game Casino - BLACK JACK (21点)!
**********************************************************
荷官有 X 3
你一共 9点 : [6, 3]
Want to hit or stay?
Press 1 for hit and 0 for stay 1
你一共 9点 : [6, 3]
荷官一共 18点 : [5, 3, 10]
***********************Dealer is the Winner !!******************
case-2
**********************************************************
Welcome to the game Casino - BLACK JACK (21点)!
**********************************************************
荷官有 X 1
你一共 18点 : [8, 10]
Want to hit or stay?
Press 1 for hit and 0 for stay 0
你一共 18点 : [8, 10]
荷官一共 17点 : [5, 1, 9, 2]
**********************Player is winner !!**********************
代码 - v2
import random suits = ('Hearts', 'Diamonds', 'Spades', 'Clubs') 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 = [] 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__() 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 = [] self.value = 0 self.aces = 0 # 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): self.total = 100 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? ')) except ValueError: print('Your bet must be an integer! Try again.') else: if chips.bet > chips.total or chips.bet <= 0: print( "Your bet cannot exceed your balance and you have to enter a positive bet! Your current balance is: ", 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: x = input("Would you like to Hit or Stand? Enter '1' or '0' ") if x.lower() == '1': hit(deck, hand) elif x.lower() == '0': print("You chose to stand. Dealer will hit.") playing = False else: print("Wrong input, please try again.") continue break def show_some(player, dealer): print("\nDealer's Hand:") print(" { hidden card }") print('', dealer.cards[1]) print("\nYour Hand:", *player.cards, sep='\n ') def show_all(player, dealer): print("\nDealer's Hand:", *dealer.cards, sep='\n ') print("Dealer's Hand =", dealer.value) print("\nYour Hand:", *player.cards, sep='\n ') print("Your Hand =", player.value) def player_busts(player, dealer, chips): print("You are BUSTED !") chips.lose_bet() def player_wins(player, dealer, chips): print("You are the winner!") chips.win_bet() def dealer_busts(player, dealer, chips): print("Dealer has BUSTED !") chips.win_bet() def dealer_wins(player, dealer, chips): print("Dealer is the winner!") chips.lose_bet() def push(player, dealer): print("The match is tie !") # GAMEPLAY player_chips = Chips() while True: print("\t **********************************************************") print( "\t Welcome to the game Casino - BLACK JACK ! ") print("\t **********************************************************") print("\t ***************") print("\t * A *") print("\t * *") print("\t * * *") print("\t * *** *") print("\t * ***** *") print("\t * *** *") print("\t * * *") print("\t * *") print("\t * *") print("\t ***************") print('\nRULES: Get as close to 21 as you can but if you get more than 21 you will lose!\n Aces count as 1 or 11.') 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()) 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("\nYour current balance stands at", player_chips.total) if player_chips.total > 0: new_game = input("Would you like to play another hand? Enter '1' or '0' ") if new_game.lower() == '1': playing = True continue else: print( "Thanks for playing!\n \t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n \t Congratulations! You won {} coins!\n\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n ".format( player_chips.total)) break else: print( "Oops! You have bet all your chips and we are sorry you can't play more.\nThanks for playing! Do come again to Casino BLACK JACK!") break
测试
********************************************************** Welcome to the game Casino - BLACK JACK ! ********************************************************** *************** * A * * * * * * * *** * * ***** * * *** * * * * * * * * *************** RULES: Get as close to 21 as you can but if you get more than 21 you will lose! Aces count as 1 or 11. How many chips would you like to bet? 1 Dealer's Hand: { hidden card } Ten of Hearts Your Hand: Six of Clubs Ten of Diamonds Would you like to Hit or Stand? Enter '1' or '0' 0 You chose to stand. Dealer will hit. Dealer's Hand: { hidden card } Ten of Hearts Your Hand: Six of Clubs Ten of Diamonds Dealer's Hand: Four of Hearts Ten of Hearts Two of Clubs Six of Hearts Dealer's Hand = 22 Your Hand: Six of Clubs Ten of Diamonds Your Hand = 16 Dealer has BUSTED ! Your current balance stands at 101 Would you like to play another hand? Enter '1' or '0' 0 Thanks for playing! $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Congratulations! You won 101 coins! $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
加载全部内容