基于stm32的贪吃蛇小游戏


前言

自学完电阻触摸屏之后做的小项目。我采用了C语言链表的方式来形成贪吃蛇。利用相关封装好的函数,将其移植在了野火指南者开发板上,使其能在3.2寸触摸屏上显示,并且添加了暂停/继续的触摸按键以及简单的游戏结束显示,大体再现了贪吃蛇这款小游戏。


一、主要功能

上图是整个显示屏的布局以及对应功能。游戏界面是240X240像素的。为了显示的效果,贪吃蛇以及食物的方格都是6X6像素的。所以在程序中我们将游戏界面视为40X40的坐标,在这个坐标系中规定蛇与食物方格的位置,在最终显示的时候将坐标乘以6倍来显示。

二、主要模块

1.贪吃蛇链表

这里主要是参考了别人的算法

附上学习链接

2.ADC

这里我使用的是ADC1的通道13,即PC3。在本项目中ADC主要用来产生食物的位置坐标(x, y),即产生两个随机数。选择开发板上带有ADC采集的悬空引脚,在正常情况下由于环境噪声的普遍存在,ADC采集到的数据是不断在变化的,利用这一点即可产生随机数。代码如下:

food=(snake*)malloc(sizeof(snake));
	srand(ADC_ConvertedValue);//随着ADC变化,产生不一样种子
	food->x = rand()%39;
	food->y = rand()%39;

3.定时器中断

在4ms定时器中断中检测按键状态

if ( TIM_GetITStatus( BASIC_TIM, TIM_IT_Update) != RESET ) 
	{	
		XPT2046_TouchEvenHandler();  //触摸检测
		TIM_ClearITPendingBit(BASIC_TIM, TIM_FLAG_Update);  		 
	}		

其余部分参考的是野火的触摸画板例程,不得不说其中对结构体的运用有点面向对象编程的感觉了

三、实际显示效果

暂停键可以控制游戏的暂停或者是继续。贪吃蛇吃到食物或者则长度回加长一个格子并且分数加一。如下图:

贪吃蛇超出界面边界或者咬到自己就会在界面显示“Game over”的字样,此时点击屏幕的任意地方都可以重新开始游戏,如下图:

附上代码链接
链接:https://pan.baidu.com/s/1yfCQjamnuqRmKElNsAyvLA
提取码:hocd

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值