基于stm32的贪吃蛇小游戏

目录

  • 前言
  • 一、主要功能
  • 二、主要模块
    • 1.贪吃蛇链表
    • 2.ADC
    • 3.定时器中断
  • 三、实际显示效果


前言

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


一、主要功能

基于stm32的贪吃蛇小游戏_第1张图片

上图是整个显示屏的布局以及对应功能。游戏界面是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);  		 
	}		

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

三、实际显示效果

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

基于stm32的贪吃蛇小游戏_第2张图片

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

基于stm32的贪吃蛇小游戏_第3张图片

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

你可能感兴趣的:(小制作,stm32,单片机,游戏)