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

📄 game.lst

📁 一款基于单片机开发的 的 推箱子经典游戏的程序及仿真
💻 LST
📖 第 1 页 / 共 4 页
字号:
 552                  0,1,2,0,3,2,1,0,
 553                  1,1,1,0,0,3,1,1,
 554                  1,0,3,0,0,3,0,1,
 555                  1,0,1,3,1,1,0,1,
 556                  1,0,0,0,4,0,0,1,
 557                  1,1,1,1,1,1,1,1
 558              }
 559              ,
 560                   //第10关
 561              {
 562                  1,1,1,1,1,1,0,0,
 563                  1,0,0,0,0,1,0,0,
 564                  1,0,3,3,3,1,1,1,
 565                  1,0,0,1,2,2,0,1,
 566                  1,1,0,0,2,2,3,1,
 567                  0,1,0,4,0,0,0,1,
 568                  0,1,0,0,0,0,0,1,
 569                  0,1,1,1,1,1,1,1
 570              }
 571                  ,
 572              {
 573                  1,1,1,1,1,1,1,0,
 574                  1,2,0,2,0,2,1,0,
 575                  1,0,3,3,3,0,1,0,
 576                  1,2,3,4,3,2,1,0,
 577                  1,0,3,3,3,0,1,0,
 578                  1,2,0,2,0,2,1,0,
 579                  1,1,1,1,1,1,1,0,
 580                  0,0,0,0,0,0,0,0
 581              }
 582              
 583             
 584              //*/
 585          }
 586          ;
 587          /*程序存储器中的数据是只读的!根据这个地图刷新显示.
 588          用于复制程序存储器中的当前地图数据*/
 589          uchar idata Map[64];
 590          /*用于存放圆形的坐标,最多5个圆.RoundPos[6]存放本关有几个圆*/
 591          uchar RoundPos[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 592          
 593          /**********************************************************
 594          *函数名:CopyMap() 
 595          *功  能:用于复制程序存储器中的当前地图数据
 596          *输  入:入口参数为当前地图编号
 597          **********************************************************/
 598          void CopyMap(uchar num)
 599          {
 600   1          uchar i;
 601   1          for (i=0;i<64;i++) Map[i] = GameMap[num][i];
 602   1      }
 603          
 604          /**********************************************************
 605          *函数名:GameDisplay() 
 606          *功  能:游戏图形显示程序(从左到右,从上到下)
 607          *  *point指向外部RAM存储的128X64的图片数据
 608          **********************************************************/
 609          void GameDisplay()
 610          {
 611   1          unsigned char i;
 612   1          unsigned char x=0,y=0;
 613   1          Mcs=0;
C51 COMPILER V8.02   GAME                                                                  11/01/2008 07:36:26 PAGE 11  

 614   1          Scs=1;     
 615   1          for (i=0;i<64;i++) //生成8X8的地图
 616   1          {
 617   2              if(y>=64)
 618   2              {
 619   3                  x++;
 620   3                  y=0;
 621   3              }
 622   2              switch (Map[i])//获得地图上的图形数据
 623   2              {
 624   3                  case 0:
 625   3                  
 626   3                  Disp8X8(x,y,Empty);
 627   3                  y+=8;
 628   3                  break;
 629   3                  case 1:
 630   3                  
 631   3                  Disp8X8(x,y,Wall);  //Wall
 632   3                  y+=8;
 633   3                  break;
 634   3                  case 2:
 635   3                  
 636   3                  Disp8X8(x,y,Round);//Round
 637   3                  y+=8;
 638   3                  break;
 639   3                  case 3:
 640   3                  
 641   3                  Disp8X8(x,y,Box); //Box
 642   3                  y+=8;
 643   3                  break;
 644   3                  case 4:
 645   3                  
 646   3                  Disp8X8(x,y,Men);//Men
 647   3                  y+=8;
 648   3                  break;
 649   3                  case 5:
 650   3                  
 651   3                  Disp8X8(x,y,BoxRound);      //BoxRound
 652   3                  y+=8;
 653   3                  break;
 654   3                  
 655   3                  
 656   3                  default:break;
 657   3              }
 658   2          }
 659   1      }
 660          /**********************************************************
 661          *函数名:ReadMenPos()
 662          *功  能:读得娃娃脸的当前坐标位置
 663          *返  回:ReadPos
 664          **********************************************************/
 665          uchar ReadMenPos()
 666          {
 667   1          uchar i;
 668   1          uchar ReadPos;    //定义变量存放娃娃脸的位置.
 669   1          for (i=0;i<64;i++)//地图数据是64个字节
 670   1          {
 671   2              //逐个比较找出娃娃脸
 672   2              if(Map[i]==4) //娃娃脸的编号是4
 673   2              { 
 674   3                  ReadPos = i;//记录娃娃脸的坐标
 675   3                  break;      //找到娃娃脸就跳出循环
C51 COMPILER V8.02   GAME                                                                  11/01/2008 07:36:26 PAGE 12  

 676   3              }
 677   2          }
 678   1          return (ReadPos); //返回娃娃脸当前位置
 679   1      }
 680          /**********************************************************
 681          *函数名:ReadRoundPos()
 682          *功  能:读得圆形的坐标位置(箱子移动目的地)
 683          *在初次读入当前地图数据是,5(十字)也认为是圆,不然就出错,
 684          *推动十字形后就少一个圆了.
 685          **********************************************************/
 686          void ReadRoundPos()
 687          {
 688   1          uchar i,j=0;
 689   1          RoundPos[15] = 0;
 690   1          for (i=0;i<64;i++)//地图数据是64个字节
 691   1          {
 692   2              //圆形的编号是2
 693   2              //if (Map[i]==2||Map[i]==5)
 694   2              if (GameMap[Pass][i]==2||GameMap[Pass][i]==5) //找出圆形的位置
 695   2              //if (GameMap[Pass][i]==4||GameMap[Pass][i]==5) //找出圆形的位置
 696   2              {
 697   3                  //在编地图的时候也用十字形.
 698   3                  RoundPos[j] = i;//存放圆形的位置
 699   3                  j++;           //计数圆形的个数
 700   3                  RoundPos[15] = j;//存放圆形的个数
 701   3              }
 702   2          }
 703   1      }
 704          /**********************************************************
 705          *函数名:RefRound()
 706          *功  能:刷新显示圆形(箱子移动目的地)
 707          **********************************************************/
 708          void RefRound()
 709          {
 710   1          uchar i;     //RoundPos[6] 存放着圆形的个数(3--5个)
 711   1          for (i=0;i<RoundPos[15];i++)//根据圆的个数来判断
 712   1          {
 713   2              //判断圆形的坐标位置是否为0(空),是就显示圆形
 714   2              if(Map[RoundPos[i]]==0) Map[RoundPos[i]]=2;
 715   2          }
 716   1      }
 717          /**********************************************************
 718          *函数名:Passed()
 719          *功  能:进入下一关
 720          **********************************************************/
 721          void Passed()
 722          {
 723   1          //圆形位置全变为十字形(5),说明推完了,过关
 724   1          if(RoundPos[15]==1)
 725   1          {
 726   2              if (Map[RoundPos[0]]==5)
 727   2              {
 728   3                  Pass++; //进入下一关
 729   3                  if (Pass==20) Pass=0;//这里设置为20关
 730   3                  CopyMap(Pass);//复制地图数据
 731   3                  //MapCreate();    //地图生成程序
 732   3                  GameDisplay();  //游戏界面显示程序
 733   3                  ReadRoundPos();     //复制当前关卡圆形坐标和个数
 734   3                  DispPass();
 735   3              }
 736   2          }
 737   1              else if(RoundPos[15]==2)
C51 COMPILER V8.02   GAME                                                                  11/01/2008 07:36:26 PAGE 13  

 738   1          {
 739   2              if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5)
 740   2              {
 741   3                  Pass++; //进入下一关
 742   3                  if (Pass==20) Pass=0;//这里设置为20关
 743   3                  CopyMap(Pass);//复制地图数据
 744   3                  //MapCreate();    //地图生成程序
 745   3                  GameDisplay();  //游戏界面显示程序
 746   3                  ReadRoundPos();     //复制当前关卡圆形坐标和个数
 747   3                  DispPass();
 748   3              }
 749   2          }
 750   1          else if(RoundPos[15]==3)
 751   1          {
 752   2              if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5)
 753   2              {
 754   3                  //过关
 755   3                  Pass++; //进入下一关
 756   3                  if (Pass==20) Pass=0;//这里设置为20关
 757   3                  CopyMap(Pass);//复制地图数据
 758   3                  //MapCreate();    //地图生成程序
 759   3                  GameDisplay();  //游戏界面显示程序
 760   3                  ReadRoundPos();     //复制当前关卡圆形坐标和个数
 761   3                  DispPass();
 762   3              }
 763   2          }
 764   1              else if(RoundPos[15]==4)
 765   1          {
 766   2              if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5&&Map[RoundPos[3]]==5)
 767   2              {
 768   3                  //过关
 769   3                  Pass++; //进入下一关
 770   3                  if (Pass==20) Pass=0;//这里设置为20关
 771   3                  CopyMap(Pass);//复制地图数据
 772   3                  //MapCreate();    //地图生成程序
 773   3                  GameDisplay();  //游戏界面显示程序
 774   3                  ReadRoundPos();     //复制当前关卡圆形坐标和个数
 775   3                  DispPass();
 776   3              }
 777   2          }
 778   1              else if(RoundPos[15]==5)
 779   1          {
 780   2              if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5&&Map[RoundPos[3]]==5
 781   2                                      &&Map[RoundPos[4]]==5)
 782   2              {
 783   3                  //过关
 784   3                  Pass++; //进入下一关
 785   3                  if (Pass==20) Pass=0;//这里设置为20关
 786   3                  CopyMap(Pass);//复制地图数据
 787   3                  //MapCreate();    //地图生成程序
 788   3                  GameDisplay();  //游戏界面显示程序
 789   3                  ReadRoundPos();     //复制当前关卡圆形坐标和个数
 790   3                  DispPass();
 791   3              }
 792   2          }
 793   1              else if(RoundPos[15]==6)
 794   1          {
 795   2              if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5&&Map[RoundPos[3]]==5
 796   2                                      &&Map[RoundPos[4]]==5&&Map[RoundPos[5]]==5)
 797   2              {
 798   3                  //过关
 799   3                  Pass++; //进入下一关
C51 COMPILER V8.02   GAME                                                                  11/01/2008 07:36:26 PAGE 14  

 800   3                  if (Pass==20) Pass=0;//这里设置为20关
 801   3                  CopyMap(Pass);//复制地图数据
 802   3                  //MapCreate();    //地图生成程序
 803   3                  GameDisplay();  //游戏界面显示程序
 804   3                  ReadRoundPos();     //复制当前关卡圆形坐标和个数
 805   3                  DispPass();
 806   3              }
 807   2          }
 808   1              else if(RoundPos[15]==7)
 809   1          {
 810   2              if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5&&Map[RoundPos[3]]==5
 811   2                                      &&Map[RoundPos[4]]==5&&Map[RoundPos[5]]==5&&Map[RoundPos[6]]==5)
 812   2              {
 813   3                  //过关
 814   3                  Pass++; //进入下一关
 815   3                  if (Pass==20) Pass=0;//这里设置为20关
 816   3                  CopyMap(Pass);//复制地图数据
 817   3                  //MapCreate();    //地图生成程序
 818   3                  GameDisplay();  //游戏界面显示程序
 819   3                  ReadRoundPos();     //复制当前关卡圆形坐标和个数
 820   3                  DispPass();
 821   3              }
 822   2          }
 823   1              else if(RoundPos[15]==8)
 824   1          {
 825   2              if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5&&Map[RoundPos[3]]==5
 826   2                                      &&Map[RoundPos[4]]==5&&Map[RoundPos[5]]==5&&Map[RoundPos[6]]==5&&Map[RoundPos[7]]==5)
 827   2              {
 828   3                  //过关
 829   3                  Pass++; //进入下一关
 830   3                  if (Pass==20) Pass=0;//这里设置为20关
 831   3                  CopyMap(Pass);//复制地图数据
 832   3                  //MapCreate();    //地图生成程序

⌨️ 快捷键说明

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