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

📄 16x16飞机射击游戏.lst

📁 16X16点阵做的射击游戏,类似于俄罗斯方块的点阵游戏,附带proteus仿真原理图.keilC51编译
💻 LST
📖 第 1 页 / 共 2 页
字号:
 328   5               }
 329   4      
 330   4              }
 331   3              if(GoOrStay==-1)//如果未开始则为上下选择功能
 332   3              {
 333   4                if(xuanze==0)
 334   4                xuanze=1;
 335   4                else
 336   4                xuanze=0;
 337   4              }
 338   3              if(GoOrStay==2)//如果为设置则选择关数
 339   3               {
 340   4                if(Guan==9)
 341   4                 Guan=0;
 342   4                 else
 343   4                 Guan++;
 344   4               }
 345   3                              //等手放开
 346   3              n=DENGFANKAISHIJIAN;
 347   3              while(A_L==0)
 348   3              {
 349   4              A_L=1;
 350   4              dian1616(TU); //显示
 351   4              n--;
 352   4              if(n==0)
 353   4              break;//按钮超时退出
 354   4              }
 355   3              }//
 356   2        }
 357   1      }
 358          ///
 359            ////
 360          void AnNiu_R(void)//右按钮
 361          {
 362   1        unsigned int n;//超时变量
 363   1        A_R=1;
 364   1       if(A_R==0)
 365   1        {
C51 COMPILER V8.02   16X16飞籣射籣游戏                                                     11/21/2008 23:01:10 PAGE 7   

 366   2         A_R=1;
 367   2         QuDouDong(QUDOUDONGSHIJIAN); //去抖动
 368   2              if(A_R==0)      //确认进入
 369   2              {
 370   3               if(GoOrStay==0)//如果正在游戏则用左右功能
 371   3               {
 372   4               if(feiji.x==9)//如果是最右则去最左
 373   4               {
 374   5                 feiji.x=0;
 375   5               }
 376   4               else
 377   4               {
 378   5               feiji.x++;//沿x轴右移
 379   5               }
 380   4      
 381   4              }
 382   3              if(GoOrStay==-1)//如果未开始则为上下选择功能
 383   3              {
 384   4                if(xuanze==0)
 385   4                xuanze=1;
 386   4                else
 387   4                xuanze=0;
 388   4              }
 389   3               if(GoOrStay==2)//如果为设置则选择关数
 390   3               {
 391   4                if(Guan==0)
 392   4                 Guan=9;
 393   4                 else
 394   4                 Guan--;
 395   4               }
 396   3                              //等手放开
 397   3              n=DENGFANKAISHIJIAN;
 398   3              while(A_R==0)
 399   3              {
 400   4              A_R=1;
 401   4              dian1616(TU); //显示
 402   4              n--;
 403   4              if(n==0)
 404   4              break;//按钮超时退出
 405   4              }
 406   3              }//
 407   2        }
 408   1      }
 409          ///
 410          //////
 411          void AnNiu_T(void)//退出
 412          {
 413   1       unsigned int n;
 414   1       A_T=1;
 415   1       if(A_T==0)
 416   1       {
 417   2         A_T=1;
 418   2         if(A_T==0)
 419   2         {
 420   3              A_T=1;
 421   3              QuDouDong(QUDOUDONGSHIJIAN);//去抖动
 422   3              if(A_T==0)
 423   3              {
 424   4            chuqihua();    //初始化
 425   4      
 426   4      
 427   4               //等手放开
C51 COMPILER V8.02   16X16飞籣射籣游戏                                                     11/21/2008 23:01:10 PAGE 8   

 428   4              n=DENGFANKAISHIJIAN;
 429   4              while(A_T==0)
 430   4              {
 431   5              A_T=1;
 432   5              dian1616(TU); //显示
 433   5              n--;
 434   5              if(n==0)
 435   5              break;//按钮超时退出
 436   5              }
 437   4              }
 438   3         }
 439   2       }
 440   1      }
 441          ///
 442          ///
 443          void SheJi(void) //射击调整函数
 444          {  idata char y;
 445   1         
 446   1         y=TU_Y;
 447   1        
 448   1        if(y!=0)
 449   1        {
 450   2      
 451   2         if(feiji.x<8)//找出最凹的y坐标
 452   2          {    //在左半面找
 453   3                 for(;((~TU[2*(y-1)])&(0X80>>feiji.x))==((unsigned char)(feiji.t>>8));y--)
 454   3                 ;
 455   3              }
 456   2                       else 
 457   2              {        //在右半面找
 458   3                 for(;((~TU[2*(y-1)+1])&(0X80>>(feiji.x-8)))==((unsigned char)(feiji.t&0xc0));y--)
 459   3                     ;
 460   3              
 461   3               }
 462   2         TU[2*(y-1)]=(unsigned char)((~(feiji.t>>8))&TU[2*(y-1)]);
 463   2         TU[2*(y-1)+1]=(unsigned char)(~((feiji.t)&0x00c0)&TU[2*(y-1)+1]);
 464   2        
 465   2        if((TU[2*(TU_Y-1)]==0)&&((TU[2*(TU_Y-1)+1]&0xc0)==0))
 466   2         {TU_Y--;
 467   3               
 468   3         }
 469   2         }
 470   1              dian1616(TU); //显示
 471   1      }
 472          void AnNiu_F(void)//判射击按钮
 473          {       unsigned int n;
 474   1              A_F=1;
 475   1        if(A_F==0)
 476   1        {
 477   2         A_F=1;
 478   2         QuDouDong(QUDOUDONGSHIJIAN);//去抖动
 479   2         if(A_F==0)
 480   2         {
 481   3          if(GoOrStay==0)
 482   3          SheJi();//射击调整函数
 483   3      
 484   3                 //等手放开
 485   3              n=2; //射击键超时少一点
 486   3              while(A_F==0)
 487   3              {
 488   4              A_F=1;
 489   4              dian1616(TU); //显示
C51 COMPILER V8.02   16X16飞籣射籣游戏                                                     11/21/2008 23:01:10 PAGE 9   

 490   4              n--;
 491   4              if(n==0)
 492   4              break;//按钮超时退出
 493   4              }
 494   3         }
 495   2        }
 496   1      }
 497          void AnNiu(void)  //按钮实现
 498          {
 499   1         AnNiu_S() ;//判开始暂停
 500   1         AnNiu_L() ;//判断左按钮
 501   1         AnNiu_R() ;   //判断右按钮
 502   1         AnNiu_F() ;   //判断射击
 503   1         AnNiu_T() ;//判断退出
 504   1        
 505   1      }
 506          ////
 507          void FAIL(void) //失败画面
 508          {
 509   1       idata unsigned int n;
 510   1       n=300;
 511   1       while(n--)
 512   1        dian1616(over);
 513   1        chuqihua();//初始化
 514   1      }       
 515          void WINN(void)//胜利
 516          {
 517   1      
 518   1       idata unsigned int n;
 519   1       n=300;
 520   1       while(n--)
 521   1       dian1616(win);
 522   1       chuqihua(); //初始化
 523   1      }
 524          
 525          void winORfail(void)//判断胜利还是失败
 526          { 
 527   1        if(Guan>9)//10关全过胜利
 528   1         WINN();//胜利画面
 529   1        else  
 530   1        if(TU_Y>14)
 531   1         FAIL();
 532   1        
 533   1      }
 534          ////
 535          void SheZhi(void)//设置画面
 536          {
 537   1        TU[30]=TU[28]=0xff;//去掉飞机图形
 538   1        TU[29]|=0XC0;
 539   1        TU[31]|=0XC0;
 540   1        
 541   1       guanshu(Guan);
 542   1       while(GoOrStay==2)
 543   1       {
 544   2       dian1616(TU); //显示
 545   2       AnNiu();
 546   2       }
 547   1      }
 548          //////菜单////
 549          void caidan(void)  
 550          {
 551   1              while(GoOrStay==-1|GoOrStay==2)//如果还没开始
C51 COMPILER V8.02   16X16飞籣射籣游戏                                                     11/21/2008 23:01:10 PAGE 10  

 552   1               {
 553   2               if(GoOrStay==-1)
 554   2         SHAN(xuanze);//选择画面
 555   2           if(GoOrStay==2) 
 556   2                  SheZhi();//设置画面   
 557   2               }
 558   1      }
 559          ///////////////////////////////////////////
 560          void TIME1(void) interrupt 3 //定时器1
 561          { TH1=0X3C;
 562   1        TL1=0XB0;//定时器初值
 563   1        EA=0;
 564   1        P3=0XF0;      
 565   1              
 566   1         //定时器处理
 567   1         time_a++;
 568   1         if(time_a==(40-Guan*2))
 569   1              { 
 570   2              ZHENGJIAYIXING();
 571   2              time_a=0;}
 572   1      
 573   1         time_b++;
 574   1         if(time_b==1200)
 575   1         {Guan++;
 576   2         time_b=0;
 577   2         }
 578   1         EA=1;
 579   1        TR1=1;
 580   1         TF1=0;
 581   1      }
 582          //定时器初始化
 583          void dishiqi(void)
 584          {
 585   1        TMOD=0X10;//定时器工作方式1
 586   1        TH1=0X3C;
 587   1        TL1=0XB0;//定时器初值
 588   1        ET1=1;
 589   1        EA=1;
 590   1        TF1=0;
 591   1        TR1=0;//关定时器
 592   1      }
 593          ////////////////////初始化//////////////////
 594           void chuqihua(void)//初始显示内容为0
 595           {
 596   1       idata char a;
 597   1       dishiqi() ;//定时器初始化
 598   1       for(a=0;a<32;a++)
 599   1       TU[a]=0x0;
 600   1       TU_Y=0;
 601   1       A_L =1 ;  //左移动
 602   1       A_R =1 ;  //右移动
 603   1       A_F =1 ;  //射击
 604   1       A_S =1 ;   //开始/暂停
 605   1       A_T =1 ; //退出
 606   1       P21=1;P22=1;P23=1;P24=1;
 607   1      
 608   1      
 609   1       for(a=0;a<16;a++)//画上边
 610   1       {
 611   2       TU[2*a+1]|=0x20;
 612   2       }
 613   1       ZHENGJIAYIXING(); //加一层
C51 COMPILER V8.02   16X16飞籣射籣游戏                                                     11/21/2008 23:01:10 PAGE 11  

 614   1      
 615   1         feiji.x=5;  //初始飞机位置
 616   1         GoOrStay=-1; //置状态标记为未开始
 617   1         Guan=0;//初始关卡为0
 618   1         
 619   1         xuanze=0;
 620   1      
 621   1       }
 622          /////////////////////////////////
 623           
 624          
 625                  
 626          void main()        //程序主函数
 627          {
 628   1         chuqihua();//初始化
 629   1         while(1)
 630   1         {
 631   2              if(GoOrStay==-1) 
 632   2              caidan();
 633   2          AnNiu(); //按钮      
 634   2              if(GoOrStay==0)
 635   2         {dian1616(TU); //显示
 636   3              TR1=1;//游戏时开定时器
 637   3         }
 638   2                 winORfail();//判断是否胜利
 639   2         if(GoOrStay==1)      //暂停
 640   2          {dian1616(stay);
 641   3               TR1=0;//关定时器
 642   3              }
 643   2         }
 644   1      }         
 645          
 646          
 647          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1639    ----
   CONSTANT SIZE    =    242    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     37      18
   IDATA SIZE       =      7       6
   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 + -