【单片机开发】基于stm32的掌上游戏机设计 (俄罗斯方块)

2023-12-17 00:59

本文主要是介绍【单片机开发】基于stm32的掌上游戏机设计 (俄罗斯方块),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目相关链接:
1.STM32掌机:音乐播放器
2.STM32掌机:贪吃蛇
3.STM32掌机:俄罗斯方块

(一)效果展示

思想上也就是创造一个二维矩阵,对LCD与矩阵同时操作,通过矩阵判断状态,这里将定时器3的值作为随机数来源,随机性良好。
本人技术有限,基本思想还是从网上大神那里学来的,反正我自己写不外来。
在这里插入图片描述

(二)软件设计

#include "BOX.h"
#include "sys.h"
#include "lcd.h"
#include "gui.h"
#include "adc.h"
#include "stdlib.h"
#include "delay.h"/***********************************************************
说明:以下函数用于基础图形绘制
**********************************************************/void Draw_realbox1(u16 x,u16 y)
{u8 i,n;for(i=1;i<=3;i++){for(n=1;n<=3;n++){GUI_DrawPoint((x+i),(y+n),GRAY);	}	}for(i=0;i<=4;i++){GUI_DrawPoint((x+i),y,BLACK	);GUI_DrawPoint((x+i),(y+4),BLACK	);		GUI_DrawPoint(x,(y+i),BLACK	);		GUI_DrawPoint((x+4),(y+i),BLACK	);				}	
}/*************************************************
函数名 Deal_realbox
功能:删除一个俄罗斯方块;
入口参数:xy坐标
返回值:无
*************************************************/void Deal_realbox1(u16 x,u16 y)
{u8 i,n;for(i=0;i<=4;i++){for(n=0;n<=4;n++){GUI_DrawPoint((x+i),(y+n),WHITE);	}	}
}void Draw_tuxing1(u16 x,u16 y,u8 what)
{switch (what){case 1:{Draw_realbox1(x,y);Draw_realbox1(x+5,y);Draw_realbox1(x,y+5);Draw_realbox1(x+5,y+5);}break;case 2:{Draw_realbox1(x,y);Draw_realbox1(x+5,y);Draw_realbox1(x+10,y);Draw_realbox1(x+15,y);}break;case 3:{Draw_realbox1(x,y);Draw_realbox1(x,y+5);Draw_realbox1(x,y+10);Draw_realbox1(x,y+15);}break;case 4:{Draw_realbox1(x+5,y);Draw_realbox1(x,y+5);Draw_realbox1(x+5,y+5);Draw_realbox1(x+10,y+5);}break;case 5:{Draw_realbox1(x+5,y+5);Draw_realbox1(x,y);Draw_realbox1(x,y+5);Draw_realbox1(x,y+10);}break;case 6:{Draw_realbox1(x,y+5);Draw_realbox1(x+5,y);Draw_realbox1(x+5,y+5);Draw_realbox1(x+5,y+10);}break;case 7:{Draw_realbox1(x+5,y+5);Draw_realbox1(x,y);Draw_realbox1(x+5,y);Draw_realbox1(x+10,y);}break;case 8:{Draw_realbox1(x,y);Draw_realbox1(x,y+5);Draw_realbox1(x,y+10);Draw_realbox1(x+5,y+10);}break;case 9:{Draw_realbox1(x,y);Draw_realbox1(x,y+5);Draw_realbox1(x+5,y);Draw_realbox1(x+10,y);}break;case 10:{Draw_realbox1(x,y);Draw_realbox1(x+5,y);Draw_realbox1(x+5,y+5);Draw_realbox1(x+5,y+10);}break;case 11:{Draw_realbox1(x,y+5);Draw_realbox1(x+5,y+5);Draw_realbox1(x+10,y+5);Draw_realbox1(x+10,y);}break;case 12:{Draw_realbox1(x+5,y);Draw_realbox1(x+5,y+5);Draw_realbox1(x+5,y+10);Draw_realbox1(x,y+10);}break;case 13:{Draw_realbox1(x,y);Draw_realbox1(x+5,y);Draw_realbox1(x+10,y);Draw_realbox1(x+10,y+5);}break;case 14:{Draw_realbox1(x,y);Draw_realbox1(x+5,y);Draw_realbox1(x,y+5);Draw_realbox1(x,y+10);}break;case 15:{Draw_realbox1(x,y);Draw_realbox1(x,y+5);Draw_realbox1(x+5,y+5);Draw_realbox1(x+10,y+5);}break;case 16:{Draw_realbox1(x+5,y);Draw_realbox1(x,y+5);Draw_realbox1(x+5,y+5);Draw_realbox1(x,y+10);}break;case 17:{Draw_realbox1(x,y);Draw_realbox1(x+5,y);Draw_realbox1(x+5,y+5);Draw_realbox1(x+10,y+5);}break;case 18:{Draw_realbox1(x,y);Draw_realbox1(x,y+5);Draw_realbox1(x+5,y+5);Draw_realbox1(x+5,y+10);}break;case 19:{Draw_realbox1(x,y+5);Draw_realbox1(x+5,y+5);Draw_realbox1(x+5,y);Draw_realbox1(x+10,y);}break;}}void Deal_tuxing1(u16 x,u16 y,u8 what)
{switch (what){case 1:{Deal_realbox1(x,y);Deal_realbox1(x+5,y);Deal_realbox1(x,y+5);Deal_realbox1(x+5,y+5);}break;case 2:{Deal_realbox1(x,y);Deal_realbox1(x+5,y);Deal_realbox1(x+10,y);Deal_realbox1(x+15,y);}break;case 3:{Deal_realbox1(x,y);Deal_realbox1(x,y+5);Deal_realbox1(x,y+10);Deal_realbox1(x,y+15);}break;case 4:{Deal_realbox1(x+5,y);Deal_realbox1(x,y+5);Deal_realbox1(x+5,y+5);Deal_realbox1(x+10,y+5);}break;case 5:{Deal_realbox1(x+5,y+5);Deal_realbox1(x,y);Deal_realbox1(x,y+5);Deal_realbox1(x,y+10);}break;case 6:{Deal_realbox1(x,y+5);Deal_realbox1(x+5,y);Deal_realbox1(x+5,y+5);Deal_realbox1(x+5,y+10);}break;case 7:{Deal_realbox1(x+5,y+5);Deal_realbox1(x,y);Deal_realbox1(x+5,y);Deal_realbox1(x+10,y);}break;case 8:{Deal_realbox1(x,y);Deal_realbox1(x,y+5);Deal_realbox1(x,y+10);Deal_realbox1(x+5,y+10);}break;case 9:{Deal_realbox1(x,y);Deal_realbox1(x,y+5);Deal_realbox1(x+5,y);Deal_realbox1(x+10,y);}break;case 10:{Deal_realbox1(x,y);Deal_realbox1(x+5,y);Deal_realbox1(x+5,y+5);Deal_realbox1(x+5,y+10);}break;case 11:{Deal_realbox1(x,y+5);Deal_realbox1(x+5,y+5);Deal_realbox1(x+10,y+5);Deal_realbox1(x+10,y);}break;case 12:{Deal_realbox1(x+5,y);Deal_realbox1(x+5,y+5);Deal_realbox1(x+5,y+10);Deal_realbox1(x,y+10);}break;case 13:{Deal_realbox1(x,y);Deal_realbox1(x+5,y);Deal_realbox1(x+10,y);Deal_realbox1(x+10,y+5);}break;case 14:{Deal_realbox1(x,y);Deal_realbox1(x+5,y);Deal_realbox1(x,y+5);Deal_realbox1(x,y+10);}break;case 15:{Deal_realbox1(x,y);Deal_realbox1(x,y+5);Deal_realbox1(x+5,y+5);Deal_realbox1(x+10,y+5);}break;case 16:{Deal_realbox1(x+5,y);Deal_realbox1(x,y+5);Deal_realbox1(x+5,y+5);Deal_realbox1(x,y+10);}break;case 17:{Deal_realbox1(x,y);Deal_realbox1(x+5,y);Deal_realbox1(x+5,y+5);Deal_realbox1(x+10,y+5);}break;case 18:{Deal_realbox1(x,y);Deal_realbox1(x,y+5);Deal_realbox1(x+5,y+5);Deal_realbox1(x+5,y+10);}break;case 19:{Deal_realbox1(x,y+5);Deal_realbox1(x+5,y+5);Deal_realbox1(x+5,y);Deal_realbox1(x+10,y);}break;}}/*************************************************
函数名 Down_mov
功能:
入口参数:xy坐标
返回值:无
*************************************************/void Down_tuxing_move(u16 x,u16 y,u8 what)
{Deal_tuxing1(x,y,what);Draw_tuxing1(x,y+5,what);
}/*************************************************
函数名 Left_mov
功能:
入口参数:xy坐标
返回值:无
*************************************************/void Left_tuxing_move(u16 x,u16 y,u8 what)
{Deal_tuxing1(x,y,what);Draw_tuxing1(x-5,y,what);
}/*************************************************
函数名 Right_mov
功能:
入口参数:xy坐标
返回值:无
*************************************************/void Right_tuxing_move(u16 x,u16 y,u8 what)
{Deal_tuxing1(x,y,what);Draw_tuxing1(x+5,y,what);
}/***************************************************************
说明下列函数用于对状态二维数组的处理
*******************************************************************/u8 what,speed=80,i=0,game2=1,leave=1,suijishu[5]={1,2,3,4,5},RAND=1;
u16 x=60,y=0,fengshu=0;
u8 shuaxing=0;
u8 zhuangtai[20][20]=
{{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********0**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********1**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********2**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********3**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********4**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********5**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********6**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********7**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********8**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********9**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********10**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********11**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********12**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********13**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********14**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********15**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********16**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********17**********//{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//**********18**********//{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//**********19**********//
};/*************************************************
功能:更新一个状态到数组
*************************************************/
void Draw_a_zhuangtai(u16 x,u16 y)
{zhuangtai[y/5][x/5]=1;
}/*************************************************
功能:删除一个状态到数组
*************************************************/
void Deal_a_zhuangtai(u16 x,u16 y)
{zhuangtai[y/5][x/5]=0;
}/*************************************************
功能:画对应的状态图形
*************************************************/
void Draw_zhuangtai_tuxing(u16 x,u16 y,u8 what)
{switch (what){case 1:{Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x+5,y+5);}break;case 2:{Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x+10,y);Draw_a_zhuangtai(x+15,y);}break;case 3:{Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x,y+10);Draw_a_zhuangtai(x,y+15);}break;case 4:{Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x+5,y+5);}break;case 5:{Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x,y+10);}break;case 6:{Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x+5,y+10);}break;case 7:{Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x+10,y);}break;case 8:{Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x,y+10);Draw_a_zhuangtai(x+5,y+10);}break;case 9:{Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x+10,y);}break;case 10:{Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x+5,y+10);}break;case 11:{Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x+10,y+5);Draw_a_zhuangtai(x+10,y);}break;case 12:{Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x+5,y+10);Draw_a_zhuangtai(x,y+10);}break;case 13:{Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x+10,y);Draw_a_zhuangtai(x+10,y+5);}break;case 14:{Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x,y+10);}break;case 15:{Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x+5,y+5);}break;case 16:{Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x,y+10);}break;case 17:{Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x+10,y+5);}break;case 18:{Draw_a_zhuangtai(x,y);Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x+5,y+10);}break;case 19:{Draw_a_zhuangtai(x,y+5);Draw_a_zhuangtai(x+5,y+5);Draw_a_zhuangtai(x+5,y);Draw_a_zhuangtai(x+10,y);}break;}}/*************************************************
功能:删除对应的状态图形
*************************************************/
void Deal_zhuangtai_tuxing(u16 x,u16 y,u8 what)
{switch (what){case 1:{Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x+5,y+5);}break;case 2:{Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x+10,y);Deal_a_zhuangtai(x+15,y);}break;case 3:{Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x,y+10);Deal_a_zhuangtai(x,y+15);}break;case 4:{Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x+10,y+5);}break;case 5:{Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x,y+10);}break;case 6:{Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x+5,y+10);}break;case 7:{Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x+10,y);}break;case 8:{Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x,y+10);Deal_a_zhuangtai(x+5,y+10);}break;case 9:{Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x+10,y);}break;case 10:{Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x+5,y+10);}break;case 11:{Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x+10,y);}break;case 12:{Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x+5,y+10);Deal_a_zhuangtai(x,y+10);}break;case 13:{Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x+10,y+5);}break;case 14:{Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x,y+10);}break;case 15:{Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x+10,y+5);}break;case 16:{Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x,y+10);}break;case 17:{Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x+10,y+5);}break;case 18:{Deal_a_zhuangtai(x,y);Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x+5,y+10);}break;case 19:{Deal_a_zhuangtai(x,y+5);Deal_a_zhuangtai(x+5,y+5);Deal_a_zhuangtai(x+5,y);Deal_a_zhuangtai(x+10,y);}break;}}/*************************************************
功能:向下移动状态
*************************************************/void Down_zhuangtai_move(u16 x,u16 y,u16 what)
{Deal_zhuangtai_tuxing(x,y,what);Draw_zhuangtai_tuxing(x,y+5,what);
}/*************************************************
功能:向左移动状态
*************************************************/
void Left_zhuangtai_move(u16 x,u16 y,u8 what)
{Deal_zhuangtai_tuxing(x,y,what);Draw_zhuangtai_tuxing(x-5,y,what);
}/*************************************************
功能:向右移动状态
*************************************************/
void Right_zhuangtai_move(u16 x,u16 y,u8 what)
{Deal_zhuangtai_tuxing(x,y,what);Draw_zhuangtai_tuxing(x+5,y,what);
}void Down(u16 x,u16 y,u8 what)
{Down_zhuangtai_move(x,y,what);Down_tuxing_move(x,y,what);			
}void Left(u16 x,u16 y,u8 what)
{Left_zhuangtai_move(x,y,what);Left_tuxing_move(x,y,what);			
}void Right(u16 x,u16 y,u8 what)
{Right_zhuangtai_move(x,y,what);Right_tuxing_move(x,y,what);			
}void Deal(u16 x,u16 y,u8 what)
{Deal_tuxing1(x,y,what);Deal_zhuangtai_tuxing(x,y,what);			
}void Draw(u16 x,u16 y,u8 what)
{Draw_tuxing1(x,y,what);Draw_zhuangtai_tuxing(x,y,what);			
}void change()
{switch(what){case 1:break;case 2:Deal(x,y,2);Draw(x,y,3);what=3;break;case 3:Deal(x,y,3);Draw(x,y,2);what=2;break;case 4:Deal(x,y,4);Draw(x,y,5);what=5;break;case 5:Deal(x,y,5);Draw(x,y,7);what=7;break;case 6:Deal(x,y,6);Draw(x,y,4);what=4;break;case 7:Deal(x,y,7);Draw(x,y,6);what=6;break;case 8:Deal(x,y,8);Draw(x,y,9);what=9;break;case 9:Deal(x,y,9);Draw(x,y,10);what=10;break;case 10:Deal(x,y,10);Draw(x,y,11);what=11;break;case 11:Deal(x,y,11);Draw(x,y,8);what=8;break;case 12:Deal(x,y,12);Draw(x,y,15);what=15;break;case 13:Deal(x,y,13);Draw(x,y,12);what=12;break;case 14:Deal(x,y,14);Draw(x,y,13);what=13;break;case 15:Deal(x,y,15);Draw(x,y,14);what=14;break;case 16:Deal(x,y,16);Draw(x,y,17);what=17;break;case 17:Deal(x,y,17);Draw(x,y,16);what=16;break;case 18:Deal(x,y,18);Draw(x,y,19);what=19;break;case 19:Deal(x,y,19);Draw(x,y,18);what=18;break;}}void change1()
{switch(what){case 1:break;case 2:Deal_zhuangtai_tuxing(x,y,2);Draw_zhuangtai_tuxing(x,y,3);break;case 3:Deal_zhuangtai_tuxing(x,y,3);Draw_zhuangtai_tuxing(x,y,2);break;case 4:Deal_zhuangtai_tuxing(x,y,4);Draw_zhuangtai_tuxing(x,y,5);break;case 5:Deal_zhuangtai_tuxing(x,y,5);Draw_zhuangtai_tuxing(x,y,7);break;case 6:Deal_zhuangtai_tuxing(x,y,6);Draw_zhuangtai_tuxing(x,y,4);break;case 7:Deal_zhuangtai_tuxing(x,y,7);Draw_zhuangtai_tuxing(x,y,6);break;case 8:Deal_zhuangtai_tuxing(x,y,8);Draw_zhuangtai_tuxing(x,y,9);break;case 9:Deal_zhuangtai_tuxing(x,y,9);Draw_zhuangtai_tuxing(x,y,10);break;case 10:Deal_zhuangtai_tuxing(x,y,10);Draw_zhuangtai_tuxing(x,y,11);break;case 11:Deal_zhuangtai_tuxing(x,y,11);Draw_zhuangtai_tuxing(x,y,8);break;case 12:Deal_zhuangtai_tuxing(x,y,12);Draw_zhuangtai_tuxing(x,y,15);break;case 13:Deal_zhuangtai_tuxing(x,y,13);Draw_zhuangtai_tuxing(x,y,12);break;case 14:Deal_zhuangtai_tuxing(x,y,14);Draw_zhuangtai_tuxing(x,y,13);break;case 15:Deal_zhuangtai_tuxing(x,y,15);Draw_zhuangtai_tuxing(x,y,14);break;case 16:Deal_zhuangtai_tuxing(x,y,16);Draw_zhuangtai_tuxing(x,y,17);break;case 17:Deal_zhuangtai_tuxing(x,y,17);Draw_zhuangtai_tuxing(x,y,16);break;case 18:Deal_zhuangtai_tuxing(x,y,18);Draw_zhuangtai_tuxing(x,y,19);break;case 19:Deal_zhuangtai_tuxing(x,y,19);Draw_zhuangtai_tuxing(x,y,18);break;}}int panduan1(u16 x,u16 y,u8 what,u8 fangxiang){u16 sum1=0,sum2=0;u8 i,n;u8 sbuff[20][20];x=x/5+1;y=y/5;for(i=0;i<20;i++){for(n=0;n<20;n++){sbuff[i][n]=zhuangtai[i][n];sum1=sum1+zhuangtai[i][n];	}}switch(fangxiang){case 1:Left_zhuangtai_move((x-1)*5,5*y,what);break;case 2:Down_zhuangtai_move((x-1)*5,5*y,what);break;case 3:Right_zhuangtai_move((x-1)*5,5*y,what);break;case 4:change1();break;}for(i=0;i<20;i++){for(n=0;n<20;n++){sum2=sum2+zhuangtai[i][n];	zhuangtai[i][n]=sbuff[i][n];			}}return !(sum1==sum2);
}void lie_move(u16 y)
{u8 i;y=y/5;for(i=1;i<19;i++){if(zhuangtai[y][i]==1){zhuangtai[y][i]=zhuangtai[y+1][i];zhuangtai[y+1][i]=1;Deal_realbox1((i-1)*5,y*5);Draw_realbox1((i-1)*5,(y+1)*5);}else if(zhuangtai[y][i]==0){zhuangtai[y][i]=zhuangtai[y+1][i];zhuangtai[y+1][i]=0;Deal_realbox1((i-1)*5,y*5);Deal_realbox1((i-1)*5,(y+1)*5);}}
}void Deal_lie(u16 y)
{u8 i;y=y/5;for(i=1;i<19;i++){zhuangtai[y][i]=0;Deal_realbox1((i-1)*5,y*5);}
}void xiaochu()
{u8 n;for(n=17;n>0;n--){if(n>=17){n=17;}if((zhuangtai[n+1][1]&&zhuangtai[n+1][2]&&zhuangtai[n+1][3]&&zhuangtai[n+1][4]&&zhuangtai[n+1][5]&&zhuangtai[n+1][6]&&zhuangtai[n+1][7]&&zhuangtai[n+1][8]&&zhuangtai[n+1][9]&&zhuangtai[n+1][10]&&zhuangtai[n+1][11]&&zhuangtai[n+1][12]&&zhuangtai[n+1][13]&&zhuangtai[n+1][14]&&zhuangtai[n+1][15]&&zhuangtai[n+1][16]&&zhuangtai[n+1][17]&&zhuangtai[n+1][18]) &&!(zhuangtai[n][1]&&zhuangtai[n][2]&&zhuangtai[n][3]&&zhuangtai[n][4]&&zhuangtai[n][5]&&zhuangtai[n][6]&&zhuangtai[n][7]&&zhuangtai[n][8]&&zhuangtai[n][9]&&zhuangtai[n][10]&&zhuangtai[n][11]&&zhuangtai[n][12]&&zhuangtai[n][13]&&zhuangtai[n][14]&&zhuangtai[n][15]&&zhuangtai[n][16]&&zhuangtai[n][17]&&zhuangtai[n][18]) ){lie_move(5*n);n=n+2;}if((!zhuangtai[n][1]&&!zhuangtai[n][2]&&!zhuangtai[n][3]&&!zhuangtai[n][4]&&!zhuangtai[n][5]&&!zhuangtai[n][6]&&!zhuangtai[n][7]&&!zhuangtai[n][8]&&!zhuangtai[n][9]&&!zhuangtai[n][10]&&!zhuangtai[n][11]&&!zhuangtai[n][12]&&!zhuangtai[n][13]&&!zhuangtai[n][14]&&!zhuangtai[n][15]&&!zhuangtai[n][16]&&!zhuangtai[n][17]&&!zhuangtai[n][18])){for(n=0;n<19;n++){if((zhuangtai[n][1]&&zhuangtai[n][2]&&zhuangtai[n][3]&&zhuangtai[n][4]&&zhuangtai[n][5]&&zhuangtai[n][6]&&zhuangtai[n][7]&&zhuangtai[n][8]&&zhuangtai[n][9]&&zhuangtai[n][10]&&zhuangtai[n][11]&&zhuangtai[n][12]&&zhuangtai[n][13]&&zhuangtai[n][14]&&zhuangtai[n][15]&&zhuangtai[n][16]&&zhuangtai[n][17]&&zhuangtai[n][18])){Deal_lie(n*5);fengshu++;if(fengshu%10==0){speed=speed+10;leave++;				}}	}break;		}}
}
/********************************
说明:该函数用于游戏界面显示
******************************/
void boxshow(void)
{LCD_Clear(WHITE);for(i=0;i<=95;i=i+5) {Draw_realbox1(0,i);}for(i=0;i<=95;i=i+5) {Draw_realbox1(95,i);}for(i=0;i<=95;i=i+5) {Draw_realbox1(i,95);}Show_Str(0, 101, BLACK,WHITE,"SCORE:",16,1);LCD_ShowNum(90,101,0,1,16);}/*********************************
说明:该函数用于游戏结束
以及结束显示
*********************************/void boxgameover()
{LCD_Clear(WHITE);Show_Str(0, 0, BLACK,WHITE,"game over",16,1);delay_ms(1000);LCD_Clear(WHITE);Show_Str(0, 32, BLACK,WHITE,"SCORE:",16,1);LCD_ShowNum(90,32,fengshu,1,16);while(1);
}void begin()
{what=suijishu[4];suijishu[4]=suijishu[3];suijishu[3]=suijishu[2];suijishu[2]=suijishu[1];suijishu[1]=suijishu[0];srand(RAND*TIM_GetCounter(TIM3)*TIM_GetCounter(TIM3));RAND++;suijishu[0]=rand()%19+1;x=60,y=0;Draw(60,0,what);	if(panduan1(x,y,what,2)){boxgameover();}}void boxtouch(void)
{	u8 key;key= PS2_Scan();	switch(key){case 0:if(!panduan1(x,y,what,2)){Down(x,y,what);y=y+5;}else{	xiaochu();begin();} break;case 2:if(!panduan1(x,y,what,1)){Left(x,y,what);x=x-5;}break;case 1:if(!panduan1(x,y,what,3)){Right(x,y,what);x=x+5;}break;case 4:if(!panduan1(x,y,what,4))change();break;}}void TIM3_Init(u16 per,u16 psc)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能//定时器TIM3初始化TIM_TimeBaseInitStructure.TIM_Period=per;   //自动装载值TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断//中断优先级NVIC设置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器TIM_Cmd(TIM3, ENABLE);  //使能TIMx					 
}void TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3,TIM_IT_Update)!= RESET){   delay_ms(1000/speed);boxtouch();TIM_ClearITPendingBit(TIM3,TIM_IT_Update);	}
}  void BOX_TASK(void)
{Adc_Init();		  		//ADC初始化LCD_Clear(WHITE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组boxshow();begin();TIM3_Init(500,7199);//启动定时器}4)main函数#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "gui.h"
#include "Picture.h"
#include  "music.h"
#include "24cxx.h"
#include "FILE.h"
#include  "SNAKE.h"
#include "BOX.h"
int main(void)
{u8 key,ps2value;uart_init(9600);delay_init();//Delay init.OnUart_GPIO();KEY_Init();LCD_Init();	   //液晶屏初始化LCD_Clear(BLACK); //清屏低功耗/**************************************************************************功能:初始化界面,按下一键自动进入作者:杨越时间:2019/5/14***************************************************************/	while(1)
{	key=0;while(key!=1){key=KEY_Scan();	}music1();delay_ms(10);Fullscreen_showimage(gImage_WHU);delay_ms(300);LCD_Clear(WHITE); GUI_DrawFont32(30, 30,BLACK, WHITE, "自",0);GUI_DrawFont32(62, 30,BLACK, WHITE, "强",0);delay_ms(100);LCD_Clear(WHITE);	GUI_DrawFont32(30, 30,BLACK, WHITE, "弘",0);GUI_DrawFont32(62, 30,BLACK, WHITE, "毅",0);delay_ms(100);LCD_Clear(WHITE);GUI_DrawFont32(30, 30,BLACK, WHITE, "求",0);GUI_DrawFont32(62, 30,BLACK, WHITE, "是",0);delay_ms(100);LCD_Clear(WHITE);GUI_DrawFont32(30, 30,BLACK, WHITE, "拓",0);GUI_DrawFont32(62, 30,BLACK, WHITE, "新",0);delay_ms(100);LCD_Clear(WHITE);	Gui_StrCenter(0, 0,RED, WHITE, "终有一天",16,0);Gui_StrCenter(0, 16,RED, WHITE, "我们都会成为",16,0);Gui_StrCenter(0, 32,RED, WHITE, "那个最好的自己",16,0);delay_ms(100);LCD_Clear(WHITE);Gui_StrCenter(0, 0,YELLOW, WHITE, "欢迎使用",16,0);Gui_StrCenter(0, 18,YELLOW, WHITE, "傻妞牌手机",16,0);delay_ms(500);/**************************************************************************功能:菜单显示界面作者:杨越时间:2019/5/14***************************************************************/LCD_Clear(WHITE);LCD_ShowNum(0,0,1,1,16);LCD_ShowNum(0,16,2,1,16);LCD_ShowNum(0,32,3,1,16);LCD_ShowNum(0,48,4,1,16);LCD_ShowNum(0,64,5,1,16);LCD_ShowNum(0,80,6,1,16);LCD_ShowNum(0,96,7,1,16);LCD_ShowNum(0,108,8,1,16);Show_Str(8, 0, BLACK,WHITE,"拨号",16,0);Show_Str(8, 16, BLACK,WHITE,"文件管理",16,0);Show_Str(8, 32, BLACK,WHITE,"发送短信",16,0);Show_Str(8, 48, BLACK,WHITE,"查看短信",16,0);Show_Str(8, 64, BLACK,WHITE,"音乐播放",16,0);Show_Str(8, 80, BLACK,WHITE,"贪吃蛇" ,16,0);Show_Str(8, 96, BLACK,WHITE,"俄罗斯方块" ,16,0);Show_Str(8, 108, BLACK,WHITE,"体感游戏" ,16,0);key=0;
while(key==0)
{key=KEY_Scan();
} switch(key){case 1: printf("尚未开发");break;
//	  case 2: FILE_TASK();break;case 3: printf("尚未开发");break;case 4: printf("尚未开发");break;	  case 5: MUSIC_TASK();break;
//	  case 6: SNAKE_TASK();break;case 7: BOX_TASK();break;case 8: printf("尚未开发");break;case 9: printf("尚未开发");break;default : printf("瞎搞");break;
}	}}

这篇关于【单片机开发】基于stm32的掌上游戏机设计 (俄罗斯方块)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧