该游戏的特 {MOD}主要有三点:
① 数码管多位数字同时显示。该开发板上的五个米字管是由三块PCA9557PWR芯片同时控制一片LEDS05441芯片来进行显示的,所以一次只能控制一个米字管,所以很多同学的10~15只用16进制的A~F来表达。所以要“同时”显示两个米字管,只能通过让它们交替显示的频率非常快,快到我们人眼观察不到。刚开始把程序段放在主程序的while(1)循环里,但这样严重干扰了红外遥控的中断信号接收,整个程序的时序是乱的,然后开了个定时器,通过设置定时器的频率来控制米字管,但又碰到了中断优先级问题,于是又折腾了一番,一切解决之后,终于可以同时显示两位数字了,三位、四位也同理。现在回过头感觉这几个问题很简单,但开始遇到问题、分析问题、解决问题花费了较多时间,感觉收获蛮多。
② 游戏本身的设定。刚开始想实现个迷宫,后来发觉迷宫太静态了,拓展空间不大。后来想到了方块扩散,感觉方块扩散实现步数存在着最优路径,于是就想把最优路径找出来,但尝试后发现难度极大且涉及深度学习算法,于是就两者结合设计了“老鼠吃蛋糕”这存在最优路径且拓展性高的游戏。第一关是最基础的,也没什么亮点;第二关也只是加了常见的“转向块”,对游戏难度有一定的提升;第三关则采用了三个分块区域,只有经过一定路径使用“传送块”功能才能进行区域的跳转,为什么要区域跳转呢?因为我在定时器里设计了一个随机函数,定时器的频率决定了蛋糕在三个区域跳转的频率,然后随机函数则是进一步决定蛋糕跳转频率以及跳转区域,这游戏玩法想了挺久才想到的,自身感觉这样的游戏设定蛮好的。
③ 模块的集成。该游戏涉及了课上实验的较多模块,如触摸屏、显示屏、红外遥控、串口通信、数码管、定时器、蜂鸣器、LED灯,虽然这些模块并不那么难,但是要把各个模块结合起来用并应用在游戏当中就不那么容易了,之间有严格的逻辑关系以及单独情况的处理,就像上面说的中断优先级问题一样,其他模块也存在相互干扰的情况,比如中断里面不能再嵌套中断服务函数以及延时函数,否则严重影响程序的时序,严重可能使板子进入自锁状态。