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

📄 e.lst

📁 这是用一个52单片机实现的俄罗斯方块游戏
💻 LST
📖 第 1 页 / 共 3 页
字号:
 263          {
 264   1      char  i=0,j=0;
 265   1      ////////////////////////////////ditu[][0]  form 1 not  from 0
 266   1      ////////////////////////////////ditu[][0]=y-1
 267   1      y--;
 268   1      i=y/8;
 269   1      j=y%8;
 270   1      if(z==1)       {tidu[x][i]|=1<<j;     onepoint(x,y+1);}
 271   1      else if(z==0)  {tidu[x][i]&=~(1<<j);  clr_onepoint(x,y+1);}
 272   1      }
 273          
 274          
 275          ////////////////////////////读出地图x:line y:colum 
 276          unsigned char   read_ditu(unsigned char x,unsigned char y)
 277          {
 278   1      char  i=0,j=0,k=0;
 279   1      ////////////////////////////////ditu[][0]  form 1 not  from 0
 280   1      ////////////////////////////////ditu[][0]=y-1
 281   1      y--;
 282   1      i=y/8;
 283   1      j=y%8;
 284   1      k|=1<<j;
 285   1      
 286   1      if(tidu[x][i]&k) return 1;//have point 
 287   1      else             return 0;//no point               
 288   1      }
 289          
 290          ////////////////////////////generate a box
 291          void  Box_Generate()
 292          {
 293   1          static unsigned char    box_no=5;
 294   1      
 295   1              this.x=0;this.y=20;
 296   1          this.BlckIndex = (box_no++)%7;
 297   1          this.Status = 0;
 298   1      
 299   1          this.pPIC   = TtrsBlck
 300   1                      + TtrsBlckPoint[this.BlckIndex] 
 301   1                      + (this.Status) * 4;
 302   1      }
C51 COMPILER V8.02   E                                                                     11/05/2008 19:09:21 PAGE 6   

 303          
 304          ////////////////////////////if there is the  game  line
 305          unsigned  char  Check_Box_gameline()
 306          {
 307   1      for(i=0;i<4;i++)
 308   1      {
 309   2      //if(this.pPIC[i]&0x08){if((this.x+i>30)||((this.y+1)>40)||((this.y+1)<1)) return 1;}//have point
 310   2      //if(this.pPIC[i]&0x04){if((this.x+i>30)||((this.y+2)>40)||((this.y+2)<1))  return 1;}//have point
 311   2      //if(this.pPIC[i]&0x02){if((this.x+i>30)||((this.y+3)>40)||((this.y+3)<1))  return 1;}//have point
 312   2      //if(this.pPIC[i]&0x01){if((this.x+i>30)||((this.y+4)>40)||((this.y+4)<1))  return 1;}//have point
 313   2      
 314   2      if(this.pPIC[i]&0x08){if((this.x+i>30)||((this.y+1)>40))  return 1;}//have point
 315   2      if(this.pPIC[i]&0x04){if((this.x+i>30)||((this.y+2)>40))  return 1;}//have point
 316   2      if(this.pPIC[i]&0x02){if((this.x+i>30)||((this.y+3)>40))  return 1;}//have point
 317   2      if(this.pPIC[i]&0x01){if((this.x+i>30)||((this.y+4)>40))  return 1;}//have point
 318   2      }
 319   1      return 0;//no point
 320   1      }
 321          
 322          ////////////////////////////if there hava box
 323          unsigned  char  Check_Box_ditu()
 324          {
 325   1      for(i=0;i<4;i++)
 326   1      {
 327   2      if(this.pPIC[i]&0x08){if(read_ditu(this.x+i,this.y+1))  return 1;}//have point
 328   2      if(this.pPIC[i]&0x04){if(read_ditu(this.x+i,this.y+2))return 1;}//have point
 329   2      if(this.pPIC[i]&0x02){if(read_ditu(this.x+i,this.y+3))return 1;}//have point
 330   2      if(this.pPIC[i]&0x01){if(read_ditu(this.x+i,this.y+4))return 1;}//have point
 331   2      }
 332   1      return 0;//no point
 333   1      }
 334          //////////////////////////////////
 335          //if it  can  ratation
 336          //////////////////////////////////
 337          unsigned  char  Check_Box_ditu_ratation()
 338          {
 339   1      for(i=0;i<4;i++)
 340   1      {
 341   2      {if(read_ditu(this.x+i,this.y+1))  return 1;}//have point
 342   2      {if(read_ditu(this.x+i,this.y+2))return 1;}//have point
 343   2      {if(read_ditu(this.x+i,this.y+3))return 1;}//have point
 344   2      {if(read_ditu(this.x+i,this.y+4))return 1;}//have point
 345   2      if(this.x>27)return 1;//bottom line
 346   2      if(this.y>37)return 1;//right line
 347   2      }
 348   1      return 0;//no point
 349   1      }
 350          
 351          
 352          ////////////////////////////write a box
 353          void Write_Box_ditu()
 354          {
 355   1      for(i=0;i<4;i++)
 356   1      {
 357   2      if(this.pPIC[i]&0x08) { onepoint(this.x+i,this.y+1); write_ditu(this.x+i,this.y+1,1);}
 358   2      if(this.pPIC[i]&0x04) { onepoint(this.x+i,this.y+2); write_ditu(this.x+i,this.y+2,1);}
 359   2      if(this.pPIC[i]&0x02) { onepoint(this.x+i,this.y+3); write_ditu(this.x+i,this.y+3,1);}
 360   2      if(this.pPIC[i]&0x01) { onepoint(this.x+i,this.y+4); write_ditu(this.x+i,this.y+4,1);}
 361   2      }
 362   1      
 363   1      }
 364          
C51 COMPILER V8.02   E                                                                     11/05/2008 19:09:21 PAGE 7   

 365          ////////////////////////////clear a box
 366          void  Clr_Box_ditu()
 367          {
 368   1      for(i=0;i<4;i++)
 369   1      {
 370   2      if(this.pPIC[i]&0x08) { clr_onepoint(this.x+i,this.y+1); write_ditu(this.x+i,this.y+1,0);}
 371   2      if(this.pPIC[i]&0x04) { clr_onepoint(this.x+i,this.y+2); write_ditu(this.x+i,this.y+2,0);}
 372   2      if(this.pPIC[i]&0x02) { clr_onepoint(this.x+i,this.y+3); write_ditu(this.x+i,this.y+3,0);}
 373   2      if(this.pPIC[i]&0x01) { clr_onepoint(this.x+i,this.y+4); write_ditu(this.x+i,this.y+4,0);}
 374   2      }
 375   1      
 376   1      }
 377          
 378          void  game_line()
 379          {
 380   1      for(i=0;i<32;i++)
 381   1      {onepoint(i,0);
 382   2       onepoint(i,41);}
 383   1      for(i=0;i<42;i++)
 384   1      {onepoint(31,i);}
 385   1      }
 386          
 387          
 388          void mov_left()
 389          {
 390   1      Clr_Box_ditu();
 391   1      this.y--;
 392   1      
 393   1      if((Check_Box_ditu())||(Check_Box_gameline()))//crack
 394   1      this.y++;
 395   1      
 396   1      Write_Box_ditu();
 397   1      }
 398          
 399          void mov_right()
 400          {
 401   1      Clr_Box_ditu();
 402   1      this.y++;
 403   1      
 404   1      if((Check_Box_ditu())||(Check_Box_gameline()))//crack
 405   1      this.y--;
 406   1      
 407   1      Write_Box_ditu();
 408   1      }
 409          
 410          
 411          void mov_ratation()
 412          {
 413   1         Clr_Box_ditu();
 414   1      
 415   1       if(Check_Box_ditu_ratation()==0) ///////////////////////////////////////
 416   1               {
 417   2          //状态转变
 418   2          this.Status ++;
 419   2          if(this.Status >= TtrsBlckStsNum[this.BlckIndex])  this.Status = 0;
 420   2      
 421   2          this.pPIC   = TtrsBlck
 422   2                      + TtrsBlckPoint[this.BlckIndex] 
 423   2                      + (this.Status) * 4;
 424   2              }
 425   1      Write_Box_ditu();
 426   1      
C51 COMPILER V8.02   E                                                                     11/05/2008 19:09:21 PAGE 8   

 427   1      }
 428          
 429          //////////////////////////////////
 430          //crack_state=0;can move down
 431          //crack_state=1;can not  move down check is have full lines then  delete it
 432          //////////////////////////////////
 433          
 434          void  mov_down()
 435          {
 436   1      down_time=0;
 437   1      Clr_Box_ditu();
 438   1      this.x++;
 439   1      if((Check_Box_ditu())||(Check_Box_gameline()))//crack
 440   1      {this.x--;           crack_state=1;}
 441   1      else             crack_state=0;
 442   1      Write_Box_ditu();
 443   1      if(crack_state==1)check_ditu();
 444   1      }
 445          
 446          
 447          ////////////////////////////////////////////////////延时
 448          void delay_us(unsigned  int a)
 449          {
 450   1      while(a>0)a--;
 451   1      }
 452          
 453          void delay_ms(unsigned  int a)
 454          {
 455   1      while(a>0)
 456   1      {a--;delay_us(250);}
 457   1      }
 458          //////////////////////////////////////////////////////////
 459          //
 460          //////////////////////////////////////////////////////////
 461          ////////////////////////////////////////////////////液晶基本函数
 462          char RdStateLcd( )
 463           {
 464   1        unsigned char state;
 465   1      
 466   1        Rs_Lcd=0;
 467   1        Rw_Lcd=1;
 468   1        En_Lcd=1;
 469   1      
 470   1        state=DataBuss;
 471   1        En_Lcd=0;
 472   1        
 473   1        return(state);
 474   1       }
 475          
 476          
 477          char WrCommandIc(unsigned char Command)
 478           { 
 479   1        unsigned char state,tmp;
 480   1      
 481   1        state=0;
 482   1        for(tmp=0xFF;(RdStateLcd( )&0x80)&&(tmp>0x00);tmp--)
 483   1         { ; }
 484   1        if(tmp==0)
 485   1         { state=0xFF; }
 486   1        else
 487   1         {
 488   2          Rs_Lcd=0;
C51 COMPILER V8.02   E                                                                     11/05/2008 19:09:21 PAGE 9   

 489   2          Rw_Lcd=0; 
 490   2              DataBuss=Command;
 491   2              En_Lcd=1;
 492   2              En_Lcd=0;
 493   2         }
 494   1        return(state);   
 495   1       }
 496          
 497          char WrCommandLcd(unsigned char Command)
 498           {
 499   1              unsigned char state;
 500   1      
 501   1              Cs1_Lcd=1;
 502   1              Cs2_Lcd=0;
 503   1              state=WrCommandIc(Command);
 504   1              if(state==0)
 505   1               {
 506   2                Cs1_Lcd=0;
 507   2                Cs2_Lcd=1;
 508   2                state=WrCommandIc(Command);
 509   2               }
 510   1              return(state);
 511   1       }
 512          
 513          char WrDataLcd(unsigned char dat)
 514           {
 515   1        unsigned char state,tmp;
 516   1      
 517   1        state=0;
 518   1        for(tmp=0xFF;(RdStateLcd( )&0x80)&&(tmp>0x00);tmp--)//ban mang ?
 519   1         { ; }
 520   1        if(tmp==0)
 521   1         { state=0xFF; }
 522   1        else
 523   1         {
 524   2              Rw_Lcd=0;
 525   2          Rs_Lcd=1;
 526   2              DataBuss=dat;
 527   2              En_Lcd=1;
 528   2              En_Lcd=0;
 529   2         }
 530   1        return(state);        
 531   1       }
 532          
 533             //***********************************************
 534             //* Name:           SetStarLine

⌨️ 快捷键说明

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