基于正点原子STM32F103ZET6精英板(战舰板)的贪吃蛇小游戏(附源码)

编程入门 行业动态 更新时间:2024-10-08 10:57:51

基于正点原子STM32F103ZET6精英板(战舰板)的贪吃蛇<a href=https://www.elefans.com/category/jswz/34/1769974.html style=小游戏(附源码)"/>

基于正点原子STM32F103ZET6精英板(战舰板)的贪吃蛇小游戏(附源码)

基于正点原子STM32F103ZET6精英板(战舰板)的贪吃蛇小游戏

简介:这个贪吃蛇小游戏是我嵌入式实训自选的课题设计,本人也是初学,所以做出来的东西也不算复杂,话不多说,先看看成品(由于放不进去视频,所以放的截图)



所以,本设计大概实现了传统贪吃蛇游戏的功能:
1、用的显示屏是精英板自带的4.3寸(480800)LCD屏,所以为了维持正方形,分成8048等分;
2、预设小蛇初始长度、速度、方向,以及小蛇的长度上限值;
3、每吃到食物小蛇长度+1,每吃到两个食物小蛇速度+1;
4、当小蛇头部坐标与屏幕边界或自身重合则死亡,或者长度达到上限则游戏结束。
游戏规则可以根据个人喜好进行更改。

主函数部分代码

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "beep.h"
//内部驱动
#include "rand.h"
//外围电路
#include "led.h"
#include "key.h"
#include "lcd_4_3.h"
//用户算法
#include "my_task.h"#define GAME_WIDTH	480	//设置屏幕分辨率为800*480,为了维持正方形,分成80*48等分
#define GAME_HEIGHT	800
#define GAME_XPART  48
#define GAME_YPART  80enum sta //枚举状态
{ OFF,//0ON	//1
} station;enum dir //枚举贪吃蛇方向
{UP,		//上DOWN,	//下LEFT,	//左RIGHT	//右
}direction;typedef struct  //贪吃蛇重要参数集
{										    u16 speed;		//速度u16 length;     //长度u16 energybuf;  //能量缓存u16 width;      //蛇宽	u16 life;       //生命数	u16 firstx;     //蛇头坐标xu16 firsty;     //蛇头坐标yu16 lastx;      //蛇尾坐标xu16 lasty;      //蛇尾坐标yu16 color;      //蛇颜色	
}snakes; 
snakes snake;//此时snake符合snakes结构体中得所有参数void Snake_Init(snakes * snake)//贪吃蛇参数初始化
{snake->speed=5;snake->length=10;snake->energybuf=0;snake->width=1;snake->life=3;snake->firstx=4;snake->firsty=5;snake->lastx=0;snake->lasty=0;snake->color=BLUE;
}typedef struct  //食物重要参数集
{										    u16  energy ;//食物能量u16  x ;	//食物坐标xu16  y ;	//食物坐标y
}apples; 
apples apple;void Apple_Init(apples * apple)//食物参数初始化
{apple->energy=1;
//	apple->x=24;	//坐标由随机数计算出来
//	apple->y=40;
}typedef struct  //事件重要参数集
{										    u16  Process ;//是否游戏暂停u16  GameSta ;//是否游戏结束u16  AppleSta;//食物状态 u16  Direction;//蛇前进方向
}events; 
events event;void Event_Init(events * event)//事件参数初始化
{event->Process=ON;//没有暂停event->GameSta=ON;//没有结束event->AppleSta=ON;event->Direction=DOWN;//初始方向向下
}
typedef struct  //贪吃蛇坐标参数
{u16 x;u16 y;
}axiss;
axiss snake_axis[100];  //设蛇身最大长度可以达到100void Display(u16 x,u16 y,u16 color)//按照80*48的坐标映射到800*480的屏幕上
{LCD_Fill(GAME_WIDTH/GAME_XPART*x,GAME_HEIGHT/GAME_YPART*y,GAME_WIDTH/GAME_XPART*(x+1),GAME_HEIGHT/GAME_YPART*(y+1),color);
}void DisplayInit(void) //蛇身初始化,默认在该位置,并蛇头向下
{u16 i;for(i=0;i<5;i++)//将初始坐标存入蛇身坐标内{snake_axis[i].x=i;snake_axis[i].y=0;}for(i=5;i<10;i++){snake_axis[i].x=4;snake_axis[i].y=i-4;}LCD_Clear(WHITE);for(i=0;i<10;i++){Display(snake_axis[i].x,snake_axis[i].y,BLUE);//按照初始坐标打印出蛇身}
}void GameOver(void)//游戏结束函数,打印"GAME OVER",蜂鸣器响,挂起核心数据处理函数
{LCD_ShowString(180,388,200,24,24,"GAME OVER !"); BEEP=1;  delay_ms(500);BEEP=0;vTaskSuspend(EVENTTask_Handler);//挂起事件任务函数,核心数据处理函数event_task
}

源码:

更多推荐

基于正点原子STM32F103ZET6精英板(战舰板)的贪吃蛇小游戏(附源码)

本文发布于:2024-03-07 21:44:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718982.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:小游戏   战舰   原子   源码   贪吃蛇

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!