Python實現(xiàn)21點小游戲的示例代碼
游戲玩法
游戲玩法: 該游戲由 2 到 6 個人玩,使用除大小王之外的 52 張牌,
游戲者的目標是使手中的牌的點數(shù)之和不超過 21 點且盡量大。
有著悠久的歷史。黑杰克簡稱為21點,1700年左右法國賭場就有這種21點的紙牌游戲。
1931年,當美國內華達州宣布賭博為合法活動時,21點游戲第一次公開出現(xiàn)在內華達州的賭場俱樂部,
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("你的點數(shù):",p_cards)
print("你輸了 !\n **************荷官 Wins !!******************\n")
exit()
if sum(d_cards) > 21:
print("荷官的點數(shù):", d_cards)
print("荷官輸了 !\n ************** You are the Winner !!******************\n")
exit()
if sum(d_cards) == 21:
print("荷官的點數(shù):", 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('你的點數(shù):' + 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實現(xiàn)21點小游戲的示例代碼的文章就介紹到這了,更多相關Python 21點游戲內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python環(huán)境功能強大的pip-audit安全漏洞掃描工具
這篇文章主要為大家介紹了python環(huán)境中功能強大的pip-audit安全漏洞掃描工具的功能介紹及安裝使用說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02
Python通過psd-tools解析PSD文件的實現(xiàn)
本文主要介紹了Python通過psd-tools解析PSD文件的實現(xiàn),主要包括如何獲取PSD文件的基本信息、遍歷圖層、提取圖層詳細信息、保存和創(chuàng)建PSD文件,感興趣的可以了解一下2023-12-12
ITK 實現(xiàn)多張圖像轉成單個nii.gz或mha文件案例
這篇文章主要介紹了ITK 實現(xiàn)多張圖像轉成單個nii.gz或mha文件案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Pandas.DataFrame時間序列數(shù)據(jù)處理的實現(xiàn)
本文主要介紹了Pandas.DataFrame時間序列數(shù)據(jù)處理的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02
python celery beat實現(xiàn)定時任務的示例代碼
在日常工作中,我們常常會用到需要周期性執(zhí)行的任務,本文主要介紹了python celery beat實現(xiàn)定時任務的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-03-03
Python之日期與時間處理模塊(date和datetime)
這篇文章主要介紹了Python之日期與時間處理模塊(date和datetime),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02

