📄 button_drive.h
字号:
/************************************************************
button_drive.h
按键驱动程序
制作人:内蒙古大学 夏士通
时间:2008年5月14日
E-mail:xiashitong@hotmail.com
支持开源,欢迎交流
************************************************************/
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));
Box_Ram_to_Ram();
}
else
{ 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));
Box_Ram_to_Ram();
}
}
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);
Box_Ram_to_Ram();
}
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);
Box_Ram_to_Ram();
EA=1;//开中断
}break;
case 4: if(s_box.y!=0)//4表示left被按下
{
EA=0;//关中断,如果不关的话可能引起游戏显示混乱
if(s_box.x!=0&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);
Box_Ram_to_Ram();
}
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);
Box_Ram_to_Ram();
}
EA=1;//开中断
}break;
case 2: //2表示up被按下
EA=0;//关中断,如果不关的话可能引起游戏显示混乱
pause_game_flag=1;//游戏暂停标志位置1,游戏暂停
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)//按键一直被按下时设置时间间隔触发
{
button_a_reg++;
}
else
{
button_a_reg=0;
tpflag=3;//返回3表示button_a被按下
}
}
else
{
button_a_reg=button_delay;//释放按键时置按键缓存为button_delay,以便在下次按键时及时响应
}
if(left==0)
{
if(left_reg<button_delay)//按键一直被按下时设置时间间隔触发
{
left_reg++;
}
else
{
left_reg=0;
tpflag=4;//返回4表示left被按下
}
}
else
{
left_reg=button_delay;//释放按键时置按键缓存为button_delay,以便在下次按键时及时响应
}
if(right==0)
{
if(right_reg<button_delay)//按键一直被按下时设置时间间隔触发
{
right_reg++;
}
else
{
right_reg=0;
tpflag=5;//返回5表示right被按下
}
}
else
{
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 + -