前言
自学完电阻触摸屏之后做的小项目。我采用了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