这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【转】STM32最小系统板OLED贪吃蛇

共12条 1/2 1 2 跳转至

【转】STM32最小系统板OLED贪吃蛇

助工
2020-11-11 17:21:17     打赏

用STM32F103最小系统板做了一个简单的OLED贪吃蛇小游戏,以下为游戏效果动图:

2195425-20201111135008771-1383340934.gif

主要实现内容包括:贪吃蛇移动、方向控制、食物生成、分数处理、死亡判定。

这次想把自己的制作思路分享给大家,不喜勿喷。

程序源码:https://github.com/ZJ129/OLEDSNAKE

1 UI设计

总体UI设计如下:

2195425-20201111135612986-370563182.png

我们将OLED左侧划分出来用于显示游戏地图,地图中红色部分为边界,蓝色部分为贪吃蛇可活动区域。OLED右侧用于显示分数或者其他参数。

2 贪吃蛇的移动

我们先定义一个二维数组,将数组边界元素值设为-2(墙)

置蛇头为1,蛇身依次+1,蛇尾为蛇的长度值(最大元素),初始化贪吃蛇。

初始状态如图所示:

2195425-20201111135654981-229153587.png

要让贪吃蛇移动,首先遍历二维数组所有元素,元素为正数则+1,得到如下结果:

2195425-20201111135719640-675918154.png

然后对方向进行判断,方向为右时,我们先判断上一个蛇头的右方值是否为0,

如果为0,则表示右方为空区,我们将它设置为1,得到新的蛇头,然后将尾部置为0(去除蛇尾),蛇长不变,完成贪吃蛇的右移。

效果如图所示:

2195425-20201111135741895-1674487110.png

以上实现了贪吃蛇向右的移动,其他方向的移动与之类似

3 方向控制

源程序设置了两个方向变量:控制方向command_dir和运动方向direction。

控制方向从外部获取,运动方向为蛇当前的移动方向。控制方向与运动方向不是反方向时,运动方向才会变为控制方向。

举例:蛇向右运动,控制方向为左时,蛇的运动方向不变。

4 食物的生成

初始化的时候我们会随机在空白(0)处生成一个食物,我们将之设为-1,代码如下:

2195425-20201111135847861-621411773.png

5 食物的吞噬

我们设食物为-1

2195425-20201111135909091-559342923.png

首先遍历二维数组所有元素,元素为正数则+1,得到如下结果:

2195425-20201111135950985-1927085776.png

然后对移动方向进行判断,方向为右时,我们先判断上一个蛇头的右方值是否为-1,

如果为-1,则表示右方为食物,我们将右方设置为1,得到新的蛇头,不处理尾部,蛇长+1,然后使用Food函数生成随机食物,完成贪吃蛇的向右吞噬。

效果如图所示:

2195425-20201111140010291-1975612800.png

以上实现了贪吃蛇向右的吞噬,其他方向的吞噬与之类似

部分代码:

2195425-20201111140024477-398262701.png

6 死亡判定

遍历数组后对正数+1,然后对移动方向进行判断,方向为右时,我们先判断上一个蛇头的右方值是否为-1或0,

如果不是,则表示右方为墙或者蛇身,这时蛇死亡,游戏结束。


via https://www.cnblogs.com/lv129/p/13958364.html




关键词: STM32     贪吃蛇    

高工
2020-11-11 22:11:56     打赏
2楼

学到了


工程师
2020-11-12 17:36:58     打赏
3楼

感谢分享


工程师
2020-11-12 18:25:27     打赏
4楼

学习到了


工程师
2020-11-12 18:30:19     打赏
5楼

感谢分享


工程师
2020-11-12 18:34:21     打赏
6楼

感谢分享


工程师
2020-11-12 18:41:31     打赏
7楼

学习到了


院士
2020-11-13 09:07:29     打赏
8楼

这个好高级啊~~


工程师
2020-11-13 21:22:14     打赏
9楼

厉害了~


工程师
2020-11-13 22:50:39     打赏
10楼

感谢分享


共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]