Python实现21点小游戏攻略
游戏规则
21点又称为“Blackjack”,是一种非常流行的纸牌游戏,在游戏中需要计算分数,使得自己的分数不超过21。下面介绍一下游戏规则:
- 此游戏使用1副牌,先出牌者为庄家;
- 点数计算:A为1或11点,其他牌按面值计算,J、Q、K算10点;
- 游戏开始时,庄家随机发放2张牌给玩家和自己;
- 玩家先行动,可以选择“要牌”或“停牌”;
- 如果第一次点数不超过21,玩家可以再次要牌,一直到停止(停牌)或点数超过21为止;
- 如果超过21点,玩家立刻输掉游戏;否则由庄家出牌,庄家可以选择相同的策略;
- 如果庄家超过21点,则玩家获胜;
- 如果玩家和庄家都不超过21点,则点数大者获胜;
- 第一轮结束后,若玩家获胜,则赔率为1:1,即如果玩家下注100元,获胜后可以拿回200元;
- 如果庄家获胜,或和局,则玩家输掉所有下注的筹码。
实现过程
步骤 1. 初始化
首先,我们需要导入random
模块,并定义cards
列表,其中包含52张牌:
import random
cards = [
{'type': 'spade', 'point': 'A'},
{'type': 'spade', 'point': '2'},
{'type': 'spade', 'point': '3'},
{'type': 'spade', 'point': '4'},
{'type': 'spade', 'point': '5'},
{'type': 'spade', 'point': '6'},
{'type': 'spade', 'point': '7'},
{'type': 'spade', 'point': '8'},
{'type': 'spade', 'point': '9'},
{'type': 'spade', 'point': '10'},
{'type': 'spade', 'point': 'J'},
{'type': 'spade', 'point': 'Q'},
{'type': 'spade', 'point': 'K'},
{'type': 'heart', 'point': 'A'},
{'type': 'heart', 'point': '2'},
{'type': 'heart', 'point': '3'},
{'type': 'heart', 'point': '4'},
{'type': 'heart', 'point': '5'},
{'type': 'heart', 'point': '6'},
{'type': 'heart', 'point': '7'},
{'type': 'heart', 'point': '8'},
{'type': 'heart', 'point': '9'},
{'type': 'heart', 'point': '10'},
{'type': 'heart', 'point': 'J'},
{'type': 'heart', 'point': 'Q'},
{'type': 'heart', 'point': 'K'},
{'type': 'club', 'point': 'A'},
{'type': 'club', 'point': '2'},
{'type': 'club', 'point': '3'},
{'type': 'club', 'point': '4'},
{'type': 'club', 'point': '5'},
{'type': 'club', 'point': '6'},
{'type': 'club', 'point': '7'},
{'type': 'club', 'point': '8'},
{'type': 'club', 'point': '9'},
{'type': 'club', 'point': '10'},
{'type': 'club', 'point': 'J'},
{'type': 'club', 'point': 'Q'},
{'type': 'club', 'point': 'K'},
{'type': 'diamond', 'point': 'A'},
{'type': 'diamond', 'point': '2'},
{'type': 'diamond', 'point': '3'},
{'type': 'diamond', 'point': '4'},
{'type': 'diamond', 'point': '5'},
{'type': 'diamond', 'point': '6'},
{'type': 'diamond', 'point': '7'},
{'type': 'diamond', 'point': '8'},
{'type': 'diamond', 'point': '9'},
{'type': 'diamond', 'point': '10'},
{'type': 'diamond', 'point': 'J'},
{'type': 'diamond', 'point': 'Q'},
{'type': 'diamond', 'point': 'K'},
]
另外,我们还需要定义每张牌的点数,以及玩家和庄家的得分:
def get_point(point):
if point.isdigit():
return int(point)
elif point in ('J', 'Q', 'K'):
return 10
else:
return 11
player_point = 0
dealer_point = 0
步骤 2. 发牌
接着,我们需要实现发牌的函数。由于发牌需要从52张牌中随机选择一张,因此我们可以用random.choice(cards)
函数实现:
def deal_card():
return random.choice(cards)
玩家和庄家都需要两张牌,因此我们可以循环执行两次:
for i in range(2):
player_card = deal_card()
dealer_card = deal_card()
player_point += get_point(player_card['point'])
dealer_point += get_point(dealer_card['point'])
print(f'玩家获得了 {player_card["point"]}({player_card["type"]}),当前得分为 {player_point}')
print(f'庄家获得了 {dealer_card["point"]}({dealer_card["type"]}),当前得分为 {dealer_point}')
步骤 3. 玩家回合
在玩家回合,玩家需要选择“要牌”或“停牌”。如果选择要牌,则执行发牌函数,并将得分相应更新。如果选择停牌,则终止循环。
while True:
action = input('请选择行动(要牌/停牌): ')
if action == '要牌':
player_card = deal_card()
player_point += get_point(player_card['point'])
print(f'玩家获得了 {player_card["point"]}({player_card["type"]}),当前得分为 {player_point}')
if player_point > 21:
print('您的分数超过21点,游戏结束!')
break
elif action == '停牌':
break
步骤 4. 庄家回合
在庄家回合,庄家需要根据自己的得分选择是否要牌。如果得分小于17,则必须要牌;否则可以选择停牌。
while dealer_point < 17:
dealer_card = deal_card()
dealer_point += get_point(dealer_card['point'])
print(f'庄家获得了 {dealer_card["point"]}({dealer_card["type"]}),当前得分为 {dealer_point}')
if dealer_point > 21:
print('庄家的分数超过21点,玩家获胜!')
break
步骤 5. 结果判断
最后,我们需要判断游戏结果。如果玩家的得分超过21点,则玩家输掉所有下注的筹码;如果庄家的得分超过21点,则玩家获胜;否则,比较双方得分,点数大者获胜。
if player_point > 21:
print('您输掉了所有筹码!')
elif dealer_point > 21:
print('庄家的分数超过21点,玩家获胜!')
elif player_point > dealer_point:
print('玩家获胜!')
elif player_point < dealer_point:
print('庄家获胜!')
else:
print('平局!')
示例
示例 1: 玩家获胜
玩家获得了 7(diamond),当前得分为 7
庄家获得了 2(club),当前得分为 2
玩家获得了 10(heart),当前得分为 17
庄家获得了 7(heart),当前得分为 9
玩家获得了 Q(club),当前得分为 27
您的分数超过21点,游戏结束!
您输掉了所有筹码!
示例 2: 庄家获胜
玩家获得了 A(heart),当前得分为 11
庄家获得了 5(diamond),当前得分为 5
玩家获得了 3(heart),当前得分为 14
庄家获得了 7(spade),当前得分为 12
请选择行动(要牌/停牌): 停牌
庄家获得了 A(club),当前得分为 13
庄家获得了 K(spade),当前得分为 23
庄家的分数超过21点,玩家获胜!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现21点小游戏 - Python技术站