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



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

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

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

1 UI设计

总体UI设计如下:



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

2 贪吃蛇的移动

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

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

初始状态如图所示:



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



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

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

效果如图所示:



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

3 方向控制

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

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

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

4 食物的生成

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

5 食物的吞噬

我们设食物为-1



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



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

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

效果如图所示:



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

部分代码:

6 死亡判定

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

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

最新文章

  1. leetcode -- Convert Sorted List to Binary Search Tree
  2. TreeBuilder科学的树创建器
  3. GDI+中发生一般性错误(转载)
  4. 基于visual Studio2013解决C语言竞赛题之1028平均值
  5. [ACM] HDU 2063 过山车 (二分图,匈牙利算法)
  6. 关于MATLAB处理大数据坐标文件
  7. git仓库管理笔录
  8. 使用Xmanager通过XDMCP连接远程Centos 7 (摘自xmanager官方博客)
  9. 随笔︱MRO-Microsoft R Open使用心得与相应内容总结
  10. jq切换面板
  11. Slimming Plan
  12. Particle Filters
  13. springboot 工程启动报错之Consider defining a bean of type ‘XXX’ in your configuration.
  14. 解决SQL Server 2008安装时提示:重新启动计算机 失败
  15. SharePoint 2013 文档库“样式”变了
  16. cm5.9.2安装spark启动报错解决办法
  17. 用网线直连的两台PC上的虚拟机通过网线通信的配置
  18. e780. 设置JList中的已选项
  19. IT人士级别的划分
  20. docker搭建gitlab,设置邮件提醒,并运行runner

热门文章

  1. ASP。NET MVC的部分视图和部分模型
  2. SHOI 2014 【概率充电器】
  3. 浅谈Samsung Exynos4412处理器
  4. 2014年 实验五 Internet与网络工具的使用
  5. 多测师讲解pthon_002字符,列表,元组,字段等
  6. javascript in IE
  7. kali linux 换国内源
  8. 基于python实现顺序存储的栈
  9. CentOS 7的安装与部署 02
  10. 【编程学习】浅谈哈希表及用C语言构建哈希表!