|
简介
21点(Blackjack)是一款非常流行的纸牌游戏,玩家的目标是通过手中的牌尽量接近21点,且不能超过21点。如果玩家点数超过21点,则视为“爆掉”,庄家获胜。如果庄家的点数超过21点,则玩家获胜。本游戏的规则遵循经典的21点游戏规则。
安装与配置
在使用此代码之前,您需要安装Python环境,并确保具备安装有Python 3.10及以上版本:本游戏代码是用Python编写的。您可以从Python官网下载并安装Python。
安装步骤
从Python官网下载安装包,按照安装向导安装Python。安装过程中确保勾选了“Add Python to PATH”选项,这样您可以在终端或命令行中直接使用Python。安装完成后,打开命令行(Windows用户可以打开CMD,Mac用户可以打开终端),输入以下命令以验证安装是否成功:
如果显示Python版本号,则安装成功。
将提供的21点游戏代码文件保存为一个.py文件,例如blackjack.py。
确保代码文件位于您可以方便访问的位置。
在命令行中,导航到存储代码的文件夹,并运行以下命令来启动游戏:
实例化对象
要玩游戏,请在命令行输入:
- bj = Blackjack()
- bj.start_game()
复制代码
看牌
若想知道你的手牌,请在命令行输入:
游戏未结束前,你可以查看庄家的第一张牌(明牌):
游戏结束后,你可以看庄家的手牌,复盘你的得失:
你的回合
输入窗口会在你的回合中提醒你是否要牌,或者结束你的回合:
- During your turn, you can continue choose "hit" for one more card until you get 21, or fail to bust, or choose "stand" your turn.
复制代码 你可以选择要牌,在你得到21点获得胜利,或者因爆牌输掉之前:
再或者你觉得你势在必得,或者见好就收,你可以停牌:
很快,你将验收你的成果,或是赢的游戏,或是输掉结局,更或者你会罕见地获得一份“和平”:
无论如何,这都是一份很简单的游戏,你只负责做出选择,还是说,并不是?
源代码
源代码见下,非常简单易懂:
- import random
- SUITS = ['梅花', '方块', '红心', '黑桃']
- RANKS = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
- DOT = {'2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '10': 10, 'J': 10, 'Q': 10, 'K': 10}
- class Blackjack:
-
- def __init__(self):
- self._deck = []
- self._banker = []
- self._player = []
- self.is_start = False
- self.has_end = False
- def _shuffle(self):
- deck = [(suit, rank) for suit in SUITS for rank in RANKS]
- random.shuffle(deck)
- return deck
- def _hit(self):
- return self._deck.pop()
- def peek(self):
- if self.is_start:
- return self._banker[0]
- return None
- def start_game(self):
- self.has_end = False
- self._deck = self._shuffle()
- self._player.clear()
- self._banker.clear()
- self._player.append(self._hit())
- self._banker.append(self._hit())
- self._player.append(self._hit())
- self._banker.append(self._hit())
- self.is_start = True
- self.is_your_turn = True
- result = self._player_turn()
- print(result)
- self.is_start = False
- def _dot(self):
- banker_dots = 0
- player_dots = 0
- banker_aces = 0
- player_aces = 0
- for _, rank in self._player:
- match rank:
- case 'A':
- player_aces += 1
- case _:
- player_dots += DOT[rank]
- if player_dots + 11 + player_aces - 1 <= 21 and player_aces != 0:
- player_dots += 11 + player_aces - 1
- else:
- player_dots += player_aces
- for _, rank in self._banker:
- match rank:
- case 'A':
- banker_aces += 1
- case _:
- banker_dots += DOT[rank]
- if banker_dots + 11 + banker_aces - 1 <= 21 and banker_aces != 0:
- banker_dots += 11 + banker_aces - 1
- else:
- banker_dots += banker_aces
- return player_dots, banker_dots
- def your_cards(self):
- return self._player[:]
- def _player_turn(self):
- player_dots, banker_dots = self._dot()
- if player_dots == 21 and banker_dots == 21:
- return 'even'
- elif player_dots == 21:
- return 'win'
- elif banker_dots == 21:
- return 'fail'
- while True:
- match input('During your turn, you can continue choose "hit" for one more card until you get 21, or fail to bust, or choose "stand" your turn.'):
- case 'hit':
- self._player.append(self._hit())
- player_dots, _ = self._dot()
- if player_dots > 21:
- return 'fail'
- elif player_dots == 21:
- return 'win'
- case 'stand':
- result = self._banker_turn()
- return result
- case _:
- continue
- def see_banker_cards(self):
- if self.has_end:
- return self._banker[:]
- def _banker_turn(self):
- while True:
- player_dots, banker_dots = self._dot()
- if banker_dots < 17:
- self._banker.append(self._hit())
- elif 17 <= banker_dots <= 21:
- if player_dots < banker_dots:
- self.has_end = True
- return 'fail'
- elif player_dots == banker_dots:
- self.has_end = True
- return 'even'
- else:
- self.has_end = True
- return 'win'
- elif banker_dots > 21:
- self.has_end = True
- return 'win'
-
复制代码
|
评分
-
查看全部评分
白冥
:求一下免费的追随,你的支持是对我最大的鼓励
-
|