上次用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,

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

STM32最小系统板OLED贪吃蛇的更多相关文章

  1. 构建stm32最小系统板注意事项

    由于学习工作的需要自己定制stm32系统板,以下将关键的注意事项进行解释,欢迎交流.(以stm32f103为例) 1.VBAT引脚 在主流的设计中,VBAT与0欧的电阻串联,接至3.3V. 2.OSC ...

  2. 嵌入式单片机之STM32F103C8T6最小系统板电路设计参考

    STM32F103C8T6最小系统板电路设计 一.电源部分 设计了一个XH插座,以便使用3.7V锂电池供电,接入电压不允许超过6V. 二.指示灯部分 电源指示灯可以通过一个短路帽控制亮灭,以达到节电的 ...

  3. stm32最小系统制作(原理图,PCB图,焊接等)

    一直想自己做一个最小系统,这次终于把想法付诸实现.     原理图如下:     PCB图如下: 过了多日,板子终于邮到了,就是下面这个熊样.   焊接了稳压电路,发现稳压电路原理图部分画错,没有接地 ...

  4. xilinx cpld XC95144XL 最小系统板

    手上有几块xilinx的CPLD芯片XC95144,闲着无聊,打样的几块板子回来玩玩. 全部引脚引出,外接4个LED灯和一个Power灯,做成了50mm*50mm的板子,省钱(O(∩_∩)O). 下面 ...

  5. 如何用python制作贪吃蛇以及AI版贪吃蛇

    用python制作普通贪吃蛇 哈喽,大家不知道是上午好还是中午好还是下午好还是晚上好! 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很 ...

  6. STM32入门系列-STM32最小系统介绍

    STM32最小系统组成 单片机最小系统,也就是能够使得单片机正常运行程序,最少需要连接哪些器件.一般来说,STM32最小系统由四部分组成: 电源电路 复位电路 晶振电路 下载电路 STM32单片机由A ...

  7. STM32最小系统设计

    STM32最小系统设计 概述 最近在在设计一块板子的时候发现在设计STM32电路这部分时,有些东西模棱两可.本着科学严谨的态度,本着对工作负责的态度(板子设计坏了都是money!),这里对STM32最 ...

  8. [嵌入式开发入门]4412开发板从零建立Linux最小系统

    本文转自iTOP-4412开发板实战教程书籍 http://www.topeetboard.com iTOP-4412开发板不仅可以运行Android,还可以运行简单的Linux最小文件系统. 最小L ...

  9. Arduino.最小系统面包板搭建

    最早试过用万用板做过最小系统,主要用来烧录芯片 后来为了方便,用面包板也搭了一个最小系统, 但不采用杜邦线,因为飞来飞去的线太乱了 因此就有了这个简洁的版本,先上个成品图 用个烧录器就可以很方便的烧写 ...

随机推荐

  1. kalilinux2020.3的安装与一些坑

    1.下载镜像文件.iso kali官方下载太慢,用一些魔法也是不行,这里推荐用国内的下载源. 阿里云: https://mirrors.aliyun.com/kali-images/?spm=a2c6 ...

  2. 第2天 | 12天搞定Python,运行环境(超详细步骤)

    倘若有人告诉你,他在学习Python编程,却没有安装运行环境,那你赶紧叫他滚,并离他远点,因为他在欺骗你的感情. 没有安装运行环境,程序根本无法跑起来,对错不能知根知底,试问是在学编程,还是在跟空气对 ...

  3. SpringBoot 完整学习笔记免费分享

    从0到进阶,完全系统性的学习笔记 每次我都会反复拿来观看,因为我们总会有遗漏忘记的地方,但是笔记不会. 希望大家能好好利用它,以下是笔记截图! 以上只是其中的一项部分,这份笔记可以说含金量超高,绝对会 ...

  4. 深入理解Logger日志——框架绑定原理

    深入理解Logger日志--框架绑定原理 说到Logger日志的动态绑定,主要归功与Slf4j,在之前的文章也说过,Slf4j是类似于Apache Common-Logging,英文为Simple L ...

  5. dockerfile构建Tomcat镜像

    dockerfile构建Tomcat镜像 一.镜像分层概念 二.制作tomcat镜像 2.1.创建分层目录 [root@node2 ~]# mkdir /app/{web/{nginx,tomcat, ...

  6. 初始python模块

    Python语言中,模块分为三类. 第一类:内置模块,也叫做标准库.此类模块就是python解释器给你提供的,比如我们之前见过的 time模块,os模块.标准库的模块非常多(200多个,每个模块又有很 ...

  7. 实验 5:OpenFlow 协议分析和 OpenDaylight 安装

    一.实验目的 回顾 JDK 安装配置,了解 OpenDaylight 控制的安装,以及 Mininet 如何连接:通过抓包获取 OpenFlow 协议,验证 OpenFlow 协议和版本,了解协议内容 ...

  8. 转一个veth的文章

    这篇写的很好,清晰明白,保存一下https://www.cnblogs.com/bakari/p/10613710.html

  9. spring boot:用redis+lua实现表单接口的幂等性(spring boot 2.2.0)

    一,什么是幂等性? 1,幂等: 幂等操作:不管执行多少次,所产生的影响都和一次执行的影响相同. 幂等函数或幂等方法:可以使用相同的参数重复执行,并能获得相同的结果的函数/方法. 这些函数/方法不用担心 ...

  10. scrapy-下载器中间件 随机切换user_agent

    from faker import Faker class MySpiderMiddleware(object): def __init__(self): self.fake = Faker() de ...