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

📄 main.lst

📁 推箱子游戏]基于AT89S51+62256+12864LCD
💻 LST
📖 第 1 页 / 共 3 页
字号:
 230   1        for (i=0;i<32;i++) //写上半屏(32行)
 231   1        {
 232   2          LCDWriteCommand(0x80+i);//Y地址寄存器
 233   2              LCDWriteCommand(0x80);  //X地址(LCM自动加1)
 234   2              for (j=0;j<16;j++)//16x8列
 235   2              {
 236   3                      LCDWriteData(GamePic[k]);//写入一个字节图形数据
 237   3                      k++; //指向下一个图形字节
 238   3              }
 239   2        }
 240   1        for (i=0;i<32;i++) //写下半屏
 241   1        {
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 5   

 242   2          LCDWriteCommand(0x80+i);//Y地址寄存器
 243   2              LCDWriteCommand(0x88);  //X地址(LCM自动加1)
 244   2              for (j=0;j<16;j++)//
 245   2              {
 246   3                      LCDWriteData(GamePic[k]);
 247   3                      k++;
 248   3              }
 249   2        }
 250   1      }
 251          /**********************************************************
 252          *函数名:ReadPosition()
 253          *功  能:读得娃娃脸的当前坐标位置
 254          *返  回:ReadPos
 255          **********************************************************/
 256          uchar ReadPosition()
 257          {
 258   1              uchar i;
 259   1              uchar ReadPos; //定义变量存放娃娃脸的位置.
 260   1              for (i=0;i<64;i++)
 261   1              {
 262   2                      if(Map[i]==4)
 263   2                      { 
 264   3                              ReadPos = i; //记录娃娃脸的坐标
 265   3                              break; //找到位置跳出循环
 266   3                      }
 267   2              }
 268   1              return (ReadPos); //返回娃娃脸当前位置
 269   1      }
 270          /**********************************************************
 271          *函数名:Readyuan()
 272          *功  能:读得圆形的坐标位置(箱子移动目的地)
 273          **********************************************************/
 274          void Readyuan()
 275          {
 276   1         uchar i,j=0;
 277   1         for (i=0;i<64;i++)
 278   1         {
 279   2                if (Map[i]==2) //找出圆形的位置
 280   2                {
 281   3                      yuanPos[j] = i; //存放圆的位置
 282   3                      j++;
 283   3                      yuanPos[6] = j;//存放有几个圆
 284   3                }
 285   2         }
 286   1      }
 287          /**********************************************************
 288          *函数名:Refyuan()
 289          *功  能:刷新显示圆形(箱子移动目的地)
 290          **********************************************************/
 291          void Refyuan()
 292          {
 293   1         uchar i;
 294   1         for (i=0;i<yuanPos[6];i++)
 295   1         {
 296   2                 if(Map[yuanPos[i]]==0) Map[yuanPos[i]]=2;
 297   2         }
 298   1         if (Map[yuanPos[0]]==5&&Map[yuanPos[1]]==5&&Map[yuanPos[2]]==5)
 299   1         {//过关
 300   2                              guanka++; //进入下一关
 301   2                              if (guanka==10) guanka=0;
 302   2                              CopyMap(guanka);  //复制地图数据
 303   2                              MapCreate(); //地图生成程序
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 6   

 304   2                              GameDisplay();//游戏界面显示程序
 305   2                              Readyuan();//
 306   2         }
 307   1      }
 308          /**********************************************************
 309          *函数名:UpMove()
 310          *功  能:娃娃脸向上移动
 311          *说  明:向上移动是-8 (8X8的数据间隔是8)
 312          *空(什么都不显示)=0,墙=1,圆=2,箱子=3,脸=4,十字=5
 313          **********************************************************/
 314          void UpMove()
 315          {
 316   1         uchar pos;
 317   1         pos = ReadPosition(); //获得娃娃脸的位置
 318   1         if (Map[pos-8]!=1)//判断移动方向前面是否是墙
 319   1         {
 320   2               switch (Map[pos-8]) 
 321   2                {
 322   3                         case 0: //移动方向前面是空的执行这里
 323   3                                      Map[pos-8] = 4;//娃娃脸的新位置
 324   3                                      Map[pos] =0;   //清空娃娃脸位置
 325   3                                      break;
 326   3                         case 2: //是圆形执行这里
 327   3                                      Map[pos-8] = 4;//娃娃脸的新位置
 328   3                                      Map[pos] =0;   //清空娃娃脸位置
 329   3                                      break;
 330   3                         case 3: //移动方向前面是箱子执行这里
 331   3                                      //箱子的前面不是墙或箱子或十字就可以移动
 332   3                                      if (Map[pos-16]==0)
 333   3                                      {
 334   4                                              Map[pos-16]= 3;//显示箱子
 335   4                                              Map[pos-8] = 4;//娃娃脸的新位置
 336   4                                              Map[pos] = 0; //清空娃娃脸位置
 337   4                                      }
 338   3                                      else if (Map[pos-16]==2)
 339   3                                      {
 340   4                                              Map[pos-16]= 5;//显示十字形
 341   4                                              Map[pos-8] = 4;//娃娃脸的新位置
 342   4                                              Map[pos] = 0; //清空娃娃脸位置
 343   4                                      }
 344   3                                      break;
 345   3                         case 5: //移动方向前面是十字执行这里
 346   3                                      //十字的前面不是墙或箱子或十字就可以移动
 347   3                                      if (Map[pos-16]==0)
 348   3                                      {
 349   4                                              Map[pos-16]= 3;//显示箱子
 350   4                                              Map[pos-8] = 4;//娃娃脸的新位置
 351   4                                              Map[pos] = 0; //清空娃娃脸位置
 352   4                                      }
 353   3                                      else if (Map[pos-16]==2)
 354   3                                      {
 355   4                                              Map[pos-16]= 5;//显示十字形
 356   4                                              Map[pos-8] = 4;//娃娃脸的新位置
 357   4                                              Map[pos] = 0; //清空娃娃脸位置
 358   4                                      }
 359   3                                      break;
 360   3                }
 361   2                 Refyuan();//刷新圆形并判断是否满足(过关!)
 362   2                MapCreate(); //刷新地图
 363   2            GameDisplay();//显示游戏界面
 364   2               
 365   2         }
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 7   

 366   1      }
 367          /**********************************************************
 368          *函数名:DownMove() 
 369          *功  能:娃娃脸向下移动 +8
 370          **********************************************************/
 371          void DownMove()
 372          {
 373   1         uchar pos;
 374   1         pos = ReadPosition(); //获得娃娃脸的位置
 375   1         if (Map[pos+8]!=1)//判断移动方向前面是否是墙
 376   1         {
 377   2               switch (Map[pos+8]) //得到娃娃脸前面的图形
 378   2                {
 379   3                         case 0: //移动方向前面是空的执行这里
 380   3                                      Map[pos+8] = 4;//娃娃脸的新位置
 381   3                                      Map[pos] = 0; //清空娃娃脸位置
 382   3                                      break;
 383   3                         case 2: //是圆形执行这里
 384   3                                      Map[pos+8] = 4;//娃娃脸的新位置
 385   3                                      Map[pos] = 0; //清空娃娃脸位置
 386   3                                      break;
 387   3                         case 3: //移动方向前面是箱子执行这里
 388   3                         //箱子的前面不是墙或箱子或十字就可以移动
 389   3                                      if (Map[pos+16]==0)
 390   3                                      {
 391   4                                              Map[pos+16]= 3;//显示箱子
 392   4                                              Map[pos+8] = 4;//娃娃脸的新位置
 393   4                                              Map[pos] = 0; //清空娃娃脸位置
 394   4                                      }
 395   3                                      else if(Map[pos+16]==2)
 396   3                                      {
 397   4                                              Map[pos+16]= 5;//显示十字形
 398   4                                              Map[pos+8] = 4;//娃娃脸的新位置
 399   4                                              Map[pos] = 0; //清空娃娃脸位置
 400   4                                      }
 401   3                                      break;
 402   3                         case 5: //移动方向前面是十字执行这里
 403   3                                      //十字的前面不是墙或箱子或十字就可以移动
 404   3                                      if (Map[pos+16]==0)
 405   3                                      {
 406   4                                              Map[pos+16]= 3;//显示箱子
 407   4                                              Map[pos+8] = 4;//娃娃脸的新位置
 408   4                                              Map[pos] = 0; //清空娃娃脸位置
 409   4                                      }
 410   3                                      else if(Map[pos+16]==2)
 411   3                                      {
 412   4                                              Map[pos+16]= 5;//显示十字形
 413   4                                              Map[pos+8] = 4;//娃娃脸的新位置
 414   4                                              Map[pos] = 0; //清空娃娃脸位置
 415   4                                      }
 416   3                                      break;
 417   3                }
 418   2                 Refyuan();//刷新圆形并判断是否满足(过关!)
 419   2                MapCreate(); //刷新地图
 420   2            GameDisplay();//显示游戏界面
 421   2         }
 422   1      }
 423          /**********************************************************
 424          *函数名:LeftMove() 
 425          *功  能:娃娃脸向左移动 -1
 426          **********************************************************/
 427          void LeftMove()
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 8   

 428          {
 429   1         uchar pos;
 430   1         pos = ReadPosition(); //获得娃娃脸的位置
 431   1         if (Map[pos-1]!=1)//判断移动方向前面是否是墙
 432   1         {
 433   2                switch (Map[pos-1]) 
 434   2                {
 435   3                         case 0: //移动方向前面是空的执行这里
 436   3                                      Map[pos-1] = 4;//娃娃脸的新位置
 437   3                                      Map[pos] =0; //清空娃娃脸位置
 438   3                                      break;
 439   3                         case 2: //是圆形执行这里
 440   3                                      Map[pos-1] = 4;//娃娃脸的新位置
 441   3                                      Map[pos] =0; //清空娃娃脸位置
 442   3                                      break;
 443   3                         case 3: //移动方向前面是箱子执行这里
 444   3                                      //箱子的前面不是墙或箱子或十字就可以移动
 445   3                                      if (Map[pos-2]==0)
 446   3                                      {
 447   4                                              Map[pos-2]= 3;//显示箱子
 448   4                                              Map[pos-1]= 4;//娃娃脸的新位置
 449   4                                              Map[pos] = 0; //清空娃娃脸位置
 450   4                                      }
 451   3                                      else if (Map[pos-2]==2)
 452   3                                      {
 453   4                                          Map[pos-2]= 5; //显示十字形
 454   4                                              Map[pos-1]= 4;//娃娃脸的新位置
 455   4                                              Map[pos] = 0; //清空娃娃脸位置
 456   4                                      }
 457   3                                      break;
 458   3                         case 5: //移动方向前面是十字执行这里
 459   3                                      //十字的前面不是墙或箱子或十字就可以移动
 460   3                                      if (Map[pos-2]==0)
 461   3                                      {
 462   4                                              Map[pos-2]= 3;//显示箱子
 463   4                                              Map[pos-1]= 4;//娃娃脸的新位置
 464   4                                              Map[pos] = 0; //清空娃娃脸位置
 465   4                                      }

⌨️ 快捷键说明

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