1. 背景
本人是一个90后,不知道大家有没有玩过掌上游戏机或者小霸王游戏机,那是我童年中的快乐源泉,下面附上掌上游戏机和小霸王游戏机的图片,要是玩过的童鞋应该一眼就能看出来,还记得2013年左右有一款比较火的腾讯游戏,好像叫“天天酷跑”,那时候天天玩,上晚自习玩的时候手机差点被没收掉,现在想想也都是回忆,那么我们可以做一个这样的游戏吗?答案当然是可以的,只要你有单片机,有屏幕,有按键,那做出简易版的天天酷跑是绝对没有问题的哈,所以呢,接下来就是准备做一个天天酷跑的小游戏,这一篇文章主要讲的是设计需求和设计思路,看完这一篇文章,只要玩过屏幕的童鞋就可以自己做出一个这样的游戏了,当然,我也会在下一篇文章中详细讲解程序设计方案与实现。
图1
图2
2. 设计需求
我们需要先了解这个游戏的需求,这个游戏是一个2D画面,人处于屏幕偏左方一点的位置,障碍物会从右边往左边慢慢靠近,然后人通过按下按键来躲避障碍物,整体的一个设计是这个样子,按下按键跳一下,在空中的时候再次按下按键可以再跳一下,这就是二连跳,当然几连跳,可以通过程序来进行调节,毕竟是自己写的代码,想怎么开挂就怎么开挂。然后还需要有一个分数的显示,这里就设计在右上角,速度是否要通过分数值来加快这个大家可以自己定,下面是游戏界面的一个大体样子。
图3
3. 设计思路
既然了解了需求,那么就开始写设计方案吧。
首先是硬件设计,硬件比较简单,只需要与屏幕接线再外加一个按键即可,这里我采用的是OLED屏幕,和最最普通的按键,硬件设计框图如下。
图4
然后就是软件设计,首先界面要动,那肯定要用到定时器,这个没有任何疑问吧?主程序里面跑刷新屏幕的程序(当然也可以放在定时器里面),屏幕和主控采用IIC通信,按键采用中断,驱动部分就是这样,定时器、中断和IIC,非常简单对吧,其实很多游戏只要用到这三个功能就可以了。
接下来就是逻辑的设计了,首先设计人的状态,人的状态有三种,走,跳起和落下,那么就使用一个变量来当做状态。然后就是跳了,跳的话我这边想法是采用一个变量作为当前所在的高度,然后定义另一个变量作为可以上升的次数,这样没按下一次按键就上升一次同时上升次数就减一,然后落到地面的时候上升次数才恢复。最后就是障碍物了,这里采用C语言的随机数来生成,随机种子选择固定值这样每次开始障碍物的间隔都是固定的,这里想给随机种子也比较简单,有需要的童鞋可以留言,这边给出方案。然后碰到障碍物也比较简单,就判断人落在地面时,人所在的那一列有没有障碍物就可以了。下面给出一个大致的流程图。
图5
在下一篇文章中会给出详细的设计过程以及代码分析,最后一篇会展示最终设计效果并会分享源码。