【Python】【原创】21点游戏
简介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 --version 如果显示Python版本号,则安装成功。
将提供的21点游戏代码文件保存为一个.py文件,例如blackjack.py。
确保代码文件位于您可以方便访问的位置。
在命令行中,导航到存储代码的文件夹,并运行以下命令来启动游戏:
python blackjack.py
实例化对象
要玩游戏,请在命令行输入:
bj = Blackjack()
bj.start_game()
看牌
若想知道你的手牌,请在命令行输入:
bj.your_cards() 游戏未结束前,你可以查看庄家的第一张牌(明牌):
bj.peek() 游戏结束后,你可以看庄家的手牌,复盘你的得失:
bj.see_banker_cards()
你的回合
输入窗口会在你的回合中提醒你是否要牌,或者结束你的回合:
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点获得胜利,或者因爆牌输掉之前:
hit
hit
hit 再或者你觉得你势在必得,或者见好就收,你可以停牌:
stand 很快,你将验收你的成果,或是赢的游戏,或是输掉结局,更或者你会罕见地获得一份“和平”:
winfaileven 无论如何,这都是一份很简单的游戏,你只负责做出选择,还是说,并不是?
源代码
源代码见下,非常简单易懂:
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
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
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
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'
感觉这个游戏设计虽然简单,人多的时候玩起来真的还挺上头的 21点从规则设置上本质还是庄家有利的游戏 真尴尬。不会只有我心里幻想的是某一种用身体做赌注的游戏才进来的吧 感觉像是学python的大学生写的课程作业这是可以说的吗 21点基本是赌博类游戏的入门了,基本多多少少都接触过,简单的规则和玩法吸引不少人,看过一些赌博类动画,好像挺多作弊或者一些细节的特殊手段 对于我这种啥也不懂的人来说,看上去真的好厉害啊 天呢在这个版块还能看到这种东西,来支持一下 惹,刚从如山的python代码里出来(晕),可以用代码每步算一算概率,决定是继续抽还是停牌,当然赌狗赌到最后应有尽有( 很有趣的样子耶,要是身边有人能一起玩就好了 有玩的截图吗,还是全代码游戏? 所以说,这个就是单纯的用py做了一个21点游戏吗?还是说有隐藏的玄机? 之前也在部分游戏里见过内置21点的小游戏,有些为了避免玩家太大心理落差会做成有保底机制,或者rpg类型的做成和幸运挂钩,毕竟游戏里的不是要坑玩家钱而且让玩家玩的 感觉看上去超有意思呢,要是身边能有伙伴一起参与玩就太棒啦。 看了下代码确实非常经典的规则,甚至连庄家的17点默认规则也是一样;P 这个很经典的游戏了 难得在这里遇到这种 挺经典的游戏,第一次了解这个游戏是在星露谷上(雾) 当年大一作业就是用递归写21点的计算器,不过规则放宽了可以用四则运算 我确实知道21点这游戏,但不知道Python也能直接用代码做呢?感觉很多游戏里的小游戏都一样是这么制造的? 之前玩过一个脱衣扑克的3D小黄油
不过可以逃课就没看玩法惹{:6_169:}
页:
[1]
2