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

📄 blockgame.lst

📁 单片机版俄罗斯方块游戏
💻 LST
📖 第 1 页 / 共 2 页
字号:
 233   1              BOOL bOperated=myTrue;
 234   1      
 235   1              if(!MoveBlock(pGame,eMoveTurn)) /*旋转不成功*/
 236   1              {
 237   2                      bOperated = myFalse;
 238   2              }
 239   1              if(!bOperated)
 240   1              {
 241   2                      if(MoveBlock(pGame,eMoveLeft))
C51 COMPILER V7.06   BLOCKGAME                                                             11/12/2008 09:12:21 PAGE 5   

 242   2                      {
 243   3                              if(!MoveBlock(pGame,eMoveTurn)) /*左移旋转不成功*/
 244   3                              {
 245   4                                      bOperated = myFalse;
 246   4                                      MoveBlock(pGame,eMoveRight);
 247   4                              }
 248   3                              else
 249   3                                      bOperated = myTrue;
 250   3                      }
 251   2              }
 252   1      
 253   1              if(!bOperated)
 254   1              {
 255   2                      if(MoveBlock(pGame,eMoveRight))
 256   2                      {
 257   3                              if(!MoveBlock(pGame,eMoveTurn)) /*右移旋转不成功*/
 258   3                              {
 259   4                                      bOperated = myFalse;
 260   4                                      MoveBlock(pGame,eMoveLeft);
 261   4                              }
 262   3                              else
 263   3                                      bOperated = myTrue;                     
 264   3                      }
 265   2              }
 266   1      
 267   1              if(!bOperated)
 268   1              {
 269   2                      if(MoveBlock(pGame,eMoveDown))
 270   2                      {
 271   3                              if(!MoveBlock(pGame,eMoveTurn)) /*下移旋转不成功*/
 272   3                              {
 273   4                                      bOperated = myFalse;
 274   4                                      MoveBlock(pGame,eMoveUp);
 275   4                              }
 276   3                              else
 277   3                                      bOperated = myTrue;                     
 278   3                      }
 279   2              }
 280   1      
 281   1              if(!bOperated)
 282   1              {
 283   2                      if(MoveBlock(pGame,eMoveUp))
 284   2                      {
 285   3                              if(!MoveBlock(pGame,eMoveTurn)) /*上移旋转不成功*/
 286   3                              {
 287   4                                      bOperated = myFalse;
 288   4                                      MoveBlock(pGame,eMoveDown);
 289   4                              }
 290   3                              else
 291   3                                      bOperated = myTrue;                     
 292   3                      }
 293   2              }
 294   1              
 295   1              return bOperated;
 296   1      }
 297          
 298          /*-固定方块在方格上-*/
 299          void FixCurBlock(  BLOCK_GAME* pGame )
 300          {
 301   1              UINT8 i;
 302   1              UINT16 tmp;
 303   1              for(i=0;i<4;i++)
C51 COMPILER V7.06   BLOCKGAME                                                             11/12/2008 09:12:21 PAGE 6   

 304   1              {
 305   2                      tmp=pGame->GameBlock.BlocksInfo;
 306   2                      tmp=(tmp>>i*4)&0x000F;
 307   2                      tmp=tmp<<pGame->GameBlock.nFirstBlockCol;
 308   2      
 309   2                      pGame->GameGrid.Grid[pGame->GameBlock.nFirstBlockRow+i] =
 310   2                              pGame->GameGrid.Grid[pGame->GameBlock.nFirstBlockRow+i]|tmp;
 311   2              }
 312   1      }
 313          
 314          /*-消满行-*/
 315          BOOL AdjustGrid( BLOCK_GAME* pGame )
 316          {
 317   1              UINT8 i=0,m=0;
 318   1              BOOL bAdjusted=0;
 319   1      
 320   1              for(i=GAME_FIRST_ROW;i<=GAME_LAST_ROW;i++)
 321   1              {
 322   2                      if(pGame->GameGrid.Grid[i]==0xFFFF)
 323   2                      {
 324   3                              for(m=i;m>GAME_FIRST_ROW;m--){
 325   4                                      pGame->GameGrid.Grid[m]=pGame->GameGrid.Grid[m-1];                      
 326   4                              }                       
 327   3                              pGame->GameGrid.Grid[0]=myFalse;        
 328   3                              bAdjusted=1;
 329   3                      }
 330   2              }
 331   1              return bAdjusted;
 332   1      }
 333          
 334          /*--------------------------------------------------------------------------------*/
 335          
 336          void CopyGame( BLOCK_GAME* pDestGame, BLOCK_GAME* pSourGame )
 337          {
 338   1              memcpy(pDestGame,pSourGame,sizeof(BLOCK_GAME));
 339   1      }
 340          void CopyGameGrid( GAME_GRID* pDestGrid, GAME_GRID* pSourGrid )
 341          {
 342   1              memcpy(pDestGrid,pSourGrid,sizeof(GAME_GRID));
 343   1      }
 344          void CopyGameBlock( BLOCK_ATTR* pDestBlock, BLOCK_ATTR* pSourBlock )
 345          {
 346   1              memcpy(pDestBlock,pSourBlock,sizeof(BLOCK_ATTR));
 347   1      }
 348          void CopyGridAttr(GRID_ATTR* pDestAttr, GRID_ATTR* pSourAttr )
 349          {
 350   1              memcpy(pDestAttr,pSourAttr,sizeof(GRID_ATTR));
 351   1      }
 352          
 353          /*--------------------------------------------------------------------------------*/
 354          
 355          void GetGridAttr( BLOCK_GAME* pGame, GRID_ATTR* pGridAttr )
 356          {       
 357   1              pGridAttr->nLastBlockFirstRow = pGame->GameBlock.nFirstBlockRow;
 358   1              GetFullRow(pGame,pGridAttr);
 359   1              GetIdleBank(pGame,pGridAttr);
 360   1              GetGridHigh(pGame,pGridAttr);
 361   1              GetHighEdge(pGame,pGridAttr);   
 362   1      }
 363          void GetGridHigh( BLOCK_GAME* pGame, GRID_ATTR* pGridAttr )
 364          {
 365   1              UINT8 i=0;
C51 COMPILER V7.06   BLOCKGAME                                                             11/12/2008 09:12:21 PAGE 7   

 366   1              for(i=GAME_FIRST_ROW;i<=GAME_LAST_ROW;i++)
 367   1              {               
 368   2                      if(pGame->GameGrid.Grid[i]&0x1FF8){                     
 369   3                              break;
 370   3                      }
 371   2              }
 372   1              pGridAttr->nGrideHeight = GAME_LAST_ROW-i+1;
 373   1      }
 374          
 375          void GetFullRow( BLOCK_GAME* pGame, GRID_ATTR* pGridAttr )
 376          {
 377   1              UINT8 nFullCount=0;
 378   1              UINT8 i=0;
 379   1              nFullCount=0;
 380   1              for(i=GAME_FIRST_ROW;i<=GAME_LAST_ROW;i++)
 381   1              {               
 382   2                      if(pGame->GameGrid.Grid[i]==0xFFFF)
 383   2                      {                       
 384   3                              nFullCount++;
 385   3                      }
 386   2              }
 387   1              pGridAttr->nFullRowCount=nFullCount;    
 388   1      }
 389          
 390          /* 计算无用的空格数 */
 391          void GetIdleBank( BLOCK_GAME* pGame, GRID_ATTR* pGridAttr ) 
 392          {
 393   1              UINT8 nIdleBankCount=0;
 394   1              UINT8 i=0, j=0;
 395   1              nIdleBankCount=0;
 396   1      
 397   1              for( j=GAME_FIRST_COL;j<=GAME_LAST_COL;j++)
 398   1              {
 399   2                      i=GAME_FIRST_ROW;
 400   2                      while(i<=GAME_LAST_ROW 
 401   2                              && (0x0000==(pGame->GameGrid.Grid[i]&(0x0001<<j))) ) 
 402   2                              i++; // 找第一个填充格
 403   2      
 404   2                      while(i<=GAME_LAST_ROW){
 405   3                              if( !(pGame->GameGrid.Grid[i++]>>j&0x01) ) nIdleBankCount+=1;
 406   3                      }
 407   2              }
 408   1              pGridAttr->nIdleBankCount = nIdleBankCount;
 409   1              
 410   1      }
 411          /* 计算高边 */
 412          void GetHighEdge(BLOCK_GAME* pGame, GRID_ATTR* pGridAttr ) 
 413          {
 414   1              UINT8 i, j, m;
 415   1              UINT8 EdgeCount;
 416   1              UINT8 tmpBankCount;
 417   1              UINT8 MostHighEage;
 418   1       
 419   1              EdgeCount = 0;
 420   1              MostHighEage = 0;
 421   1      
 422   1              for(j=GAME_FIRST_COL;j<=GAME_LAST_COL;j++)
 423   1              {
 424   2                      i=GAME_FIRST_ROW;               
 425   2                      while( (i<=GAME_LAST_ROW) 
 426   2                             && (0x0==(pGame->GameGrid.Grid[i]&(0x0001<<j))) )i++;
 427   2                      m = i;
C51 COMPILER V7.06   BLOCKGAME                                                             11/12/2008 09:12:21 PAGE 8   

 428   2                      tmpBankCount=0;   /* 左边 */
 429   2                      while( (m<=GAME_LAST_ROW)
 430   2                                && (0x0==(pGame->GameGrid.Grid[m]&(0x0001<<(j-1)))) )
 431   2                      {
 432   3                              m++;
 433   3                              tmpBankCount++;
 434   3                              MostHighEage=(MostHighEage<tmpBankCount)?tmpBankCount:MostHighEage;
 435   3                      }
 436   2                      if(tmpBankCount>2){
 437   3                              EdgeCount++;
 438   3                      }
 439   2                      m = i;
 440   2                      tmpBankCount=0;   /* 右边 */
 441   2                      while( (m<=GAME_LAST_ROW)
 442   2                              && (0x0==(pGame->GameGrid.Grid[m]&(0x0001<<(j+1)))) )
 443   2                      {
 444   3                              m++;
 445   3                              tmpBankCount++;
 446   3                              MostHighEage=(MostHighEage<tmpBankCount)?tmpBankCount:MostHighEage;
 447   3                      }
 448   2                      if(tmpBankCount>2){
 449   3                              EdgeCount++;
 450   3                      }
 451   2              }
 452   1              pGridAttr->nHighEdgeCount=EdgeCount;    
 453   1              pGridAttr->nMostHighEdgeHeight=(0==EdgeCount)?0:MostHighEage;   
 454   1      }
 455          /*--------------------------------------------------------------------------------*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2394    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      90
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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