有做車身拉花的網(wǎng)站嗎seo學(xué)校
21 點(diǎn)(英文:Blackjack)是一種在賭場(chǎng)玩的紙牌游戲。這種游戲的參與者不是互相競(jìng)爭(zhēng),而是與賭場(chǎng)指定的莊家競(jìng)爭(zhēng)。在本文中,我們將從頭開始創(chuàng)建可在終端上玩的玩家與莊家之間的二十一點(diǎn)游戲。
二十一點(diǎn)規(guī)則
我們將為從未玩過(guò)二十一點(diǎn)的讀者提供一套簡(jiǎn)短的規(guī)則。21 點(diǎn)的神奇數(shù)字是 21。玩家拿到的所有牌的價(jià)值相加,如果總和超過(guò) 21,玩家就會(huì)立即爆牌并輸?shù)簟?/p>
如果玩家拿到的牌正好是 21,那么玩家就贏了莊家。否則,要想獲勝,玩家的牌數(shù)總和必須大于莊家的牌數(shù)總和。
每張撲克牌的面值都是 10,而 A 可以被算作 1 或 11,這對(duì)玩家的獲勝機(jī)會(huì)非常有利。其余牌的價(jià)值由其編號(hào)決定。
二十一點(diǎn)游戲的發(fā)牌過(guò)程如下:
- 一張牌發(fā)給朝上的玩家(所有人都能看到)。
- 莊家給自己發(fā)一張所有人都能看到的牌。
- 另一張牌發(fā)給朝上的玩家。
- 莊家給自己發(fā)一張朝下的牌。
- 玩家必須決定是用現(xiàn)有的牌站著還是再拿一張牌。
- 如果玩家決定打牌,莊家會(huì)再發(fā)一張牌。
- 如果玩家決定不出牌,莊家就會(huì)亮出隱藏的牌。
- 莊家無(wú)權(quán)決定玩家是跟還是不跟。一般規(guī)則是,如果莊家牌的總和小于 17,莊家需要繼續(xù)打出更多的牌。
- 一旦莊家牌的總和達(dá)到或超過(guò) 17 點(diǎn),莊家就有義務(wù)不出牌。
- 根據(jù)最后的牌數(shù)決定勝負(fù)。
了解規(guī)則后,21 點(diǎn)游戲的編程就變得簡(jiǎn)單了。從零開始創(chuàng)建基于終端的游戲需要三個(gè)主要部分:游戲設(shè)計(jì)、游戲邏輯和玩家互動(dòng)管理。
用 Python 設(shè)計(jì)二十一點(diǎn)
首先,我們將進(jìn)行游戲設(shè)計(jì)。我們的任務(wù)是在終端上有效地顯示一系列牌,如下圖所示。
我們需要一個(gè)能打印卡片序列且與卡片數(shù)量無(wú)關(guān)的函數(shù)。此外,它還必須提供在需要時(shí)打印隱藏卡片的功能。
下面的代碼解決了我們的問(wèn)題。
# 打印卡片的功能
def print_cards(cards, hidden):s = ""for card in cards:s = s + "\t ________________"if hidden:s += "\t ________________"print(s)s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| |" print(s)s = ""for card in cards:if card.value == '10':s = s + "\t| {} |".format(card.value)else:s = s + "\t| {} |".format(card.value) if hidden:s += "\t| |" print(s)s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * * |"print(s) s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * * |"print(s) s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * * |"print(s) s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * * |"print(s) s = ""for card in cards:s = s + "\t| {} |".format(card.suit)if hidden:s += "\t| * |"print(s) s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * |"print(s) s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * |"print(s)s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| |"print(s)s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| |"print(s) s = ""for card in cards:if card.value == '10':s = s + "\t| {} |".format(card.value)else:s = s + "\t| {} |".format(card.value)if hidden:s += "\t| * |" print(s) s = ""for card in cards:s = s + "\t|________________|"if hidden:s += "\t|________________|"print(s) print()
每張卡片的詳細(xì)信息都存儲(chǔ)為一個(gè)卡片對(duì)象。print_cards() 函數(shù)的第二個(gè)參數(shù)是一個(gè)布爾值,表示是否顯示隱藏的卡片。
創(chuàng)建卡片
在類和對(duì)象的幫助下,我們可以創(chuàng)建一個(gè)花色和數(shù)值的組合來(lái)表示一張 “撲克牌”。在二十一點(diǎn)游戲中,一張牌有三個(gè)屬性:花色、代表值和作為分?jǐn)?shù)的值。
所有上述屬性都在下面的 "卡 "類中維護(hù)。
# 卡片類別的定義
class Card:def __init__(self, suit, value, card_value):# 紙牌的花色,如黑桃和梅花self.suit = suit# 表示牌的價(jià)值,如 A 表示 Ace,K 表示 Kingself.value = value# 卡片的分值,如 10 分代表國(guó)王self.card_value = card_value
使用上述類,我們可以創(chuàng)建一副包含 52 個(gè) Card 對(duì)象的紙牌。
一些基本價(jià)值觀
每種紙牌游戲都需要一些基本價(jià)值,如花色類型、紙牌類型以及每張紙牌的價(jià)值。
為了更方便理解,我代碼和備注都用全英文了
# The type of suit
suits = ["Spades", "Hearts", "Clubs", "Diamonds"]# The suit value
suits_values = {"Spades":"\u2664", "Hearts":"\u2661", "Clubs": "\u2667", "Diamonds": "\u2662"}# The type of card
cards = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]# The card value
cards_values = {"A": 11, "2":2, "3":3, "4":4, "5":5, "6":6, "7":7, "8":8, "9":9, "10":10, "J":10, "Q":10, "K":10}
這里需要注意的一點(diǎn)是,A 最初被標(biāo)記為 11 點(diǎn)。這一策略背后的理念是,每當(dāng)玩家/發(fā)牌者的分?jǐn)?shù)似乎超過(guò) 21 分時(shí),我們就可以將 A 的分?jǐn)?shù)(如果發(fā)牌)減為 1 分。
我們稍后將在本文中看到減分的實(shí)施。
生成一副撲克牌
一副普通的撲克牌由 52 張牌組成,每張牌都有不同的花色和價(jià)值組合。利用上述基本值和卡片類,我們可以生成一副撲克牌。
# The deck of cards
deck = []# Loop for every type of suit
for suit in suits:# Loop for every type of card in a suitfor card in cards:# Adding card to the deckdeck.append(Card(suits_values[suit], card, cards_values[card]))
實(shí)際上,21 點(diǎn)游戲涉及多副撲克牌,因此可以重復(fù)使用上述循環(huán)來(lái)填充多副撲克牌。
新創(chuàng)建的牌面將傳遞給執(zhí)行游戲的函數(shù)。
blackjack_game(deck)
讓我們來(lái)了解一下玩家和電腦發(fā)牌員之間 21 點(diǎn)游戲單次迭代背后的游戲邏輯。
聲明重要的游戲變量
在任何時(shí)刻,我們都需要以下游戲變量:
- 玩家和莊家的發(fā)牌列表。
- 雙方牌值的總和。
# Function for a single game of blackjack
def blackjack_game(deck):global cards_values# Cards for both dealer and playerplayer_cards = []dealer_cards = []# Scores for both dealer and playerplayer_score = 0dealer_score = 0
當(dāng)我們?cè)O(shè)計(jì)游戲邏輯時(shí),這些游戲變量就會(huì)發(fā)揮作用。
Python 二十一點(diǎn)游戲邏輯
整個(gè)游戲邏輯都圍繞著發(fā)牌和玩家對(duì)擊中或站立的選擇。只要我們處理好上述兩件事,今天的工作就完成了。
發(fā)牌的第一階段:必發(fā)牌
初始發(fā)牌包括給玩家和莊家兩張牌。不過(guò),莊家的第二張牌必須保持未知。
# Initial dealing for player and dealer
while len(player_cards) < 2:# Randomly dealing a cardplayer_card = random.choice(deck)player_cards.append(player_card)deck.remove(player_card)# Updating the player scoreplayer_score += player_card.card_value# In case both the cards are Ace, make the first ace value as 1 if len(player_cards) == 2:if player_cards[0].card_value == 11 and player_cards[1].card_value == 11:player_cards[0].card_value = 1player_score -= 10# Print player cards and score print("PLAYER CARDS: ")print_cards(player_cards, False)print("PLAYER SCORE = ", player_score)input()# Randomly dealing a carddealer_card = random.choice(deck)dealer_cards.append(dealer_card)deck.remove(dealer_card)# Updating the dealer scoredealer_score += dealer_card.card_value# Print dealer cards and score, keeping in mind to hide the second card and scoreprint("DEALER CARDS: ")if len(dealer_cards) == 1:print_cards(dealer_cards, False)print("DEALER SCORE = ", dealer_score)else:print_cards(dealer_cards[:-1], True) print("DEALER SCORE = ", dealer_score - dealer_cards[-1].card_value)# In case both the cards are Ace, make the second ace value as 1 if len(dealer_cards) == 2:if dealer_cards[0].card_value == 11 and dealer_cards[1].card_value == 11:dealer_cards[1].card_value = 1dealer_score -= 10input()# Player gets a blackjack
if player_score == 21:print("PLAYER HAS A BLACKJACK!!!!")print("PLAYER WINS!!!!")quit()
對(duì)于一個(gè)看似簡(jiǎn)單的交易來(lái)說(shuō),這可能是一個(gè)很大的挑戰(zhàn)。讓我們來(lái)了解一下上述代碼所涉及的過(guò)程:
- 主循環(huán)一直運(yùn)行到玩家和莊家各拿到兩張牌為止。
- 莊家從牌組中隨機(jī)抽取一張牌,然后在下一步中將這張牌從牌組中移除。
- 這張牌的價(jià)值加到玩家的分?jǐn)?shù)中。
- 同樣,莊家也會(huì)隨機(jī)抽取一張牌,并將其價(jià)值計(jì)入莊家得分。
- 玩家的牌正常顯示在屏幕上。
- 莊家的牌會(huì)小心顯示,不會(huì)顯示第二張牌及其牌值。
- 如果任何一方拿到雙 A,則會(huì)調(diào)整其分?jǐn)?shù),以確保雙方都不爆牌。
- 上述所有步驟順利完成后,我們進(jìn)入第二階段發(fā)牌。
注:玩家和莊家的分?jǐn)?shù)調(diào)整有細(xì)微差別。前者調(diào)整的是第一張牌的價(jià)值,而后者調(diào)整的是第二張牌的價(jià)值。
之所以要調(diào)整第二張牌的價(jià)值,是因?yàn)槿绻覀冋{(diào)整了第一張牌的價(jià)值,就會(huì)暴露隱藏牌是 Ace 的身份。
最后要做的一件事是檢查玩家是否已經(jīng)擁有 21 點(diǎn)。如果有,玩家獲勝,游戲結(jié)束。
注:input() 函數(shù)會(huì)暫停程序,直到玩家按下 "ENTER "鍵。這樣可以防止所有游戲事件的快速回放。
clear()函數(shù)負(fù)責(zé)清除終端,為游戲提供一個(gè)干凈的界面。
第二階段發(fā)牌:玩家的選擇
發(fā)牌的第二階段取決于玩家的決定,是要另一張牌來(lái)提高分?jǐn)?shù),還是維持現(xiàn)有的牌。
# Print dealer and player cards
print("DEALER CARDS: ")
print_cards(dealer_cards[:-1], True)
print("DEALER SCORE = ", dealer_score - dealer_cards[-1].card_value)print() print("PLAYER CARDS: ")
print_cards(player_cards, False)
print("PLAYER SCORE = ", player_score)# Managing the player moves
while player_score < 21:choice = input("Enter H to Hit or S to Stand : ")# Sanity checks for player's choiceif len(choice) != 1 or (choice.upper() != 'H' and choice.upper() != 'S'):clear()print("Wrong choice!! Try Again")# If player decides to HITif choice.upper() == 'H':# Dealing a new cardplayer_card = random.choice(deck)player_cards.append(player_card)deck.remove(player_card)# Updating player scoreplayer_score += player_card.card_value# Updating player score in case player's card have ace in themc = 0while player_score > 21 and c < len(player_cards):if player_cards[c].card_value == 11:player_cards[c].card_value = 1player_score -= 10c += 1else:c += 1 clear() # Print player and dealer cardsprint("DEALER CARDS: ")print_cards(dealer_cards[:-1], True)print("DEALER SCORE = ", dealer_score - dealer_cards[-1].card_value)print()print("PLAYER CARDS: ")print_cards(player_cards, False)print("PLAYER SCORE = ", player_score)# If player decides to Standif choice.upper() == 'S':break# Check if player has a Blackjack
if player_score == 21:print("PLAYER HAS A BLACKJACK")quit()# Check if player busts
if player_score > 21:print("PLAYER BUSTED!!! GAME OVER!!!")quit()
玩家決定是打還是不打,直到分?jǐn)?shù)超過(guò) 21 分或玩家決定不打?yàn)橹?。玩家發(fā)牌的數(shù)量沒(méi)有限制,只有分?jǐn)?shù)限制。
玩家每決定擊中一次,就會(huì)從牌組中發(fā)出一張新牌,分?jǐn)?shù)也會(huì)隨之更新。如前所述,A 可以算作 1 或 11。如果分?jǐn)?shù)超過(guò) 21,一段特殊的代碼會(huì)將 A 的值從 11 轉(zhuǎn)換為 1。
當(dāng)玩家對(duì)當(dāng)前分?jǐn)?shù)滿意時(shí),他就會(huì)起立。當(dāng)他這樣做時(shí),我們會(huì)在進(jìn)行一些強(qiáng)制性檢查(如二十一點(diǎn)或爆牌情況)后進(jìn)入發(fā)牌的最后階段。
發(fā)牌的最后階段:莊家的牌
在發(fā)牌的最后階段,莊家的暗牌會(huì)被揭開,莊家的分?jǐn)?shù)也會(huì)被揭開。根據(jù)二十一點(diǎn)的標(biāo)準(zhǔn)規(guī)則,莊家必須給自己發(fā)更多的牌,直到分?jǐn)?shù)大于或等于 17。
# Managing the dealer moves
while dealer_score < 17:clear() print("DEALER DECIDES TO HIT.....")# Dealing card for dealerdealer_card = random.choice(deck)dealer_cards.append(dealer_card)deck.remove(dealer_card)# Updating the dealer's scoredealer_score += dealer_card.card_value# Updating player score in case player's card have ace in themc = 0while dealer_score > 21 and c < len(dealer_cards):if dealer_cards[c].card_value == 11:dealer_cards[c].card_value = 1dealer_score -= 10c += 1else:c += 1# print player and dealer cardsprint("PLAYER CARDS: ")print_cards(player_cards, False)print("PLAYER SCORE = ", player_score)print()print("DEALER CARDS: ")print_cards(dealer_cards, False)print("DEALER SCORE = ", dealer_score)input()
莊家繼續(xù)擊球,直到分?jǐn)?shù)越過(guò) 17 分為止。如果需要,我們也有類似的方法將 A 的牌值從 11 轉(zhuǎn)換為 1。
游戲終結(jié)
當(dāng)莊家的分?jǐn)?shù)是 17 或更多時(shí),我們就進(jìn)入 “終局”,即比較牌局的勝負(fù)??赡軙?huì)出現(xiàn)以下幾種情況:
- 莊家爆牌 - 莊家的分?jǐn)?shù)超過(guò) 21。
- 莊家有 21 點(diǎn) - 莊家的準(zhǔn)確分?jǐn)?shù)是 21。
- 平局 - 玩家和莊家的分?jǐn)?shù)相同。
- 閑家贏 - 閑家的分?jǐn)?shù)超過(guò)莊家。
- 莊家贏 - 莊家的分?jǐn)?shù)超過(guò)閑家。
我們會(huì)檢查上述每種可能性,并宣布獲勝者。
# Dealer busts
if dealer_score > 21: print("DEALER BUSTED!!! YOU WIN!!!") quit() # Dealer gets a blackjack
if dealer_score == 21:print("DEALER HAS A BLACKJACK!!! PLAYER LOSES")quit()# TIE Game
if dealer_score == player_score:print("TIE GAME!!!!")# Player Wins
elif player_score > dealer_score:print("PLAYER WINS!!!") # Dealer Wins
else:print("DEALER WINS!!!")
至此,玩家與莊家之間的 21 點(diǎn)游戲的單次迭代結(jié)束。
二十一點(diǎn)游戲的完整 Python 代碼
import random
import os
import time# The Card class definition
class Card:def __init__(self, suit, value, card_value):# Suit of the Card like Spades and Clubsself.suit = suit# Representing Value of the Card like A for Ace, K for Kingself.value = value# Score Value for the Card like 10 for Kingself.card_value = card_value# Clear the terminal
def clear():os.system("clear")# Function to print the cards
def print_cards(cards, hidden):s = ""for card in cards:s = s + "\t ________________"if hidden:s += "\t ________________"print(s)s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| |" print(s)s = ""for card in cards:if card.value == '10':s = s + "\t| {} |".format(card.value)else:s = s + "\t| {} |".format(card.value) if hidden:s += "\t| |" print(s)s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * * |"print(s) s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * * |"print(s) s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * * |"print(s) s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * * |"print(s) s = ""for card in cards:s = s + "\t| {} |".format(card.suit)if hidden:s += "\t| * |"print(s) s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * |"print(s) s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| * |"print(s)s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| |"print(s)s = ""for card in cards:s = s + "\t| |"if hidden:s += "\t| |"print(s) s = ""for card in cards:if card.value == '10':s = s + "\t| {} |".format(card.value)else:s = s + "\t| {} |".format(card.value)if hidden:s += "\t| * |" print(s) s = ""for card in cards:s = s + "\t|________________|"if hidden:s += "\t|________________|"print(s) print()# Function for a single game of blackjack
def blackjack_game(deck):# Cards for both dealer and playerplayer_cards = []dealer_cards = []# Scores for both dealer and playerplayer_score = 0dealer_score = 0clear()# Initial dealing for player and dealerwhile len(player_cards) < 2:# Randomly dealing a cardplayer_card = random.choice(deck)player_cards.append(player_card)deck.remove(player_card)# Updating the player scoreplayer_score += player_card.card_value# In case both the cards are Ace, make the first ace value as 1 if len(player_cards) == 2:if player_cards[0].card_value == 11 and player_cards[1].card_value == 11:player_cards[0].card_value = 1player_score -= 10# Print player cards and score print("PLAYER CARDS: ")print_cards(player_cards, False)print("PLAYER SCORE = ", player_score)input()# Randomly dealing a carddealer_card = random.choice(deck)dealer_cards.append(dealer_card)deck.remove(dealer_card)# Updating the dealer scoredealer_score += dealer_card.card_value# Print dealer cards and score, keeping in mind to hide the second card and scoreprint("DEALER CARDS: ")if len(dealer_cards) == 1:print_cards(dealer_cards, False)print("DEALER SCORE = ", dealer_score)else:print_cards(dealer_cards[:-1], True) print("DEALER SCORE = ", dealer_score - dealer_cards[-1].card_value)# In case both the cards are Ace, make the second ace value as 1 if len(dealer_cards) == 2:if dealer_cards[0].card_value == 11 and dealer_cards[1].card_value == 11:dealer_cards[1].card_value = 1dealer_score -= 10input()# Player gets a blackjack if player_score == 21:print("PLAYER HAS A BLACKJACK!!!!")print("PLAYER WINS!!!!")quit()clear()# Print dealer and player cardsprint("DEALER CARDS: ")print_cards(dealer_cards[:-1], True)print("DEALER SCORE = ", dealer_score - dealer_cards[-1].card_value)print() print("PLAYER CARDS: ")print_cards(player_cards, False)print("PLAYER SCORE = ", player_score)# Managing the player moveswhile player_score < 21:choice = input("Enter H to Hit or S to Stand : ")# Sanity checks for player's choiceif len(choice) != 1 or (choice.upper() != 'H' and choice.upper() != 'S'):clear()print("Wrong choice!! Try Again")# If player decides to HITif choice.upper() == 'H':# Dealing a new cardplayer_card = random.choice(deck)player_cards.append(player_card)deck.remove(player_card)# Updating player scoreplayer_score += player_card.card_value# Updating player score in case player's card have ace in themc = 0while player_score > 21 and c < len(player_cards):if player_cards[c].card_value == 11:player_cards[c].card_value = 1player_score -= 10c += 1else:c += 1 clear() # Print player and dealer cardsprint("DEALER CARDS: ")print_cards(dealer_cards[:-1], True)print("DEALER SCORE = ", dealer_score - dealer_cards[-1].card_value)print()print("PLAYER CARDS: ")print_cards(player_cards, False)print("PLAYER SCORE = ", player_score)# If player decides to Standif choice.upper() == 'S':breakclear() # Print player and dealer cardsprint("PLAYER CARDS: ")print_cards(player_cards, False)print("PLAYER SCORE = ", player_score)print()print("DEALER IS REVEALING THE CARDS....")print("DEALER CARDS: ")print_cards(dealer_cards, False)print("DEALER SCORE = ", dealer_score)# Check if player has a Blackjackif player_score == 21:print("PLAYER HAS A BLACKJACK")quit()# Check if player bustsif player_score > 21:print("PLAYER BUSTED!!! GAME OVER!!!")quit()input() # Managing the dealer moveswhile dealer_score < 17:clear() print("DEALER DECIDES TO HIT.....")# Dealing card for dealerdealer_card = random.choice(deck)dealer_cards.append(dealer_card)deck.remove(dealer_card)# Updating the dealer's scoredealer_score += dealer_card.card_value# Updating player score in case player's card have ace in themc = 0while dealer_score > 21 and c < len(dealer_cards):if dealer_cards[c].card_value == 11:dealer_cards[c].card_value = 1dealer_score -= 10c += 1else:c += 1# print player and dealer cardsprint("PLAYER CARDS: ")print_cards(player_cards, False)print("PLAYER SCORE = ", player_score)print()print("DEALER CARDS: ")print_cards(dealer_cards, False)print("DEALER SCORE = ", dealer_score) input()# Dealer bustsif dealer_score > 21: print("DEALER BUSTED!!! YOU WIN!!!") quit() # Dealer gets a blackjackif dealer_score == 21:print("DEALER HAS A BLACKJACK!!! PLAYER LOSES")quit()# TIE Gameif dealer_score == player_score:print("TIE GAME!!!!")# Player Winselif player_score > dealer_score:print("PLAYER WINS!!!") # Dealer Winselse:print("DEALER WINS!!!") if __name__ == '__main__':# The type of suitsuits = ["Spades", "Hearts", "Clubs", "Diamonds"]# The suit value suits_values = {"Spades":"\u2664", "Hearts":"\u2661", "Clubs": "\u2667", "Diamonds": "\u2662"}# The type of cardcards = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]# The card valuecards_values = {"A": 11, "2":2, "3":3, "4":4, "5":5, "6":6, "7":7, "8":8, "9":9, "10":10, "J":10, "Q":10, "K":10}# The deck of cardsdeck = []# Loop for every type of suitfor suit in suits:# Loop for every type of card in a suitfor card in cards:# Adding card to the deckdeck.append(Card(suits_values[suit], card, cards_values[card]))blackjack_game(deck)
讀者不必遵循整個(gè)編碼順序。通過(guò)增加多人對(duì)莊家的功能,可以對(duì)上述代碼進(jìn)行各種修改。
結(jié)論
二十一點(diǎn)游戲起初看似簡(jiǎn)單隨意,但只有當(dāng)玩家遵循某些策略(如算牌)時(shí),游戲才會(huì)變得復(fù)雜。
世界上流傳著許多不同版本的 21 點(diǎn)游戲,如瑞典酒吧 21 點(diǎn)游戲和家庭游戲 21 點(diǎn)游戲。好奇的讀者可以了解這些變體,并嘗試?yán)帽疚闹蝎@得的知識(shí)來(lái)實(shí)施它們。
感謝大家花時(shí)間閱讀我的文章,你們的支持是我不斷前進(jìn)的動(dòng)力。期望未來(lái)能為大家?guī)?lái)更多有價(jià)值的內(nèi)容,請(qǐng)多多關(guān)注我的動(dòng)態(tài)!