基于STM32战舰V3开发板的贪吃蛇游戏

2024-02-21 05:30

本文主要是介绍基于STM32战舰V3开发板的贪吃蛇游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于STM32战舰V3开发板的贪吃蛇游戏


完整工程资源链接:https://download.csdn.net/download/qq_41676952/11572132

本文是基于STM32战舰V3开发板平台的贪吃蛇游戏,主要用到了开发板上的ATK-HC05蓝牙模块,按键模块,LCD液晶显示屏模块;在程序设计方面主要是对贪吃蛇游戏进行程序设计,深入理解贪吃蛇游戏的设计思想以及开发板与手机蓝牙的信息交互,最终通过软件与硬件的配合实现STM32战舰V3开发板平台的贪吃蛇游戏。

  1. .主要用到的软件资源有:串口3、定时器3
  2. 主要用到的硬件资源有:按键4个、液晶显示屏、ATK-HC05蓝牙模块
  3. 主循环中控制游戏进程与显示屏现实,通过定时器中断服务程序和串口中断服务程序,协调手机与蓝牙模块连接向开发板发送的控制数据与按键检测获取控制数据,结合主循环的游戏进程以按键和手机两种方式实现控制游戏的进行。

最终效果图:
进入界面

游戏界面
操作界面
可利用按键KEY_UP、KEY0、KEY1、 KEY2分别代表上、左、下、右或者手机端控制蛇的走位

基本思路:蛇每吃一个食物蛇身子就增加一格,用WASD控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推
附加功能:包含等级选择、暂停/继续、分数制、关卡的选择,难度的设置等

地图的创建:创建地图,游戏开始前先建立好地图, 将外围一圈设置为城墙。

void show_map(void)
{LCD_Fill(x1,y1,x2,y1+10,BLUE);	LCD_Fill(x1,y1,x1+10,y3,BLUE);		LCD_Fill(x4-10,y2,x4,y4,BLUE);		LCD_Fill(x3,y4-10,x4,y4,BLUE);LCD_Fill(210,700,480,700,WHITE);
}

食物的产生
利用随机函数(rand())产生随机食物的坐标,该坐标的值不能与墙重合,不能与蛇身重合。食物我这里用的是红色方块表示。

void Creat_food(void)
{rand();      //产生一个30到50的随机数if(Food_flag==1){Food_flag=0;Food_x= (rand()%45+1)*10;      //产生一个1到45的随机数Food_y= (rand()%55+1)*10;      //产生一个1到55的随机数}LCD_Fill(Food_x,Food_y,Food_x+10,Food_y+10,RED);
}

构造一条蛇
使用两个unsigned char类型的二维数组。 SNACK_x[100] SNACK_y[100]

SNACK_x[100] SNACK_y[100]
SNACK_x[0]=90,SNACK_y[0]=50;
SNACK_x[1]=80,SNACK_y[1]=50;
SNACK_x[2]=70,SNACK_y[2]=50;
for(i=0;i<3;i++)//初始化蛇身长为SNACK_L=3,初始化蛇的位置:
{
LCD_Fill(SNACK_x[i],SNACK_y[i],SNACK_x[i]+10,SNACK_y[i]+10,RED);
}

利用按键KEY_UP、KEY0、KEY1、 KEY2分别代表上、左、下、右或者手机端控制蛇的走位,以及当蛇每走一步就利用清屏,重新打印蛇身,模拟蛇的移动。

#define LEFT 1
#define RIGHT 2
#define UP 3
#define DOWN 4
for(i=SNACK_L-1;i>0;i--)//记录蛇身
{SNACK_x[i]=SNACK_x[i-1];SNACK_y[i]=SNACK_y[i-1];
}
//计算蛇头位置
if(DIR==RIGHT)		SNACK_x[0]=SNACK_x[0]+10;
if(DIR==LEFT)		SNACK_x[0]=SNACK_x[0]-10;
if(DIR==UP)			SNACK_y[0]=SNACK_y[0]-10;
if(DIR==DOWN)		SNACK_y[0]=SNACK_y[0]+10;

游戏结束
当蛇撞墙, 以及咬到自己的身体时候游戏结束.

if(SNACK_x[0]==0||SNACK_x[0]==470||SNACK_y[0]==0||SNACK_y[0]==590)//是否撞墙{GAME_state=2;//GAME OVERdelay_ms(500);delay_ms(500);LCD_Clear(WHITE); return;}
for(i=1;i<SNACK_L;i++)//判断是否咬到蛇身{if(SNACK_x[0]==SNACK_x[i] && SNACK_y[0]==SNACK_y[i]){GAME_state=2;//GAME OVERdelay_ms(500);delay_ms(500);LCD_Clear(WHITE); }}

完整工程资源链接:https://download.csdn.net/download/qq_41676952/11572132

这篇关于基于STM32战舰V3开发板的贪吃蛇游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730701

相关文章

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

开发板NFS挂载文件目录

文章目录 序NFS1. 安装 NFS 服务器和客户端在服务器上(NFS 服务器端)在客户端上(NFS 客户端) 2. 配置 NFS 服务器创建共享目录编辑 `/etc/exports` 文件启动 NFS 服务 3. 在客户端挂载 NFS 共享创建挂载点挂载 NFS 共享验证挂载 4. 设置开机自动挂载5. 解决权限问题 序 本节主要实现虚拟机(服务器)与开发板(客户端)通过N