IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【STM32单片机】打砖块游戏设计 -> 正文阅读

[嵌入式]【STM32单片机】打砖块游戏设计


一、主要功能

1、TFTLCD显示游戏
2、按键控制板子移动方向
3、得分关卡显示
4、游戏结束,一键重启


二、使用步骤

系统运行后,TFTLCD触摸屏显示游戏界面,通过按键KEY2和KEY0控住左右方向。当小球打到砖块且接住小球时,分数加10。当游戏结束后可按任意键重新回到游戏主界面。

三、硬件资源

1.硬件准备

项目所需要的硬件资源如下:
①STM32F103或STM32F407开发板1个
②TFTLCD液晶模块1个
③USB线1条(用于供电和程序下载)
④杜邦线若干

2.硬件连接

	TFTLCD触摸屏模块-->单片机IO
	  
	  按键模块-->单片机IO
	  KEY_UP-->PA0
	  KEY0-->PE4
	  KEY1-->PE3
	  KEY2-->PE2

四、软件设计

1.软件结构

在这里插入图片描述

2.主要代码

主要代码如下:

//游戏界面行列数
#define START_X		10
#define START_Y		50

//砖块宽
#define ZK_WIDTH	30
//砖块高
#define ZK_HEIGHT	20

//板子宽
#define BZ_WIDTH	100
//板子高
#define BZ_HEIGHT	5

//横着的砖块数
#define COLS	10
//竖着的砖块数
#define ROWS	5

//窗口宽
#define WINDOW_WIDTH	(ZK_WIDTH*COLS)
//窗口高
#define WINDOW_HEIGHT	320

//球半径
#define RADIUS	5

//球移动像素
#define SPACE 	5

//板子移动像素
#define BZ_SPACE 	10


//砖块类型
struct ZK
{
	//左上角点坐标
	int x,y;
	//砖块宽高
	int w,h;
	u16 color;
	
	u8 isLive;//是否存在
};

//板子类型
struct BZ
{
	//左上角点坐标
	int x,y;
	//板子宽高
	int w,h;
	u16 color;
};

//球类型
struct Ball
{
	//圆心坐标
	int x,y;
	//半径
	int radius;
	u16 color;
	
	int xfx,yfx;//移动数据
	//xfx为正往右  为负往左
	//yfx为正往下  为负往上
};

//描述砖块的数组
struct ZK zk[ROWS][COLS];

struct BZ bz;

struct Ball ball;

u8 isContinue=1;

//游戏参数
u8 glevel=1;//游戏关卡
u32 gscore=0;//游戏得分



//随机数种子
u32 gtime_cnt=0;

//不同数字的颜色
u16 gcolor[12]={BLACK,BLUE,BRED,GRED,GBLUE,RED,MAGENTA,GREEN,CYAN,YELLOW,
			  BROWN,BRRED,};


//初始化球
void initBall()
{
	ball.radius=RADIUS;
	ball.x=WINDOW_WIDTH/2+START_X;
	ball.y=WINDOW_HEIGHT-BZ_HEIGHT-RADIUS+START_Y;
	ball.color=BLUE;
	
	ball.xfx=SPACE;
	ball.yfx=-SPACE;
	
}

//板子初始化
void initBz()
{
	bz.w=BZ_WIDTH;
	bz.h=BZ_HEIGHT;
	bz.color=RED;
	bz.x=(WINDOW_WIDTH-BZ_WIDTH)/2+START_X;
	bz.y=WINDOW_HEIGHT-BZ_HEIGHT+START_Y;
}

//初始化砖块
void initZk()
{
	int i,j;
	for(i=0;i<ROWS;i++)
	{
		for(j=0;j<COLS;j++)
		{
			zk[i][j].x=j*ZK_WIDTH+START_X;
			zk[i][j].y=i*ZK_HEIGHT+START_Y;
			
			zk[i][j].w=ZK_WIDTH;
			zk[i][j].h=ZK_HEIGHT;
			
			zk[i][j].color=gcolor[rand()%12];
			zk[i][j].isLive=1;//砖块存活
		}
	}
}

//初始化游戏,所有在开始时候执行一次的
void initGame()
{
	srand(gtime_cnt);//设置随机算子
	//1、做窗口
	LCD_DrawRectangle_Color(START_X,START_Y,START_X+WINDOW_WIDTH,START_Y+WINDOW_HEIGHT,WHITE);
	initZk();
	initBz();
	initBall();
	isContinue=1;
	
	drawAllZk();
	drawBz();
	drawBall();
}

//所有界面显示相关
void showGame()
{
	LCD_DrawRectangle_Color(START_X,START_Y,START_X+WINDOW_WIDTH,START_Y+WINDOW_HEIGHT,WHITE);
	drawBz();
	drawBall();
	LCD_ShowxNum(START_X+32*3,WINDOW_HEIGHT+START_Y+60,gscore,5,32,0);
}

//所有游戏控制相关
void ctolGame()
{
	ball_move();
	check();
	keyCtol();
}


//蜂鸣器提示
void beep_alarm(void)
{
	BEEP=1;
	delay_ms(50);
	BEEP=0;
}

//打砖块游戏设计
void app_demo(void)
{
	u8 key=0;
	
	BEEP_Init();
	KEY_Init();
	LED_Init();
	TIM4_Init(500-1,7200-1);  //定时50ms
//	My_EXTI_Init();
	TFTLCD_Init();
	TP_Init();
START:
	gscore=0;
	LCD_Clear(BACK_COLOR);
	LCD_ShowPicture(0,(tftlcd_data.height-240)/2,320,240,(u8 *)gImage_picture);
	LCD_ShowFontHZ((tftlcd_data.width-32*5)/2,10,"打砖块游戏");
	while(1)
	{
		key=KEY_Scan(0);
		if(key!=0)break;
	}
	LCD_Clear(BACK_COLOR);
	LCD_ShowFontHZ((tftlcd_data.width-32*5)/2,10,"打砖块游戏");
	LCD_ShowFontHZ(START_X,WINDOW_HEIGHT+START_Y+20,"关卡:");
	LCD_ShowNum(START_X+32*3,WINDOW_HEIGHT+START_Y+20,glevel,1,32);
	LCD_ShowFontHZ(START_X,WINDOW_HEIGHT+START_Y+60,"得分:");
	LCD_ShowNum(START_X+32*3,WINDOW_HEIGHT+START_Y+60,gscore,5,32);
	
	initGame();
	
	while(isContinue)
	{
		showGame();
		ctolGame();
	}
	LCD_ShowFontHZ((tftlcd_data.width-32*4)/2,(tftlcd_data.height-29)/2,"游戏结束");
	LCD_ShowString((tftlcd_data.width-8*20)/2,(tftlcd_data.height-29)/2+30,tftlcd_data.width,tftlcd_data.height,16,"Press KEY ReStart...");

	while(1)
	{
		key=KEY_Scan(0);
		if(key!=0)goto START;
	}
}


五、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

作者B站链接:https://space.bilibili.com/444388619
可提供手把手教学服务,资料获取请联系作者QQ:3443792007
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:14:20  更:2022-10-31 12:20:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 18:10:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码