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

📄 按键函数.c

📁 推箱子游戏中的proteus仿真显示电路和键盘部分
💻 C
字号:
#include"tab.h"
#include"160128_driver.h"
//全局变量
unsigned char Custom=1;//关数寄存器
extern unsigned int Time;//时间数寄存器
unsigned char Steps=0;//步数内存分配
unsigned char x_Coordinate,y_Coordinate;//人物当前的坐标
unsigned char a,b,Cust=1;
//动作跟踪数组
unsigned char data Follow_Action[8][9]={0};
//显示子程序
void Dispaly()
{
unsigned char i,j,a;
for(i=0;i<8;i++)
   {
   for(j=0;j<9;j++)
      {
      Follow_Action[i][j]=Customs[Custom-1][i][j];                                                                                                                                                           
      a=Follow_Action[i][j];
      switch(a)
         {
         case 0:a=0x80;break;
         case 1:a=0x94;x_Coordinate=i;y_Coordinate=j;break;
         case 2:a=0x84;break;
         case 3:a=0x8c;break;
         case 4:a=0x88;break;
         case 5:a=0x90;break;
         }
	     Han_Zi(2*i,2*j,a);
	  }
   }
}
//原来位置显示子程序
void _Display()
{
//如果原来人物这个位置是空白或是箱子则显示一个空白
if(a==0||a==3||a==1)
   {
   Han_Zi(2*x_Coordinate,2*y_Coordinate,0x80);
   Follow_Action[x_Coordinate][y_Coordinate]=0;
   }
   //如果人物本身这里是一个叉图形或是箱子或叉重合后的图则显示一个叉
   if(a==4||a==5)
      {
	  Han_Zi(2*x_Coordinate,2*y_Coordinate,0x88);
	  Follow_Action[x_Coordinate][y_Coordinate]=4;
	  }
}
//步数更新子程序
void New_Step()
{
Set_xy(7,17);
Write_8_Data(0x10+Steps/100,0xc4);//l
Set_xy(7,18);
Write_8_Data(0x10+Steps%100/10,0xc4);//l
Set_xy(7,19);
Write_8_Data(0x10+Steps%10,0xc4);//l
}
//关数更新子程序
void New_Custom()
{
Set_xy(1,18);
Write_8_Data(0x10+Custom/10,0xc4);//l
Set_xy(1,19);
Write_8_Data(0x10+Custom%10,0xc4);//l
}
//过关子程序
void Pass()
{
unsigned char i,j,a=1;
for(i=0;i<8;i++)
   {
   if(!a)break;
   for(j=0;j<9;j++)                                                                                                                                                         
   if(Customs[Custom-1][i][j]==5||Customs[Custom-1][i][j]==4)
   if(Follow_Action[i][j]==5)a=1;
   else 
      {
	  a=0;
	  break;
	  }
   }
   if(a)
      {
	  Custom++;
	  Steps=Time=0;
	  New_Step();
	  if(Custom==18)Custom=1;
      New_Custom();
      Dispaly();
	  }
}
//向下推子函数
void Down_Push()
{
Cust=1;
a=Customs[Custom-1][x_Coordinate][y_Coordinate];//原来人物这个位置是什么
b=Follow_Action[x_Coordinate+1][y_Coordinate];   //现在人物位置下面是什么                                                                                                                                                                       
if(b==0||b==4)//如果现在人物位置下面是空白或是叉图形则显示一个人物
   {
   Steps++;
   New_Step();
   Han_Zi(2*(x_Coordinate+1),2*y_Coordinate,0x94);
   _Display();
   x_Coordinate++;//更新人物坐标
   }
 if(b==3||b==5)//如果现在人物位置下面是箱子
   {  
   if(Follow_Action[x_Coordinate+2][y_Coordinate]!=2&&Follow_Action[x_Coordinate+2][y_Coordinate]!=3&&Follow_Action[x_Coordinate+2][y_Coordinate]!=5)
      {
	  Steps++;
	  New_Step();
      if(Follow_Action[x_Coordinate+2][y_Coordinate]==0)
         {
         //则在下面的下面显示一个箱子
         Han_Zi(2*(x_Coordinate+2),2*y_Coordinate,0x8c);
         Follow_Action[x_Coordinate+2][y_Coordinate]=3;//更新箱子的位置
         }
         //如果现在人物位置下面的下面是叉
      else if(Follow_Action[x_Coordinate+2][y_Coordinate]==4)
         {
         //则在下面的下面显示一个箱子和叉重合后的图
         Han_Zi(2*(x_Coordinate+2),2*y_Coordinate,0x90);
         Follow_Action[x_Coordinate+2][y_Coordinate]=5;//更新箱子和叉重合的位置
         }
         //则在下面显示一个人物
         Han_Zi(2*(x_Coordinate+1),2*y_Coordinate,0x94);
         if(b==3)Follow_Action[x_Coordinate+1][y_Coordinate]=0;//原箱子位置0
         if(b==5)Follow_Action[x_Coordinate+1][y_Coordinate]=4;//原箱子位置叉
         _Display();
         x_Coordinate++;//更新人物坐标
         Pass();
      }
   }
}
//向上推子函数
void On_Push()
{
Cust=1;
a=Customs[Custom-1][x_Coordinate][y_Coordinate];//原来人物这个位置是什么
b=Follow_Action[x_Coordinate-1][y_Coordinate];   //现在人物位置上面是什么                                                                                                                                                                       
if(b==0||b==4)//如果现在人物位置上面是空白或是叉图形则显示一个人物
   {
   Steps++;
   New_Step();
   Han_Zi(2*(x_Coordinate-1),2*y_Coordinate,0x94);
   _Display();
   x_Coordinate--;//更新人物坐标
   }
 if(b==3||b==5)//如果现在人物位置上面是箱子
   { 
   if(Follow_Action[x_Coordinate-2][y_Coordinate]!=2&&Follow_Action[x_Coordinate-2][y_Coordinate]!=3&&Follow_Action[x_Coordinate-2][y_Coordinate]!=5)
      {
	  Steps++;
	  New_Step();
      //如果现在人物位置上面的上面是空白
      if(Follow_Action[x_Coordinate-2][y_Coordinate]==0)
         {
         //则在上面的上面显示一个箱子
         Han_Zi(2*(x_Coordinate-2),2*y_Coordinate,0x8c);
         Follow_Action[x_Coordinate-2][y_Coordinate]=3;//更新箱子的位置
         }
       else if(Follow_Action[x_Coordinate-2][y_Coordinate]==4)
         {
         //则在下面的上面显示一个箱子和叉重合后的图
         Han_Zi(2*(x_Coordinate-2),2*y_Coordinate,0x90);
         Follow_Action[x_Coordinate-2][y_Coordinate]=5;//更新箱子和叉重合的位置
         }
         //则在上面显示一个人物
         Han_Zi(2*(x_Coordinate-1),2*y_Coordinate,0x94);
         if(b==3)Follow_Action[x_Coordinate-1][y_Coordinate]=0;//原箱子位置0
         if(b==5)Follow_Action[x_Coordinate-1][y_Coordinate]=4;//原箱子位置0
         _Display();
         x_Coordinate--;//更新人物坐标
         Pass();
      }
   }
}
//向左推子函数
void Left_Push()
{
Cust=1;
a=Customs[Custom-1][x_Coordinate][y_Coordinate];//原来人物这个位置是什么
b=Follow_Action[x_Coordinate][y_Coordinate-1];   //现在人物位置左边是什么                                                                                                                                                                       
if(b==0||b==4)//如果现在人物位置左边是空白或是叉图形则显示一个人物
   {
   Steps++;
   New_Step();
   Han_Zi(2*x_Coordinate,2*(y_Coordinate-1),0x94);
   _Display();
   y_Coordinate--;//更新人物坐标
   }
 if(b==3||b==5)//如果现在人物位置左边是箱子
   {   
   if(Follow_Action[x_Coordinate][y_Coordinate-2]!=2&&Follow_Action[x_Coordinate][y_Coordinate-2]!=3&&Follow_Action[x_Coordinate][y_Coordinate-2]!=5)
      {
	  Steps++;
	  New_Step();
      //如果现在人物位置左边的左边是空白
      if(Follow_Action[x_Coordinate][y_Coordinate-2]==0)
         {
         //则在左边的左边显示一个箱子
         Han_Zi(2*x_Coordinate,2*(y_Coordinate-2),0x8c);
         Follow_Action[x_Coordinate][y_Coordinate-2]=3;//更新箱子的位置
         }
         //如果现在人物位置左边的左边是叉
       else if(Follow_Action[x_Coordinate][y_Coordinate-2]==4)
         {
         //则在左边的左边显示一个箱子和叉重合后的图
         Han_Zi(2*x_Coordinate,2*(y_Coordinate-2),0x90);
         Follow_Action[x_Coordinate][y_Coordinate-2]=5;//更新箱子的位置
   	     }
         //则在左边显示一个人物
         Han_Zi(2*x_Coordinate,2*(y_Coordinate-1),0x94);
         if(b==5)Follow_Action[x_Coordinate][y_Coordinate-1]=4;//更新箱子的位置
         if(b==3)Follow_Action[x_Coordinate][y_Coordinate-1]=0;//原箱子位置0
         _Display();
         y_Coordinate--;//更新人物坐标
         Pass();
      }
   }
}
//向右推子函数
void Right_Push()
{
Cust=1;
a=Customs[Custom-1][x_Coordinate][y_Coordinate];//原来人物这个位置是什么
b=Follow_Action[x_Coordinate][y_Coordinate+1];   //现在人物位置右边是什么                                                                                                                                                                       
if(b==0||b==4)//如果现在人物位置右边是空白或是叉图形则显示一个人物
   {
   Steps++;
   New_Step();
   Han_Zi(2*x_Coordinate,2*(y_Coordinate+1),0x94);
   _Display();
   y_Coordinate++;//更新人物坐标
   }
 if(b==3||b==5)//如果现在人物位置右边是箱子
   {   
   if(Follow_Action[x_Coordinate][y_Coordinate+2]!=2&&Follow_Action[x_Coordinate][y_Coordinate+2]!=3&&Follow_Action[x_Coordinate][y_Coordinate+2]!=5)
      {
	  Steps++;
	  New_Step();
      //如果现在人物位置右边的右边是空白
      if(Follow_Action[x_Coordinate][y_Coordinate+2]==0)
         {
         //则在右边的右边显示一个箱子
         Han_Zi(2*x_Coordinate,2*(y_Coordinate+2),0x8c);
         Follow_Action[x_Coordinate][y_Coordinate+2]=3;//更新箱子的位置
         }
         //如果现在人物位置右边的右边是叉
      else if(Follow_Action[x_Coordinate][y_Coordinate+2]==4)
         {
         //则在右边的右边显示一个箱子和叉重合后的图
         Han_Zi(2*x_Coordinate,2*(y_Coordinate+2),0x90);
         Follow_Action[x_Coordinate][y_Coordinate+2]=5;//更新箱子的位置
         }
         //则在右边显示一个人物
         Han_Zi(2*x_Coordinate,2*(y_Coordinate+1),0x94);
         if(b==5)Follow_Action[x_Coordinate][y_Coordinate+1]=4;//更新箱子的位置
         if(b==3)Follow_Action[x_Coordinate][y_Coordinate+1]=0;//原箱子位置0
         _Display();
         y_Coordinate++;//更新人物坐标
         Pass();
      }
   }
}
//选关函数
void Choice_Customs()
{
Time=Steps=0;
New_Step();
Custom=Cust;
New_Custom();
Dispaly();
Cust++;
if(Cust==18)Cust=1;
}

⌨️ 快捷键说明

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