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

📄 game.lst

📁 一款基于单片机开发的 的 推箱子经典游戏的程序及仿真
💻 LST
📖 第 1 页 / 共 4 页
字号:
 833   3                  GameDisplay();  //游戏界面显示程序
 834   3                  ReadRoundPos();     //复制当前关卡圆形坐标和个数
 835   3                  DispPass();
 836   3              }
 837   2          }
 838   1      }
 839          /**********************************************************
 840          *函数名:UpMove()
 841          *功  能:娃娃脸向上移动
 842          *说  明:向上移动是-8 (8X8的数据间隔是8)
 843          *空(什么都不显示)=0,墙=1,圆=2,箱子=3,脸=4,十字=5
 844          **********************************************************/
 845          void UpMove()
 846          {
 847   1          uchar pos;
 848   1          pos = ReadMenPos(); //获得娃娃脸的位置
 849   1          if (Map[pos-8]!=1)    //判断移动方向前面是否是墙
 850   1          {
 851   2              switch (Map[pos-8]) 
 852   2              {
 853   3                  case 0: //移动方向前面是空的执行这里
 854   3                  Map[pos-8] = 4;//娃娃脸的新位置
 855   3                  Map[pos] =0;   //清空娃娃脸位置
 856   3                  break;
 857   3                  case 2: //是圆形执行这里
 858   3                  Map[pos-8] = 4;//娃娃脸的新位置
 859   3                  Map[pos] =0;   //清空娃娃脸位置
 860   3                  break;
 861   3                  case 3: //移动方向前面是箱子执行这里
C51 COMPILER V8.02   GAME                                                                  11/01/2008 07:36:26 PAGE 15  

 862   3                  //箱子的前面不是墙或箱子或十字就可以移动
 863   3                  if (Map[pos-16]==0)
 864   3                  {
 865   4                      Map[pos-16]= 3;//显示箱子
 866   4                      Map[pos-8] = 4;//娃娃脸的新位置
 867   4                      Map[pos] = 0;  //清空娃娃脸位置
 868   4                  }
 869   3                  else if (Map[pos-16]==2)
 870   3                  {
 871   4                      Map[pos-16]= 5;//显示十字形
 872   4                      Map[pos-8] = 4;//娃娃脸的新位置
 873   4                      Map[pos] = 0;  //清空娃娃脸位置
 874   4                  }
 875   3                  break;
 876   3                  case 5: //移动方向前面是十字执行这里
 877   3                  //十字的前面不是墙或箱子或十字就可以移动
 878   3                  if (Map[pos-16]==0)
 879   3                  {
 880   4                      Map[pos-16]= 3;//显示箱子
 881   4                      Map[pos-8] = 4;//娃娃脸的新位置
 882   4                      Map[pos] = 0;  //清空娃娃脸位置
 883   4                  }
 884   3                  else if (Map[pos-16]==2)
 885   3                  {
 886   4                      Map[pos-16]= 5;//显示十字形
 887   4                      Map[pos-8] = 4;//娃娃脸的新位置
 888   4                      Map[pos] = 0;  //清空娃娃脸位置
 889   4                  }
 890   3                  break;
 891   3              }
 892   2              RefRound();    //刷新圆形
 893   2              Passed();       //判断是否满足进入下一关
 894   2              //MapCreate();  //刷新地图
 895   2              GameDisplay();//显示游戏界面
 896   2              //Passed();       //判断是否满足进入下一关
 897   2          }
 898   1      }
 899          /**********************************************************
 900          *函数名:DownMove() 
 901          *功  能:娃娃脸向下移动 +8
 902          **********************************************************/
 903          void DownMove()
 904          {
 905   1          uchar pos;
 906   1          pos = ReadMenPos(); //获得娃娃脸的位置
 907   1          if (Map[pos+8]!=1)    //判断移动方向前面是否是墙
 908   1          {
 909   2              switch (Map[pos+8]) //得到娃娃脸前面的图形
 910   2              {
 911   3                  case 0: //移动方向前面是空的执行这里
 912   3                  Map[pos+8] = 4;//娃娃脸的新位置
 913   3                  Map[pos] = 0;  //清空娃娃脸位置
 914   3                  break;
 915   3                  case 2: //是圆形执行这里
 916   3                  Map[pos+8] = 4;//娃娃脸的新位置
 917   3                  Map[pos] = 0;  //清空娃娃脸位置
 918   3                  break;
 919   3                  case 3: //移动方向前面是箱子执行这里
 920   3                  //箱子的前面不是墙或箱子或十字就可以移动
 921   3                  if (Map[pos+16]==0)
 922   3                  {
 923   4                      Map[pos+16]= 3;//显示箱子
C51 COMPILER V8.02   GAME                                                                  11/01/2008 07:36:26 PAGE 16  

 924   4                      Map[pos+8] = 4;//娃娃脸的新位置
 925   4                      Map[pos] = 0;  //清空娃娃脸位置
 926   4                  }
 927   3                  else if(Map[pos+16]==2)
 928   3                  {
 929   4                      Map[pos+16]= 5;//显示十字形
 930   4                      Map[pos+8] = 4;//娃娃脸的新位置
 931   4                      Map[pos] = 0;  //清空娃娃脸位置
 932   4                  }
 933   3                  break;
 934   3                  case 5: //移动方向前面是十字执行这里
 935   3                  //十字的前面不是墙或箱子或十字就可以移动
 936   3                  if (Map[pos+16]==0)
 937   3                  {
 938   4                      Map[pos+16]= 3;//显示箱子
 939   4                      Map[pos+8] = 4;//娃娃脸的新位置
 940   4                      Map[pos] = 0;  //清空娃娃脸位置
 941   4                  }
 942   3                  else if(Map[pos+16]==2)
 943   3                  {
 944   4                      Map[pos+16]= 5;//显示十字形
 945   4                      Map[pos+8] = 4;//娃娃脸的新位置
 946   4                      Map[pos] = 0;  //清空娃娃脸位置
 947   4                  }
 948   3                  break;
 949   3              }
 950   2              RefRound();    //刷新圆形
 951   2              Passed();       //判断是否满足进入下一关
 952   2              //MapCreate();  //刷新地图
 953   2              GameDisplay();//显示游戏界面
 954   2              //Passed();       //判断是否满足进入下一关
 955   2          }
 956   1      }
 957          /**********************************************************
 958          *函数名:LeftMove() 
 959          *功  能:娃娃脸向左移动 -1
 960          **********************************************************/
 961          void LeftMove()
 962          {
 963   1          uchar pos;
 964   1          pos = ReadMenPos(); //获得娃娃脸的位置
 965   1          if (Map[pos-1]!=1)    //判断移动方向前面是否是墙
 966   1          {
 967   2              switch (Map[pos-1]) 
 968   2              {
 969   3                  case 0: //移动方向前面是空的执行这里
 970   3                  Map[pos-1] = 4;//娃娃脸的新位置
 971   3                  Map[pos] =0;   //清空娃娃脸位置
 972   3                  break;
 973   3                  case 2: //是圆形执行这里
 974   3                  Map[pos-1] = 4;//娃娃脸的新位置
 975   3                  Map[pos] =0;   //清空娃娃脸位置
 976   3                  break;
 977   3                  case 3: //移动方向前面是箱子执行这里
 978   3                  //箱子的前面不是墙或箱子或十字就可以移动
 979   3                  if (Map[pos-2]==0)
 980   3                  {
 981   4                      Map[pos-2]= 3;//显示箱子
 982   4                      Map[pos-1]= 4;//娃娃脸的新位置
 983   4                      Map[pos] = 0; //清空娃娃脸位置
 984   4                  }
 985   3                  else if (Map[pos-2]==2)
C51 COMPILER V8.02   GAME                                                                  11/01/2008 07:36:26 PAGE 17  

 986   3                  {
 987   4                      Map[pos-2]= 5; //显示十字形
 988   4                      Map[pos-1]= 4;//娃娃脸的新位置
 989   4                      Map[pos] = 0; //清空娃娃脸位置
 990   4                  }
 991   3                  break;
 992   3                  case 5: //移动方向前面是十字执行这里
 993   3                  //十字的前面不是墙或箱子或十字就可以移动
 994   3                  if (Map[pos-2]==0)
 995   3                  {
 996   4                      Map[pos-2]= 3;//显示箱子
 997   4                      Map[pos-1]= 4;//娃娃脸的新位置
 998   4                      Map[pos] = 0; //清空娃娃脸位置
 999   4                  }
1000   3                  else if (Map[pos-2]==2)
1001   3                  {
1002   4                      Map[pos-2]= 5;//显示十字形
1003   4                      Map[pos-1]= 4;//娃娃脸的新位置
1004   4                      Map[pos] = 0; //清空娃娃脸位置
1005   4                  }
1006   3                  break;
1007   3              }
1008   2              RefRound();    //刷新圆形
1009   2              Passed();       //判断是否满足进入下一关
1010   2              //MapCreate();  //刷新地图
1011   2              GameDisplay();//显示游戏界面
1012   2              //Passed();       //判断是否满足进入下一关
1013   2          }
1014   1      }
1015          /**********************************************************
1016          *函数名:RightMove() 
1017          *功  能:娃娃脸向右移动 +1
1018          **********************************************************/
1019          void RightMove()
1020          {
1021   1          uchar pos;
1022   1          pos = ReadMenPos(); //获得娃娃脸的位置
1023   1          if (Map[pos+1]!=1)    //判断移动方向前面是否是墙
1024   1          {
1025   2              switch (Map[pos+1]) 
1026   2              {
1027   3                  case 0: //移动方向前面是空的执行这里
1028   3                  Map[pos+1] = 4;//娃娃脸的新位置
1029   3                  Map[pos] =0;   //清空娃娃脸位置
1030   3                  break;
1031   3                  case 2: //是圆形执行这里
1032   3                  Map[pos+1] = 4;//娃娃脸的新位置
1033   3                  Map[pos] =0;   //清空娃娃脸位置
1034   3                  break;
1035   3                  case 3: //移动方向前面是箱子执行这里
1036   3                  //箱子的前面不是墙或箱子或十字就可以移动
1037   3                  if (Map[pos+2]==0)
1038   3                  {
1039   4                      Map[pos+2]= 3;//显示箱子
1040   4                      Map[pos+1]= 4;//娃娃脸的新位置
1041   4                      Map[pos] = 0; //清空娃娃脸位置
1042   4                  }
1043   3                  else if(Map[pos+2]==2)
1044   3                  {
1045   4                      Map[pos+2]= 5;//显示十字形
1046   4                      Map[pos+1]= 4;//娃娃脸的新位置
1047   4                      Map[pos] = 0; //清空娃娃脸位置
C51 COMPILER V8.02   GAME                                                                  11/01/2008 07:36:26 PAGE 18  

1048   4                  }
1049   3                  break;
1050   3                  case 5: //移动方向前面是十字执行这里
1051   3                  //十字形的前面不是墙或箱子或十字就可以移动
1052   3                  if (Map[pos+2]==0)
1053   3                  {
1054   4                      Map[pos+2]= 3;//显示箱子
1055   4                      Map[pos+1]= 4;//娃娃脸的新位置
1056   4                      Map[pos] = 0; //清空娃娃脸位置
1057   4                  }
1058   3                  else if(Map[pos+2]==2)
1059   3                  {
1060   4                      Map[pos+2]= 5;//显示十字形
1061   4                      Map[pos+1]= 4;//娃娃脸的新位置
1062   4                      Map[pos] = 0; //清空娃娃脸位置
1063   4                  }
1064   3                  break;
1065   3              }
1066   2              RefRound();    //刷新圆形
1067   2              Passed();       //判断是否满足进入下一关
1068   2              //MapCreate();  //刷新地图
1069   2              GameDisplay();//显示游戏界面
1070   2              //Passed();       //判断是否满足进入下一关
1071   2          }
1072   1      }
1073          /**********************************************************
1074          *延时400us
1075          **********************************************************/
1076          void Delay400us() //晶振=12MHz 延时时间=404us
1077          {
1078   1          //晶振=11.0592MHz 延时时间≈438us
1079   1          uchar i,j;    //总的延时时间=[(2*i)+1]*j+1+1
1080   1          for (j=4;j>0;j--) //j=2用12MHz,j=4 是24MHz晶振
1081   1          for (i=100;i>0;i--);
1082   1      }
1083          /**********************************************************
1084          *函数名:Sound()
1085          *功  能:音效子程序
1086          **********************************************************/
1087          void Sound()
1088          {
1089   1          uchar i;
1090   1          for (i=40;i>0;i--)
1091   1          {
1092   2              Beep=~Beep;
1093   2              Delay400us();
1094   2          }
1095   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1337    ----
   CONSTANT SIZE    =   1328    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18       3
   IDATA SIZE       =     64    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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