| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 只用一维数组也能写游戏?趣味游戏分享 -> 正文阅读 |
|
[Python知识库]只用一维数组也能写游戏?趣味游戏分享 |
序言: 最近学习了Linxu下的文件IO,琢磨着做个小游戏实践一下,思来想去写了个的点灯游戏,取名为“记忆大师”。游戏实现非常简单,只用一维数组即可实现 游戏运行:1)主界面 ? 主界面些许简陋,作者想着可能大家喜欢简约风吧,不纠结这个了,我们点击“游戏说明”试试: 2)游戏说明 ? ? ? ? ? ? ? ? ? ? ? ? ? ? (游戏说明-1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? (游戏说明-2) ? ? ? ? ? ? ? ? ? ? ? ? ? (游戏说明-3) ? ? ? ? ? ? ? ? ? ? ? ? ? (游戏说明-4) ? ? ? ? ? ? ? ? ? ? ? ? ? (游戏说明-5) 3)开始游戏 ? 说了这么多可能有童鞋早就想玩两把了,别急,我们这就点击“开始游戏” 3.1 游戏开始后会依次随机点亮若干个点(因为点亮的点是“转瞬即灭”的,这里只示例了第一个点亮的点),我们的任务是记住它们的位置 3.2 当每一关展示完所有点亮的点后,就会提示我们作答? ? ?3.3?凭借作者超强的记忆力,刚刚点亮的是这三个点,点击提交 ?3.4?答对啦,哈哈哈 3.5?第二关,第三关,第四关也轻松通过 ? ?? ?3.6?第五关记错了一个点,失败了呜呜呜 ? ?算了,太菜了,还是来说说实现过程吧 实现过程1)棋盘设计 ? 读过严蔚敏版的《C语言数据结构》的童鞋可能对游戏主界面的那个”网状图“比较眼熟,没错,它就是《数据结构》第187页的那张"一个表示交通网的例图"。可能有人要问了:为啥选择这个做棋盘啊?咳咳,其实作者一开始是想做个交通咨询系统的,并且花时间还原了书上那个"交通图",但是后来想着交通咨询系统没有啥可玩性,后面在做这个”记忆大师“时需要设置棋盘,本来想做成规规矩矩5*5的正方形棋盘,后来无意间想起了之前画好的交通图,一拍脑袋,哎,这不刚好可以用来做棋盘嘛 ? ? ? ? ? 《数据结构》上一张表示交通网的例图 2)点亮\熄灭顶点 ? ?这个游戏需要满足点击一个点时点亮,再点击熄灭,这是怎么做到的呢? 2.1?怎样去存储这些点 ? 前面提到游戏里最复杂的数据结构是一维数组,每错,这25个点存储在数组vex[25]里:我们按从左往右,从上往下的顺序给顶点编号为0-24,例如vex[4]表示从左到右,从上到下数的第5个点 2.2?点亮\熄灭 ? 可以说这是整个设计耗时最久的一部分,这部分不需要敲代码,而是需要找出这25个顶点的坐标:在开发板上,不断点击一个点,得到一个坐标范围,然后把“点亮时的图片”按这个坐标覆盖上去,然后一像素一像素的移动图片测试,直到该点“点亮时的图片”完全覆盖原图片。这样的工作要进行25次 ??? ? ? ? ? ?? ? ? ? ? ? “熄灭的点”? ? ?? ?“点亮的点” 用“点亮的点”完全覆盖“熄灭的点”可以达到顶点被点亮的视觉效果,反之则顶点被熄灭 ? 拿到所有点的坐标后就好办了,我们可以用一个数组flag[25]来记录这25个点的点亮\熄灭情况,并且约定: 1. flag[i] = 0表示vex[i]这个点是熄灭状态 2. flag[i] = 1表示vex[i]这个点是点亮状态 例如上面举例的vex[4]它这部分的代码如下: ? 当把25个点的坐标范围都找出来,并且设置同上的代码,就可以做到点击任一一个点时点亮它啦 3)难度设置 ? 有人可能要问了,游戏太难了怎么办啊?没关系,我们可以设置游戏难度,但是他又疑惑了:可是我没看见设置难度的按钮啊?这也是这个游戏有趣的一个点 ? 这个游戏并没有设置按钮来选择游戏难度,而是把这个按钮转移到了"点灯"上:游戏开始时,我们点亮的灯越多游戏难度越高(游戏难度指的是出题时的点灯间隔)实现函数如下: ? ?可以看出当什么都不做直接开始游戏时,出题时点灯间隔为1200000微秒即1.2秒,而每点亮一个点间隔缩短40000微秒 4)系统请出题 ? 每关开始时系统会为我们出题,即依次点亮若干个点,每关出题的个数(点亮的顶点数)Num遵循:Num?= level + 2,其中level为关卡数(1,2,3,...8),这些题目是随机生成的,我们需要用到随机数函数rand(),另外还需要一个数组来保存题目:question[10](最多有8关,第8关有10个题目)? ??第level关需要生成level + 2个题目,并且这关的题目不能重复(即同一个点被点亮多次),随机生成level + 2个不重复的0-24之间的随机数,生成的随机数所对应的点将被作为题目,随后这些题目将依次点亮以展示给用户 5)用户请答题 ? 系统出完题了,该轮到我们答题了,我们需要根据记忆点亮刚刚的题目。有人说我们需要一个数组来保存我们的答案,的确可以这样做,但是别忘了我们之前还定义了一个flag数组用来记录顶点的点亮\熄灭,那么我们的答案不就已经保存在这个flag数组里了嘛 ? 我们提交答案后,系统需要验证我们的答案,这个就更简单了,直接拿flag数组和question数组一对比不就知道答错没嘛,作者一开始确实也是这样做的,但是由于作者技术太菜,经常玩到第6.7关就没了,而且答错了也不给任何提示,于是乎我又加了两个数组errorsign[]和rightsign[] ? 其中errnosign[]用来记录用户答错或者少答的点,rightsign[]用来记录相应的正确的点,检验答案即用for循环遍历flag和question数组,当发现flag[i] != question[i]时: 1. 如果flag[i] == 1则说明用户点亮了这个点但是题目里没有这个点,于是errorsign将记录这个点。 2. 如果flag[i] == 0则说明题目里有这个点但是用户并没有点亮这个点,于是rightsign将记录这个点。 ? 那么,当用户答错时,除了提示回答错误外,还指出了我们答错的点和相应正确的点 值得注意的是:每次检验完答案后需要把flag数组的元素全部置为零方便下一次出题和答题 结语:啰啰嗦嗦说了这么多,但是游戏设计过程是挺有意思的,而且游戏也有趣,感兴趣的同学不妨动自己手试试,有什么问题也可以给我留言哦,还有第一次写博客难免会有瑕疵,还望大佬们海涵 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/26 23:43:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |