⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 button_drive.h

📁 这是一个用128*64液晶显示的俄罗斯方块游戏
💻 H
字号:


void game_button()
{
	
	switch(basic_button())
		{
			case 3: if(s_box.y!=0)//3表示button_a被按下
					{
						EA=0;//关中断,如果不关的话可能引起游戏显示混乱
						if(s_box.shape==3&&check_cover(s_box.x,s_box.y,box_read_data(s_box.mode,0)))
						{
							
							s_box.shape=0;
							box_load();
							box_to_Box_Ram(s_box.x,s_box.y,box_read_data(s_box.mode,3));
						}
						else if(check_cover(s_box.x,s_box.y,box_read_data(s_box.mode,0)))
						{	if(check_cover(s_box.x,s_box.y,box_read_data(s_box.mode,s_box.shape+1)))
							{	
								s_box.shape++;
								box_load();
								box_to_Box_Ram(s_box.x,s_box.y,box_read_data(s_box.mode,s_box.shape-1));
							}
						}
						EA=1;//开中断
					}break;
			case 1: if(s_box.y!=0)//1表示down被按下
					{
						EA=0;//关中断,如果不关的话可能引起游戏显示混乱
						while(check_cover(s_box.x,s_box.y+1,s_box.box))//检测是否能下降,指导不能再下降为止
						{
							s_box.y++;
							box_to_Box_Ram(s_box.x,s_box.y-1,s_box.box);
						}
						destroy_row();
						box_build();
						box_load();
					//	game_over_flag=check_game_over();//游戏结束标志位置1表示游戏结束
					//	next_box();
						box_to_Box_Ram(s_box.x,s_box.y,s_box.box);
						EA=1;//开中断
					}break;
			case 4: if(s_box.y!=0)//4表示left被按下
					{
						EA=0;//关中断,如果不关的话可能引起游戏显示混乱
						if(check_cover(s_box.x-1,s_box.y,s_box.box))
						{
							s_box.x--;
							box_to_Box_Ram(s_box.x+1,s_box.y,s_box.box);
						}
						EA=1;//开中断
					}break;
			case 5: if(s_box.y!=0)//5表示right被按下
					{
						EA=0;//关中断,如果不关的话可能引起游戏显示混乱
						if(check_cover(s_box.x+1,s_box.y,s_box.box))
						{
							s_box.x++;
							box_to_Box_Ram(s_box.x-1,s_box.y,s_box.box);
						}
						EA=1;//开中断
					}break;
			case 2: //2表示up被按下
					pause_game_flag=~pause_game_flag;//游戏暂停标志取反
					while(up==0);
					break;
			default:;
		}	
}//游戏中按键识别程序(有优先级,从高到低依次是button_a_reg>down>left>right>up)

unsigned char basic_button()
{
	unsigned char tpflag=0;
	if(down==0)
	{
		if(down_reg<button_delay)//按键一直被按下时设置时间间隔触发
		{
			down_reg++;
		}
		else
		{
			down_reg=0;
			tpflag=1;//返回1表示down被按下
		}		
	}
	else
	{
		down_reg=button_delay;//释放按键时置按键缓存为button_delay,以便在下次按键时及时响应
	}
	if(up==0)
	{
		if(up_reg<button_delay)//按键一直被按下时设置时间间隔触发
		{
			up_reg++;
		}
		else
		{
			up_reg=0;
			tpflag=2;//返回2表示up被按下
		}		
	}
	else
	{
		up_reg=button_delay;//释放按键时置按键缓存为button_delay,以便在下次按键时及时响应
	}
	if(button_a==0)
	{
		if(button_a_reg<button_delay*8)//按键一直被按下时设置时间间隔触发
		{
			button_a_reg++;
		}
		else
		{
			button_a_reg=0;
			tpflag=3;//返回3表示button_a被按下
		}		
	}
	else
	{
		button_a_reg=button_delay*8;//释放按键时置按键缓存为button_delay,以便在下次按键时及时响应
	}
	if(left==0)
	{
		if(left_reg<(button_delay))//按键一直被按下时设置时间间隔触发
		{
			left_reg++;
		}
		else
		{
			left_reg=left_acceleration*button_acceleration;
			if(left_acceleration<2)left_acceleration++;
			tpflag=4;//返回4表示left被按下
		}		
	}
	else
	{
		left_acceleration=0;
		left_reg=button_delay;//释放按键时置按键缓存为button_delay,以便在下次按键时及时响应
	}
	if(right==0)
	{
		if(right_reg<(button_delay))//按键一直被按下时设置时间间隔触发
		{
			right_reg++;
		}
		else
		{
			right_reg=right_acceleration*button_acceleration;
			if(right_acceleration<2)right_acceleration++;
			tpflag=5;//返回5表示right被按下
		}		
	}
	else
	{
		right_acceleration=0;
		right_reg=button_delay;//释放按键时置按键缓存为button_delay,以便在下次按键时及时响应
	}
	return(tpflag);
}//基本按键程序(返回0表示没按键被按下,返回1表示down被按下,返回2表示up被按下,返回3表示button_a被按下,返回4表示left被按下,返回5表示right被按下)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -