STMCU小助手
发布时间:2022-8-21 18:00
|
一. 前言 最近在弄一个桌面小摆件的DIY,在里面弄了一个贪吃蛇的小游戏,在stm32f103平台上实现,通过tft模块进行显示。不加显示部分的话,贪吃蛇游戏与平台无关,可以轻松添加到自己其他平台项目的代码中,也是便于学习,其中蛇数据的存储使用到了链表结构,下面来让我其做一个简单的介绍吧。 C代码可以关注微信公众号 FPGA之旅 回复 stm32贪吃蛇获取(不是工程文件,需要自己根据贪吃蛇的数据进行绘制显示)% A! _. F7 Y$ P& x- W' G3 z9 p 二. 游戏整体介绍: u Z) }- _" h0 X) N7 P7 e3 y 先来看看下图,如果蛇移动的速度为1s的话,就每隔1s调用一下这个函数即可(先要初始化一下蛇的长度和食物的位置以及移动方向),非常方便。 7 y3 w2 {; `# F+ f; | JudgeCrossDeal : 通过方向来移动蛇的移动 j1 V" \' o( \7 P9 Y) n- w EatFoodOrNot : 判断是否吃到食物 Eated : 吃到食物更新蛇的长度& t: [( R; e$ i9 J6 e% j0 ? GenerateFood: 产生食物& r/ r9 f$ o9 F/ t Lcd***** and Draw***: 绘制函数,结和具体的显示器件来学习。$ |! {8 f/ t( ~% E0 R! m 整体过程是 : 先对蛇进行移动,然后判断是否吃到食物,如果吃到了的话,就更新蛇的长度和更新食物。6 W! m |% H4 _' B; z2 l
3 r# f3 w! A) F i4 r 三. 核心函数介绍 1. 初始化SnakeInit()函数 该函数对蛇链表进行了初始化,链表长度为3,也就是蛇的初试长度为3,然后生成食物,也就是食物的位置,以及移动的方向。其他的一些可用可无。0 L. T% g& i# j$ y. [
2. 移动判断JudgeCrossDeal()和Move(uint16 headX , uint16 headY)函数 JudgeCrossDeal()函数主要是对蛇穿墙的判断,如果蛇头要穿墙的话,就设置对应的坐标,不是的话,就蛇头的坐标就对应的加或减一,然后调用Move函数,将上一节蛇身的坐标赋值给下一节蛇身的位置,这样就可以达到蛇移动的目标了。7 T6 {! _2 U; k# P( x- Y6 u3 g 7 D, a1 ^ S, p
3. 销毁SnakeDestory()函数 使用链表还要注意一个问题哦,在退出游戏之后,需要对分配的内存进行收回,这一点不要忘记(虽然不销毁的话也没啥,但是在一个项目里面最好还是要的)。4 X+ R+ t: l# U6 K8 H + v3 L3 M x6 x w: T
核心函数就介绍这么多喽,需要的可以下载文件学习。 " I: `% V; H( }4 X8 A( k 四. 完结 通过两个定时器最终完成贪吃蛇游戏,一个用来检测按键输入,控制蛇的方向,另外一个用来产生1s的时间,移动蛇(我这里使用的TIM3和TIM4)。 $ I0 \8 P8 c d! w9 S + i8 s7 {( ?' M |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版