基于STM32F407的贪吃蛇游戏【正点原子 您所在的位置:网站首页 正点原子stm32f407探索者 基于STM32F407的贪吃蛇游戏【正点原子

基于STM32F407的贪吃蛇游戏【正点原子

2024-07-05 07:45| 来源: 网络整理| 查看: 265

本工程由STM32CuBeMx工具初始化外设生成,之后手动添加LCD驱动相关文件并在主函数中初始化LCD。显示游戏开始界面和设置,确认游戏设置(蛇体颜色、蛇体速度)后,绘制游戏地图,开启相关外设功能。初始化蛇并开始游戏。

相关外设初始化

初始化外设由图可以看到:GPIO、FSMC、TIM7、TIM3和RNG硬件随机数发生器。

此外,LCD初始化相关函数在.c驱动文件中。

游戏相关的函数则放在snack中

按键设计

使用正点原子例程中的驱动文件,仅仅修改了key.h中的按键宏定义。

#define KEY0_PRES 4 #define KEY1_PRES 3 #define KEY2_PRES 2 #define WKUP_PRES 1 绘制图形化界面

在游戏绘图方面,我绘制了开始界面(包括按键提示、蛇体颜色、蛇体速度)、游戏界面(包含地图范围、地图上方的Logo)和结束界面(游戏结束动画、重开提示)。这里截图背景部分的代码:

void Drowgound(void)//背景 { LCD_Clear(WHITE); LCD_Draw_Picture(30,10,64,64,(uint16_t *)gImage);//蛇像 LCD_Draw_Picture(120,10,202,64,(uint16_t *)gImage_logo);//LOGO POINT_COLOR=DARKBLUE; LCD_ShowString(324,50,150,24,24,"Score:");//分数位置 LCD_ShowNum(324+24*3,50,score,2,24);//实时分数 LCD_DrawRectangle(320, 45, 324+24*5, 75);//分数框 POINT_COLOR=RED; LCD_DrawRectangle(30, 80, 450, 760);//游戏边框 LCD_DrawRectangle(31, 81, 449, 759);//游戏边框加粗 } 蛇体信息

选择构建结构体存储贪吃蛇游戏相关信息,采用数组存储贪吃蛇头部以及每节的坐标。通过调用涂圆函数画出贪吃蛇的每一节身体。

/* 初始化蛇 */ void snakeInit(){ snake.length=3; //初始长度为3 snake.snakecolor=snake.snakecolor; snake.snakeX[0]=240; snake.snakeX[1]=240; snake.snakeX[2]=240; snake.snakeY[0]=420; snake.snakeY[1]=430; snake.snakeY[2]=440; snake.headX=snake.snakeX[0]; //记录下头部的位置 snake.headY=snake.snakeY[0]; //记录下头部的位置 snake.dir=1; //设置运动方向 snake.tpdir=1;//设置初始按键方向 snake.life=1; //1:蛇还活着;0:蛇死亡 generateFood(); refresh(); //调用函数显示出蛇和食物的位置 } 食物随机生成

食物的生成我们用到STM32F4上的硬件随机数发生器。它可以产生一个32位的随机数。我们将产生的随机数传递给食物的坐标、颜色(我定义了一个颜色数组,可以生成随机颜色的食物)。这里可以移植正点提供的一个在一定范围内产生随机数的函数以保证生成的食物坐标在我们的地图范围之内。此外还写了一个函数保证食物不会随机生成在蛇体身上。同样通过涂圆函数画出食物。

/* 判断随机产生的食物是否处于蛇体内 */ uint16_t isCover(uint16_t snakeX[],uint16_t snakeY[],uint16_t foodX,uint16_t foodY){ uint8_t i; for(i=0;i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有