Python写个益智小游戏来锻炼大脑
游戏规则
珠玑棋的规则非常简单。它分为两方:攻击方和防守方。具体流程如下:
防守方写一个4位数字,每位数字不能重复
攻击方有10次猜测的机会,在每次机会里面,攻击方可以说出一个4位数,让防守方检查。
定义两个字母 A 和 B
攻击方说出的4位数里面,每有任何一位或者多位的数字和位置都对,则 A+1。例如防守方的答案是1234,攻击方的答案是6274,那么就是2A
在第4步检查以后,如果攻击方剩下的数字里面,有一位或者多位数字,在防守方剩下的数字里面,但位置不对,则 B+1。例如防守方的数字是1234,攻击方的数字是4190,就是2B。
防守方给出 A 和 B 的值,攻击方根据这两个值修正自己的猜测数。如果10次内猜对了,那么攻击方胜利。如果超过10次都猜不对,则防守方胜利。
特别说明,在匹配数字的时候,首先检查数字和位置都对的情况。检查完成以后,再检查数字对位置不对的情况。并且这个时候,是攻击方的剩余数字从左至右依次到防守方的剩余数字中检查。每检查一个数字,就把这个数字从攻击方和防守方的数字里面同时剔除。所以对于防守方的数字1234,如果攻击方的数字为4437,那么检查结果应该是1A1B。因为一开始把数字3剔除了,攻击方剩余447,防守方剩余124.然后攻击方的第一个4和防守方的4匹配上了以后也会剔除。变成攻击方剩余47,防守方剩余12.此时防守方已经没有4了。
在这个游戏规则里面,防守方的作用仅仅是检查结果而已,并没有攻防对抗,所以我们可以用程序来代替防守方。
Python 实现
首先我们来生成防守方的4位数字。由于4位数字不相等,所以我们使用 Python 的随机数来生成:
import random
data = [str(x) for x in range(10)]
random.shuffle(data) # shuffle 会直接修改列表本身,所以不用赋值
if data[0] == '0': # 如果首尾为0,那么取后四位answer = data[-4:]
else: # 首尾不为0,取前4位answer = data[:4]
由于要检查的数据通过 input 输入,所以为了保持类型一致,我们都使用字符串来表示。
运行效果如下图所示:
接下来,让玩家连续进行10次尝试,每次输入一个4位数:
for i in range(1, 11):while True:guess = input(f'进行第{i}次尝试,请输入一个4位数:')if len(guess) == 4:breakprint('请输入4位数。')
运行效果如下图所示:
接下来,首先检查位置和数字都正常的情况:
def match_num_and_position(guess, answer):A = 0for guess_num, answer_num in zip(guess, answer): # 逐位检查攻击方和防守方的答案数字if guess_num == answer_num:A += 1else:guess_left_num.append(guess_num)answer_left_num.append(answer_num)return guess_left_num, answer_left_num
这里,使用zip
来同时迭代guess
和answer
,从而实现逐位一一对应检查。
下面再来处理数字对,但位置不对的情况:
def match_num(guess, answer):B = 0for num in guess:if num in answer:B += 1answer.remove(num) # .remove 是一个原地操作,不需要赋值return B
这个代码就比较简单了。把guess
剩下的数字一个一个到答案剩下的数字里面去查询,如果找到了,B 就加1。然后从答案里面删除这个数字。接着查找 guess 的下一个数字。
完整的代码如下图所示:
如果10次猜测都失败了,运行效果如下图所示:
如果才对了,运行效果如下图所示:
计算过程如下图所示:
至此,珠玑棋的命令行版本就完成了。希望这个小游戏能帮助大家锻炼一下大脑。
在这里还是要推荐下我自己建的Python学习Q群:831804576,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),
包括我自己整理的一份2022最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!
Python写个益智小游戏来锻炼大脑相关推荐
- Python写王者荣耀小游戏
Python写王者荣耀小游戏 文章目录 Python写王者荣耀小游戏 说明: 一.socket创建 二.实现多进程 三.面向对象版本 四.主体部分搭建 1. 服务器主要步骤的实现 1-1主体部分 1- ...
- c 语言500行小游戏代码,500行代码使用python写个微信小游戏飞机大战游戏.pdf
500行行代代码码使使用用python写写个个微微信信小小游游戏戏飞飞机机大大战战游游戏戏 这篇文章主要介绍了500行代码使用python写个微信小游戏飞机大战游戏,本文通过实例代码给大家介绍的非常详 ...
- 【python小游戏】用python写一款小游戏--贪吃蛇
大家好,我是爱吃饼干的小白鼠,今天给大家分享一款自制小游戏.如何用python编写贪吃蛇. 今天,突发奇想的想用python写一款小游戏--贪吃蛇.相信大家都玩过,那么玩一款自己写的是一种什么样的体验 ...
- python俄罗斯方块小游戏实验报告,童年的记忆——如何用python写一个俄罗斯方块小游戏!...
谈到记忆里的小游戏,俄罗斯方块是大家一定会想到的一款游戏,自己写出来的应该玩起来更有感觉,然后就写了一个俄罗斯方块的游戏 给大家分享一下这个游戏的源码 先用python创建一个py文件 定义这次程序所 ...
- python代码示例500行源代码-500行代码使用python写个微信小游戏飞机大战游戏
这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手. 帮助蹲厕族.YP族.饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右 ...
- Python写一个迷宫小游戏
相关文件 关注小编,私信小编领取源码和其他小游戏的代码哟~~ 开发环境 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 原码.安装包(点击领取即可) 原 ...
- 用 Python 写个俄罗斯方块小游戏
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:python技术 PS:如有需要Python学习资料的小伙伴可以加点 ...
- 【纯干货】用Python写30种小游戏给男朋友玩,谈恋爱我是认真的
目录 1.21点数字小游戏展示: 2.保卫森林大作战啦啦 3.超级大的迷宫 总结 正在学Python中的我,自我感觉学的还不错的亚子~想做点什么来练练手,然后我疯狂的找各种小游戏的教程源码什么的,于是 ...
- 假期用Python写8个小游戏(附源码)
假期玩嗨了吧,我给你准备了六个小游戏,有胆子来玩一玩吗?我自己是玩了很多遍的,所以想让大家一起玩,独乐乐不如众乐乐.代码放在下面了,动手操作吧. 1.小恐龙 玩法:上下控制起跳躲避 源码分享: Pyt ...
最新文章
- 计算机考试八页PPT,第八章节授课ppt-江苏省计算机等级考试.ppt
- Java 8 Date-Time API 详解
- svnadmin: e000002: 无法创建最上层目录_JFolder::create: 无法创建目录
- 什么是 Change Notification,为什么它很重要(译)
- 点击打印出现IE已经阻止此站点用不安全方式使用 ActiveX 控件解决方
- 这回真要涨工资了!国务院教育督导办:2020年把义务教育教师平均工资收入水平不低于当地公务员作为督导检查重点...
- python包含多个元组的元组_如何在python中将多个”列出的”元组连接成一个元组?...
- 数据结构之图的遍历:广度优先遍历(BFS)
- python框架实例,从零构建一个简单的 Python 框架
- java中final用法
- 审阅“史上”最烂的代码
- 剧院在线选座票务系统
- 第十一章 Caché 命令大全 HALT 命令
- Android压缩Apk
- xbox无线适配器驱动_雷蛇推出两款适用于新 Xbox 的游戏耳机:Kaira、Kaira Pro
- 面试官这么表现就有戏?不一定哦!
- 2023最新苹果APP上架App Store流程(超详细)
- 电脑运行速度慢的处理
- Android Animator(Android动画)
- 2020年8月编程语言排行榜出炉:C语言位居第一,Java、Python位居二三