Python实现21点小游戏的示例代码
作者:Pushkin.
游戏玩法
游戏玩法: 该游戏由 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! $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
到此这篇关于Python实现21点小游戏的示例代码的文章就介绍到这了,更多相关Python 21点游戏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!