基于STM32的贪吃蛇小游戏
初学32一个月,学的并不多,便想着做一个贪吃蛇小游戏,因为有51单片机做贪吃蛇的经验,所以实现出来并不困难。
作品简介
游戏面版将在4.3寸480*800)液晶上显示,初始为一个长度为二的小蛇,通过吃果子慢慢变大,当长度到长度时,赢得游戏。碰壁及碰到自己都会死亡,结束游戏
在游戏开始之前可以通过点击触摸屏中央的start字样开始游戏。游戏结束会出现胜利或死亡界面,并显示你的得分,死亡后点击again可再次游戏。
控制模式是通过点击触摸屏上的上下左右来控制小蛇的方向。
游戏过程中,可以看到屏幕右下的分数显示。还可以通过点击key0按键调节小蛇速度。
元器件:
1.STM32F1开发板;
2.TFTLCD4.3寸电容触摸屏;
软件:Keil uVision5
设计思路:
关于小蛇的移动与显示:可以事先设定一个变量snake_len用来存放小蛇的长度,在定义两个数组,分别用来存放小蛇的各点x,y坐标,定义一个变量存放小蛇的运动方向。
每次小蛇的移动,通过运用定时器4来调节小蛇速度以及执行移动函数,移动函数的思想就是当每次要移动时都从蛇头坐标开始,依次赋予后面的坐标,然后蛇头坐标就按照小蛇的运动方向进行改变。
每次运动都进行是否成长,是否死亡或胜利的判定。
我将改变小蛇运动方向的方法就是点击触摸屏上的上下左右的图标,运用定时器3不停的判定是否点击触摸屏的某个位置。如果判断成功就会执行相应的动作。
我加了一个游戏过程中改变小蛇的运动速度,我想到的是运用定时器5,不停的判定key0按键是否被按下,如果按下就加快或剪短移动函数执行时间的间隔。
关于实时的分数显示,就是在每次成长函数触发后刷新,要先事先清除之前分数,避免数字重叠。
总结:
小蛇在吃完果子的移动的过程出现尾部闪烁,可以通过添加短时间的delay来消除,效果还不错。
游戏结束后,我加了一个返回重新开始的功能,我用的goto语句,确实不是很方便,极其容易出错,当时没用想到可以再在外面嵌套一个循环。
开始界面嫌麻烦,做的十分简陋,可以在加点东西。
代码
#include “led.h”
#include “delay.h”
#include “key.h”
#include “sys.h”
#include “lcd.h”
#include “usart.h”
#include “24cxx.h”
#include “touch.h”
不知道为什么粘贴不了,我把代码用压缩包发出来。