基于单片机数码管俄罗斯方块设计

1481下载地址 https://docs.qq.com/doc/DWEpnR2pOWU91b3p4?pub=1&dver=2.1.0

1.由于俄罗斯方块图形的宽度和高度最多只有四位,所以要以4X4为基本单元。
2.硬件采用16行扫描、8位送显示信号
3.各个图形的宽度不一致,所以要人为给图形设定居中位置。
若图形宽度为偶数可直接将其居中,若为奇数则靠左居中。
4.由于图形需要旋转,所以由基本的图形会衍生出另外3种图形。
5.因此每个图形应该给定4个8位的二进制码,并放入一个二维数组里。
6.经典俄罗斯方块游戏里有19种不同形状的方块,包括旋转得到的。
7.数组的第一个下标为该图形的编号

 

uchar code allshape[19][4]={0x00,0x00,0x18,0x18,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x3c,
							0x00,0x08,0x18,0x10,0x00,0x00,0x30,0x18,0x00,0x10,0x18,0x08,
							0x00,0x00,0x18,0x30,0x00,0x08,0x08,0x18,0x00,0x00,0x38,0x08,
							0x00,0x18,0x10,0x10,0x00,0x00,0x20,0x38,0x00,0x10,0x10,0x18,
							0x00,0x00,0x08,0x38,0x00,0x18,0x08,0x08,0x00,0x00,0x38,0x20,
							0x00,0x00,0x10,0x38,0x00,0x08,0x18,0x08,0x00,0x00,0x38,0x10,
							0x00,0x10,0x18,0x10};
/****************************************************************************************/
uchar code number[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};	//数码管数形显示编码
uchar code weima[4]={0x01,0x02,0x04,0x08};									//位选信号编码,方便写循环使用
char shapewidth[19]={2,1,4,2,3,2,3,2,3,2,3,2,3,2,3,3,2,3,2};				//各个图形的宽度属性,用于判断左移和右移的步格数上限
char shaperotate[19]={0,2,1,4,3,6,5,8,9,10,7,12,13,14,11,16,17,18,15};		//旋转图形时,用于改变图形的编号以实现图形的切换
uchar staticdata[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff};			//用于存储方块降落后固定显示的图形信息
uchar rate[5]={0,1,3,6,10};													//规定一次性消掉的行数的分数奖励机制


/****************************************全局变量声明************************************/
char y;					//方块位置属性:底部下落的高度,y=0时:刚刚出现,y=15时:下落到屏幕最底部
char shapenum;			//方块形状属性:从0到18
int left; 				//方块位置属性:方块偏离居中位置的格数,不同的方块left值的上限不同
int mark;				//玩家分数变量
int speed;				//方块下落速度变量
int initialspeed;		//方块下落的初始速度
int systemspeed;		//系统下落速度,此值会随着玩家分数的增加而减小,相应的下落速度会增大
int fastspeed;			//当用户按下down键时,方块下落速度为此值
int k;					//一个全局循环变量,“帧数”变量
int startcontrol=1;		//开始画面状态指示变量,为1时说明程序进入开机欢迎界面
int suspendcontrol=0;	//游戏暂停与游戏继续画面状态指示变量,为1说明处在暂停界面,为0说明处在继续画面
int randnum;			//随机数变量,用于产生随机方块
/****************************************************************************************/


/****************************************函数声明****************************************/
void delayms(int);				//粗略延时函数
uchar move(uchar,int);			//对二进制码实行移位,可为负值
void shapedisplay();			//对点阵扫描一场,对数码管扫描一场,用于显示图形和数字
void keyscan();					//对所有键盘扫描一次,并执行相应运算和操作

 

 

  

 

posted @ 2021-03-15 20:34  roadroad  阅读(263)  评论(0编辑  收藏  举报
电设屋
上千套电子毕设课设方案