上次用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. 题解【QTree3】

    题目描述 给出N个点的一棵树(N-1条边),节点有白有黑,初始全为白 有两种操作: 0 i : 改变某点的颜色(原来是黑的变白,原来是白的变黑) 1 v : 询问1到v的路径上的第一个黑点,若无,输出 ...

  2. 如何使用 dotTrace 来诊断 netcore 应用的性能问题

    最近在为 Newbe.Claptrap 做性能升级,因此将过程中使用到的 dotTrace 软件的基础用法介绍给各位开发者. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架. ...

  3. Android设备上的逐像素碰撞检测

    介绍 我正在我的Android设备上开发一款游戏,不用说,因为我想要接触到尽可能多的用户,我做到了 省略了硬件加速.因此,我需要编写能够在大多数设备上运行的最快的代码.我从一个简单的表面视图开始 并使 ...

  4. Centos7安装Java8

    centos7 用yum安装java8  

  5. 每日一题 LeetCode 42.接雨水 【双指针】

    题目链接 https://leetcode-cn.com/problems/trapping-rain-water/ 题目说明 题解 主要方法:双指针 + 正反遍历 解释说明: 正向遍历:先确定池子左 ...

  6. RxJS入门2之Rxjs的安装

    RxJS V6.0+ 安装 RxJS 的 import 路径有以下 5 种: 1.创建 Observable 的方法.types.schedulers 和一些工具方法 import { Observa ...

  7. OpenCV计算机视觉学习(4)——图像平滑处理(均值滤波,高斯滤波,中值滤波,双边滤波)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice &q ...

  8. 利用Turtle绘制各种图形

    首先引入函数库: 第一种: import turtle  import turtle as t 第二种: from turtle import * 1:使用 turtle 库的 turtle.fd() ...

  9. rabbitmq 延时队列

    前言 某个产品 或者订单,有个有效期 过了有效期要取消 方法一 : 写个脚本,用crontab 定时扫描 改变状态 但是最低只能一分钟 ,不适合 方法二 : 用swoole得毫秒定时器,每秒钟去扫描表 ...

  10. 第十三章 nginx代理服务

    一.数据库迁移 1.常见原因 1.数据库要做升级2.数据库服务器到期需要迁移 2.新服务器搭建数据库 [root@db02 ~]# yum install -y mariadb-server 3.启动 ...