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

📄 function.lst

📁 51+3310做的俄罗斯方块
💻 LST
📖 第 1 页 / 共 3 页
字号:
 482   4                              }
 483   3                              Black_Ground[15]=temp;
 484   3                              for(i=0;i<16;i++)
 485   3                                      Map[i]=Map[i]|Black_Ground[i];
 486   3                              NewBlock=1;             //一个方块下落完毕,要求重新加载新方块
 487   3                              Quick_Down=0;       //方块快速下落完毕,清除快速下落标志
 488   3                              Block_Y--;
 489   3                              I=I1;               //将预览中的方块换成下一次要放的方块
C51 COMPILER V7.06   FUNCTION                                                              12/09/2008 01:11:01 PAGE 9   

 490   3                              J=J1;
 491   3                      }//向下处理  ,将方块加到背景地图中
 492   2              }
 493   1              keyvalue=keyvalue1=0xff;//查询到没有按键赋值为ff,不要方块以之前的方向一直移动
 494   1      //////////////////////////////////////////////////////////////
 495   1      /////////////////////////////////////////////////////////////
 496   1      
 497   1      //把变形的方块和背景一起画到Black_Ground数组中
 498   1              for(i=0;i<16;i++)
 499   1              {
 500   2                      Black_Ground[i]=Black_Ground[i]|Map[i];
 501   2              }
 502   1      //把变形的方块和背景一起画到Black_Ground数组中                  
 503   1      }
 504          
 505          
 506          
 507          
 508          
 509          
 510          
 511          uchar Keyscan()
 512          {
 513   1              temp0=(~temp0)&0xf0;
 514   1              temp1=(~temp1)&0x0f;
 515   1              temp0=temp0|temp1;
 516   1              switch (temp0)
 517   1              {
 518   2                      case 0x11: keyvalue=0;break;
 519   2                      case 0x21: keyvalue=1;break;
 520   2                      case 0x41: keyvalue=2;break;
 521   2                      case 0x81: keyvalue=3;break;
 522   2                      case 0x12: keyvalue=4;break;    
 523   2                      case 0x22: keyvalue=5;break;
 524   2                      case 0x42: keyvalue=6;break;
 525   2                      case 0x82: keyvalue=7;break;
 526   2                      case 0x14: keyvalue=8;break;
 527   2                      case 0x24: keyvalue=9;break;
 528   2                      case 0x44: keyvalue=10;break;
 529   2                      case 0x84: keyvalue=11;break;
 530   2                      case 0x18: keyvalue=12;break;
 531   2                      case 0x28: keyvalue=13;break;
 532   2                      case 0x48: keyvalue=14;break;
 533   2                      case 0x88: keyvalue=15;break;
 534   2                      default : keyvalue=0xff;break;
 535   2              }       
 536   1              return keyvalue;
 537   1      }
 538          
 539          
 540          
 541          
 542          void Init_Timer0()
 543          {
 544   1              EA=1;                           //开启总中断
 545   1              ET0=1;                          //开定时器0中断
 546   1              TMOD=0X01;                      //定时器0工作与16位的模式一
 547   1              TH0=0X77;          //定时10MS
 548   1              TL0=0Xff;
 549   1              TR0=1;             //定时器0开启
 550   1              TR1=1;             //定时器1开启
 551   1      
C51 COMPILER V7.06   FUNCTION                                                              12/09/2008 01:11:01 PAGE 10  

 552   1      }
 553          
 554          
 555          void Key()
 556          {
 557   1              P2=0xf0;
 558   1              temp0=P2;
 559   1              if(temp0!=0xf0)
 560   1              {
 561   2                      Delay(9);
 562   2                      P2=0xf0;
 563   2                      temp0=P2;
 564   2                      if(temp0!=0xf0)
 565   2                      {
 566   3                              P2=0x0f;
 567   3                              temp1=P2;
 568   3                              keyvalue=Keyscan();
 569   3                      }
 570   2              }
 571   1      }
 572          
 573          void Score()
 574          {
 575   1              uchar baiwei,shiwei,gewei;
 576   1              gewei=score1%10;
 577   1              shiwei=(score1/10)%10;
 578   1              baiwei=(score1/100);
 579   1              LCD_set_XY(60,4);
 580   1              LCD_write_char(baiwei+48);
 581   1              LCD_write_char(shiwei+48);
 582   1              LCD_write_char(gewei+48);
 583   1      }
 584          
 585          
 586          
 587          void Cancel_Line()
 588          {
 589   1              uchar i,z;
 590   1              uint16 j=0;
 591   1              if(NewBlock)        //一个方块下落完毕
 592   1              {
 593   2                      for(i=0;i<16;i++)
 594   2                      {
 595   3                              if(Map[i]==0xffff)
 596   3                                      {j=j|1;j=1;score1++;}
 597   3                      }
 598   2                      if(j!=0)
 599   2                      {
 600   3                              for(i=1;i<16;i++)
 601   3                              {
 602   4                                      if(Map[i]==0xffff)
 603   4                                      {
 604   5                                              for(z=i;z>0;z--)
 605   5                                              {
 606   6                                                      Map[z]=Map[z-1];        
 607   6                                              }
 608   5                                      }       
 609   4                              }
 610   3                              for(i=0;i<16;i++)
 611   3                              {
 612   4                                      Black_Ground[i]=0;
 613   4                                      Black_Ground[i]=Black_Ground[i]|Map[i];
C51 COMPILER V7.06   FUNCTION                                                              12/09/2008 01:11:01 PAGE 11  

 614   4                              }
 615   3                              LCD_write_CMD(0x20);    // 使用基本命令,采用水平模式
 616   3                              Score();
 617   3                      LCD_write_CMD(0x22);    // 使用基本命令,采用垂直模式
 618   3                              LCD_DrawBlackGround();
 619   3                      }
 620   2              }
 621   1      }
 622          
 623          
 624          void Next()
 625          {
 626   1              uchar i;
 627   1              uint16 next,temp0,temp1;
 628   1              next=Pic[I1][J1];
 629   1              LCD_write_CMD(0x22);    
 630   1              LCD_set_XY(62,1);
 631   1              for(i=0;i<4;i++)
 632   1              {
 633   2                      if(next&(0x8000>>i))
 634   2                              {temp0=0x000e;temp1=0x000a;}
 635   2                      else {temp0=0;temp1=0;}
 636   2                      if(next&(0x0800>>i))
 637   2                              {temp0=temp0|0x0070;temp1=temp1|0x0050;}
 638   2                      else {temp0=temp0|0;temp1=temp1|0;}
 639   2                      if(next&(0x0080>>i))
 640   2                              {temp0=temp0|0x0380;temp1=temp1|0x0280;}
 641   2                      else {temp0=temp0|0;temp1=temp1|0;}
 642   2                      if(next&(0x0008>>i))
 643   2                              {temp0=temp0|0x5c00;temp1=temp1|0x5400;}
 644   2                      else {temp0=temp0|0x2000;temp1=temp1|0x2000;}
 645   2                      LCD_write_Data((uchar)temp0);
 646   2                      LCD_write_Data((uchar)(temp0>>8));
 647   2                      LCD_set_XY(63+i*3,1);
 648   2                      LCD_write_Data((uchar)temp1);
 649   2                      LCD_write_Data((uchar)(temp1>>8));
 650   2                      LCD_set_XY(64+i*3,1);           
 651   2                      LCD_write_Data((uchar)temp0);
 652   2                      LCD_write_Data((uchar)(temp0>>8));
 653   2                      LCD_set_XY(65+i*3,1);                                   
 654   2              }       
 655   1      }
 656          
 657          
 658          void Pause()
 659          {
 660   1              Key();
 661   1              if(keyvalue==12)
 662   1              {
 663   2                      LCD_write_CMD(0x20);    // 使用基本命令,采用水平模式
 664   2                      LCD_write_english_string(10,2,"PAUSE!");
 665   2                      Delay(250);
 666   2                      keyvalue=0xff;
 667   2                      while(1)
 668   2                      {
 669   3                              Key();
 670   3                              if(keyvalue==12)
 671   3                                      {keyvalue=0xff;break;}  
 672   3                      }
 673   2                      LCD_write_CMD(0x22);    // 使用基本命令,采用垂直模式            
 674   2              }
 675   1      }
C51 COMPILER V7.06   FUNCTION                                                              12/09/2008 01:11:01 PAGE 12  

 676          
 677          /////////////////////////////////////////////////////////
 678          /////////////////游戏结束
 679          /*void Game_Over()
 680          {
 681                  if(Attack_Block())
 682                  {
 683                          LCD_write_CMD(0x20);    // 使用基本命令,采用水平模式
 684                          //LCD_write_CMD(0x0d);  // 设定显示模式,c正常显示,d反白显示
 685                          LCD_write_english_string(13,2,"GAME");  
 686                          LCD_write_english_string(12,3,"OVER!");
 687                          while(1);               //游戏结束,不再运行            
 688                  }               
 689          }*/
 690          /////////////////////////////////////////////////////////
 691          /////////////////游戏结束
 692          void Game_Over()
 693          {
 694   1              if(NewBlock)
 695   1              {
 696   2                      if(Block_Y==0)
 697   2                      {
 698   3                              LCD_write_CMD(0x20);    // 使用基本命令,采用水平模式
 699   3                              LCD_write_english_string(13,2,"GAME");  
 700   3                              LCD_write_english_string(12,3,"OVER!");
 701   3                              LCD_write_CMD(0x0d);    // 设定显示模式,c正常显示,d反白显示
 702   3                              while(1);               //游戏结束,不再运行
 703   3                      }       
 704   2              }
 705   1      }
 706          
 707          
 708          
 709          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3260    ----
   CONSTANT SIZE    =    654    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     83      40
   IDATA SIZE       =   ----    ----
   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 + -