网络编程
位置:首页>> 网络编程>> Python编程>> Python实现21点小游戏的示例代码

Python实现21点小游戏的示例代码

作者:Pushkin.  发布时间:2022-06-14 06:32:10 

标签:Python,21点,游戏

游戏玩法

游戏玩法: 该游戏由 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!
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

来源:https://pushkin.blog.csdn.net/article/details/126672966

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com