基于Python完成的《棋牌游戏11点》游戏
模块一后的小作业(棋牌游戏11点)
经过对模块一python基础知识的学习后,对已学知识进行实战练习,目的也是为了巩固和掌握其语法知识。
虽然小游戏实现难度不大,但贵在基本是自己慢慢写出来的代码吧哈哈哈。一步一步来,问题不大。
游戏题目及要求如下:
1、生成一副扑克牌(自己设计扑克牌的结构,小王和大王可以分别用14、15表示 )
2、自定义3个玩家
3、发牌规则:
默认先给用户发一张牌,其中 J、Q、K、小王、大王代表的值为0.5,其他就是则就是当前的牌面值。
4.用户根据自己的情况判断是否继续要牌。要,则再给他发一张。(可以一直要牌,但是如果自己手中的牌总和超过11点,你的牌就爆掉了(牌面变成0))不要,则开始给下个玩家发牌。(没有牌则则牌面默认是0)
如果用户手中的所有牌相加大于11,则表示爆了,此人的分数为0,并且自动开始给下个人发牌。
4、最终计算并获得每个玩家的分值,例如:
result = {"alex":8,"武沛齐":9,"李路飞":0
}
代码实现如下:
import random# 新建一个扑克花色表
poke_color = ["红桃", "黑桃", "方块", "梅花"]# 新建一个扑克数值列表
num_list = []
for i in range(1, 14):num_list.append(i)# 创建一副新的扑克牌及各牌对应代表分数的列表,如[('红桃', 7 , 7),('黑桃', 12 , 0.5)...]
total_poke_list = []
for color in range(len(poke_color)):for num in range(1, 14):if num < 11:data = (poke_color[color], num_list[num - 1], num_list[num - 1])total_poke_list.append(data)else:data = (poke_color[color], num_list[num - 1], 0.5)total_poke_list.append(data)
special_poke = [('小王', 14, 0.5), ('大王', 15, 0.5)]
total_poke_list.extend(special_poke)print('游戏开始'.center(50, '-'))# 自定义录入三名玩家姓名
user_list = []
for i in range(3):user_input = input(f"请输入玩家{i + 1}号的姓名({i + 1}/3):").strip()user_list.append(user_input)# 首先为三位玩家先随机各发一张牌
poke_first = []
poke_score = []
for i in range(len(user_list)):index = random.randint(0, len(total_poke_list) - 1)poke = total_poke_list.pop(index)poke_first.append(poke)poke_score.append(poke[2])print("各玩家首次发牌完毕,下面是加牌环节".center(50, '-'))# 依次询问用户是否需要选择要牌,最后统计出各玩家最后得分(牌值爆了则为0分)
result = {}
for i in range(len(user_list)):print(f"{user_list[i]}玩家,你的第一张牌是:{poke_first[i][0]}{poke_first[i][1]}")while True:choice = input("请选择是否需要继续要牌(y/n):").strip()choice = choice.upper()# 首先判断用户输入是否符合规则if choice not in {'Y', 'N'}:print("输入格式错误,请重新正确的输入!")continue# 输入N,则选择不要牌了if choice == 'N':result[user_list[i]] = poke_score[i]print(f"{user_list[i]}玩家选择不要牌了")break# 输入Y,继续要牌,将牌得分进行累加,判断是否爆了if choice == 'Y':index = random.randint(0, len(total_poke_list) - 1)poke = total_poke_list.pop(index)print(f"{user_list[i]}玩家要的牌为:{poke[0]}{poke[1]}")poke_score[i] += poke[2]# 判断牌值得分是否爆了while poke_score[i] <= 11:result[user_list[i]] = poke_score[i]breakelse:print(f"很遗憾{user_list[i]}玩家,您手中的牌已爆!")result[user_list[i]] = 0breakprint("游戏结束,玩家的得分情况如下:".center(50, '-'))
for i in result:print(f"玩家{i}得分:", result[i])
害,感觉还良好的作业,经过一番修改,才知道原来存在的问题也还比较多,受益颇多吧,这或许就是成长和进步吧。
总结一下以上代码中出现的问题和需要优化的地方:
问题1:没有考虑到用户输入的为空和重复的情况
问题2:num_list是多余的,可删
问题3: 用太多for i in range(len(xxx)), python 可以直接for i in array
问题4:变量命名太随意
可以优化的点:
优化1:同时遍历index,和value可以使用enumerate
优化2:在循环中,重复的代码可以抽出来,简化代码量
更新优化后的代码如下:
import random# 新建一个扑克花色表
poke_color = ["红桃", "黑桃", "方块", "梅花"]# 创建一副新的扑克牌及各牌对应代表分数的列表,如[('红桃', 7 , 7),('黑桃', 12 , 0.5)...]
total_poke_list = []
for color in poke_color:for num in range(1, 14):if num < 11:score = numelse:score = 0.5data = (color, num, score)total_poke_list.append(data)
special_poke = [('小王', 14, 0.5), ('大王', 15, 0.5)]
total_poke_list.extend(special_poke)print('游戏开始'.center(50, '-'))# 自定义录入三名玩家姓名
user_list = []
while len(user_list) < 3:user_order = len(user_list) + 1user_input = input(f"请输入玩家{user_order}号的姓名({user_order}/3):").strip()if user_input and user_input not in user_list:user_list.append(user_input)else:print("输入错误,请重新输入")# 首先为三位玩家先随机各发一张牌
poke_first = []
poke_score = []
for name in user_list:index = random.randint(0, len(total_poke_list) - 1)poke = total_poke_list.pop(index)poke_first.append(poke)poke_score.append(poke[2])print("各玩家首次发牌完毕,下面是加牌环节".center(50, '-'))# 依次询问用户是否需要选择要牌,最后统计出各玩家最后得分(牌值爆了则为0分)
result = {}
for index, name in enumerate(user_list):print(f"{name}玩家,你的第一张牌是:{poke_first[index][0]}{poke_first[index][1]}")while True:choice = input("请选择是否需要继续要牌(y/n):").strip()choice = choice.upper()# 首先判断用户输入是否符合规则if choice not in {'Y', 'N'}:print("输入格式错误,请重新正确的输入!")continue# 输入N,则选择不要牌了if choice == 'N':result[user_list[index]] = poke_score[index]print(f"{user_list[index]}玩家选择不要牌了")break# 输入Y,继续要牌,将牌得分进行累加,判断是否爆了if choice == 'Y':index_random = random.randint(0, len(total_poke_list) - 1)poke = total_poke_list.pop(index_random)print(f"{user_list[index]}玩家要的牌为:{poke[0]}{poke[1]}")poke_score[index] += poke[2]# 判断牌值得分是否爆了while poke_score[index] <= 11:result[user_list[index]] = poke_score[index]breakelse:print(f"很遗憾{user_list[index]}玩家,您手中的牌已爆!")result[user_list[index]] = 0breakprint("游戏结束,玩家的得分情况如下:".center(50, '-'))
for name in result:print(f"玩家{name}得分:", result[name])
基于Python完成的《棋牌游戏11点》游戏相关推荐
- 基于Python的Pygame带背景音乐的五子棋游戏的设计与实现
源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 基于Python的Pygame带背景音乐的五子棋游戏的设计与实现 用户需求分析 通过软件功能的分析, ...
- 基于Python/Tkinter的飞机大战单机小游戏
这是很早之前课余时间写的基于Python/Tkinter单机小游戏,用来练手,今天将代码贴出来,方便大家一起学习,通过Py/Tk对于学习GUI作为一个入口,其实是个不错入口,在这里推荐一下Tcl/Tk ...
- 基于Python制作的消消乐小游戏
导语 哈喽,好久不见.消失人口上线更新一波每月必出的 python 制作小游戏系列文章.本期我们将制作一个消消乐小游戏,让我们愉快地开始吧 开发工具 Python 版本:3.6.4 相关模块: pyg ...
- Maze_AI: 一款基于 Python + Pygame + AI 算法的迷宫小游戏
(一)课题内容 实现走迷宫. 主要功能为界面显示.上下左右键的响应以及当前步数统计. 通过该课题全面熟悉数组.字符串等的使用,掌握程序设计的基本方法及友好界面的设计. (二)课题要求 1. 基本要求 ...
- 基于Python实现制作的接金币小游戏
资源下载地址:https://download.csdn.net/download/sheziqiong/85738332 资源下载地址:https://download.csdn.net/downl ...
- 基于Python的PyGame模块实现泡泡龙小游戏(Forgger2)
环境要求 操作系统:Windows 7.Windows 10,mac. Python版本:3.8及以上 游戏介绍 游戏的主要目的时穿过马路和河流抵达自己的洞穴,中途会有可以互动的道具可以使用,地图上会 ...
- 基于Python实现的五子棋tkinter版小游戏设计
资源下载地址:https://download.csdn.net/download/sheziqiong/85677012 资源下载地址:https://download.csdn.net/downl ...
- 基于Python实现的五子棋tkinter版小游戏 课程报告+源码
资源下载地址:https://download.csdn.net/download/sheziqiong/85677012 资源下载地址:https://download.csdn.net/downl ...
- 【剧本杀游戏】彼岸元素星-基于python的剧本杀游戏开发
彼岸元素星一款基于python开发的PC端剧本杀游戏,故事背景是元素星球被毁灭.玩家需要扮演"木精灵"找到元素星球被毁灭的原因. 游戏下载链接: https://download. ...
- python10点半纸牌游戏_扑克11点游戏(python代码)
扑克11点游戏(python代码)import random'''纸牌11点游戏 规则: 1. 3个人参与,默认先给用户发一张牌,其中 J.Q.K.小王.大王代表的值为0.5,其他就是则就是当前的牌面 ...
最新文章
- Dubbo入门介绍---搭建一个最简单的Demo框架
- 2018年企业运维开发经典面试题
- 线上问题分析系列:数据库连接池内存泄漏问题的分析和解决方案
- SFB 项目经验-55-另类更新Exchange 2016 KB
- java 基本数据类型及自己主动类型提升
- Ajax datatype:'JSON'的error问题Status1:200,JSON格式
- 模型保存的方法-----保存整个模型
- 图像变换——对数变换
- 二八定律 80/20法则 帕累托法则、帕累托定律、马特莱定律、最省力法则或不平衡原则
- 初中英语语法(010)-分词
- java实现pdf的拆分和合并
- 讲解图层样式中的混合颜色带
- Excel常用技巧(一)——快捷键
- 301代码php代码在哪里加,php 301转向实现代码
- 淘宝详情页排版布局怎么做?大神导航,一个神奇的网站,从此开启大神之路!
- Dubbo host配置映射内网IP导致消费者无法连接到生产者提供的服务详解
- 在Windows Embedded Standard中阻止安装提示和OOBE
- 中国雅虎推出雅虎统计服务
- 项目管理类,PMP和软考的区别
- 撑不下去的时候,仰望,星空。
热门文章
- Java毕设项目在线投稿系统计算机(附源码+系统+数据库+LW)
- 拟合、过拟合、欠拟合
- section元素的使用
- 计算机为什么需要补码?
- 抖音APP数据python爬虫——个人粉丝视频
- SCCM2007部署Office2010(1)
- 【已解决】联想小新Pro14适配器打感叹号(代码56)无法上网原因解决!亲测有效
- QQ邮箱引流产品怎么推广好?QQ邮箱低成本引流技巧
- Python接口自动化函数调用TypeError: seperate_data() missing 1 required positional argument:‘self’
- 微信公众号开发--新增临时素材