Python如何实现扑克牌21点游戏
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍Python如何实现扑克牌21点游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!直接上代码import randomimport sys# 牌面列表card_
千家信息网最后更新 2025年01月23日Python如何实现扑克牌21点游戏
这篇文章主要介绍Python如何实现扑克牌21点游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
直接上代码
import randomimport sys# 牌面列表card_code = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']# 花色列表card_symbol = ['♦', '♣', '♥', '♠']# 游戏初始化def init(player_count): # 根据玩家数来生成玩家记牌器 player_group = [[] for _ in range(player_count)] # 根据玩家数来生成玩家是否要牌 player_isWant = [True for _ in range(player_count)] # 生成元素1~52的列表 (去掉大小鬼的扑克牌[52张]) poker = list(range(1, 53)) # 用random的shuffle函数对列表打乱顺序 (洗牌) random.shuffle(poker) # 返回玩家组 玩家是否要牌 乱序52张扑克 return player_group, player_isWant, poker# 打印玩家点数def print_player_point(player_group): # 存放玩家点数 player_point = [] # 遍历每一位玩家 for index in range(len(player_group)): # 打印每位玩家的牌和点数 print("-------玩家"+str(index+1)+"------") # 初始化玩家点数 如果含有牌A 因为A可视为1点或11点 则有两种点数 current_player = [0, 0] # 遍历每位玩家的手牌 for card in player_group[index]: """ 核心代码 由于牌面的数字是从1到52 所以牌面要先减1再求余才是牌面列表真正的下标 若玩家抽到牌为15 即牌面为15 - 13 = 2 且按花色顺序为♣ 即2♣ 牌面 15 - 1 = 14 再 14 % 13 = 1 这个就是对应牌面列表的第二位元素 即2 花色 15 - 1 = 14 再 14 / 13 = 1 对应花色列表第二位元素 即♣ """ # 获取牌面和花色下标 code_index = int((card - 1) % 13) symbol_index = int((card - 1) / 13) # 打印玩家牌信息 print(card_code[code_index] + card_symbol[symbol_index], end="\t") # 如果牌面含有A 则添加不同点数1和11 if (code_index + 1) == 1: current_player[0] += 1 current_player[1] += 11 # 如果牌面不含A 则添加相同点数 else: current_player[0] += code_index + 1 current_player[1] += code_index + 1 # 如果两个点数一致 则打印一个点数 if current_player[0] == current_player[1]: print("点数为"+str(current_player[0])+"点") # 否则打印两个点数 else: print("点数为"+str(current_player[0])+"点或"+str(current_player[1])) # 添加当前玩家点数 player_point.append(current_player) # 返回所有玩家点数 return player_point# 玩游戏def play_game(): # 打印游戏规则 print("-------21点游戏------") print("---A可看做1点或11点---") # 死循环一直进行游戏 while True: # 初始化玩家数为0 player_count = 0 # 当玩家数小于等于1或大于5时继续询问 while player_count <= 1 or player_count > 5: # 询问玩家数 print("有多少位玩家?(2~5位)", end="") # 获取控制台输入的数字 无验证输入 若输入非数字 程序直接报错 player_count = int(input()) # 初始化游戏 返回玩家组 玩家是否要牌 乱序52张扑克 player_group, player_isWant, poker = init(player_count) # 开始发牌 先为每位玩家发两张牌 循环玩家数 for index in range(player_count): for i in range(2): # pop() 函数用于移除列表中的一个元素(默认最后一个元素)并且返回该元素的值。 player_group[index].append(poker.pop()) # 打印玩家点数 并获取当前玩家点数 player_point = print_player_point(player_group) # 只要玩家继续要牌 且 还有剩余牌 则一直询问玩家是否要牌 while True in player_isWant and len(poker) > 0: # 遍历玩家 for index in range(player_count): # 判断玩家是否有可能还需要牌 if player_isWant[index] is True: # 询问玩家是否要牌 print("玩家"+str(index+1)+",您再要一张?(y/n)") # 获取控制台输入 isWant = str(input())[0] # 如果输入的字符为"n" 则将玩家标记为不再需要牌 if isWant == "n": player_isWant[index] = False # 如果不为字符"n" 默认为继续要牌 给该玩家发一张牌 else: player_group[index].append(poker.pop()) # 每轮询问结束 打印玩家点数 并获取当前玩家点数 player_point = print_player_point(player_group) print("\n"*5+"====本轮游戏结束====") # 定义一个计分器 score = [] # 要牌结束 遍历所有玩家的点数 判断哪位玩家胜利 for point_list in player_point: # 如果两个两个点数相同 说明没有A if point_list[0] == point_list[1]: # 如果分数大于21 直接取负数 小于等于21 任意取一个作为分数 score.append(-point_list[0] if point_list[0] > 21 else point_list[0]) # 如果两个点数不想同 说明含有A 则继续判断 else: # 如果两个点数中大的那个点数还小于等于21 if max(point_list) <= 21: # 去最大值为分数 score.append(max(point_list)) # 如果两个点数中大的那个点数大于21 else: # 如果小的点数大于21 直接取负数 小于等于21 取最小值为分数 score.append(-min(point_list) if min(point_list) > 21 else min(point_list)) # 最高分 max_point = max(score) # 如果最高分的人数为1 直接认为最高分的玩家获胜 打印游戏结果 if score.count(max_point) == 1: print("玩家"+str(score.index(max_point) + 1)+"获胜!") # 否则最高分的分数有并列 认为有多个人获胜 else: # 获胜玩家列表 temp_list = [] # 遍历分数 for index in range(len(score)): # 分数等于最高分 记录玩家 if score[index] == max_point: temp_list.append("玩家"+str(index+1)) # 拼接获胜玩家列表 打印游戏结果 print("恭喜"+",".join(temp_list)+"获胜!") # 询问是否继续游戏 print("是否继续游戏?(y/n)") # 如果控制台输入不为字符"y" 表示退出 if str(input())[0] != 'y': sys.exit()# 程序主入口if __name__ == '__main__': # 玩游戏 play_game()
运行结果如下
以上是"Python如何实现扑克牌21点游戏"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
玩家
点数
两个
元素
输入
扑克
最高
分数
最高分
花色
家数
扑克牌
字符
控制台
数字
结果
控制
生成
相同
下标
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术服务的范畴
济南售德网络技术有限公司
护苗 网络安全课讲话稿
有计算机网络技术专业的本科
中国互联网顶尖科技
华服互联网科技品牌部
健康物网络技术有限公司
第四界网络安全大会
数据库连接字符串解密
数据库 市场份额
在一场关于 网络技术是否
水务集团网络安全培训内容
软件开发需要适配鸿蒙系统
数据库序号设置
文山网络安全咨询
虚拟桌面 服务器 价格
数据库怎么字段值顺序
深圳四季云互联网科技有限公司
yml中的数据库密码加解密
通信行业服务器设备
华为服务器管理页面
杭州丁当互联网科技
数据库与c语言的区别是什么
网站测试服务器
公网ip网络安全设置
ios手机软件开发方案价格
内外网打印机共享网络安全
软件开发的国外就业前景
服务器传输协议搭建
如何快速查找我的世界服务器