IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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数组的元素全部置为零方便下一次出题和答题

结语:

啰啰嗦嗦说了这么多,但是游戏设计过程是挺有意思的,而且游戏也有趣,感兴趣的同学不妨动自己手试试,有什么问题也可以给我留言哦,还有第一次写博客难免会有瑕疵,还望大佬们海涵

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 11:50:39  更:2021-09-03 11:51:32 
 
开发: 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年11日历 -2024/11/15 13:01:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码