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

📄 blockgame.lst

📁 单片机版俄罗斯方块游戏
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   BLOCKGAME                                                             11/12/2008 09:12:21 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE BLOCKGAME
OBJECT MODULE PLACED IN BlockGame.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE BlockGame.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*-----------------------------------------------------------------俄罗斯方块游戏-*/
   2          /*----------------------------------------------write by codekey, codekey@126.com-*/
   3          /*-------------------------------------------------------------------------2008-3-*/
   4          /*---------------------------------------------欢迎使用和修改,但需保留原作者信息-*/
   5          /*--------------------------------------------------------------------------------*/
   6          #include <reg52.h>
   7          #include <stdlib.h>
   8          #include <STRING.H>
   9          #include "BlockGame.h"
  10          /*--------------------------------------------------------------------------------*/
  11          void InitGame( BLOCK_GAME* pGame )
  12          {       
  13   1              UINT8 i;
  14   1              /* 初始化游戏格子 */
  15   1              for(i=0;i<GAME_GRID_ROW;i++){
  16   2                      pGame->GameGrid.Grid[i]=0xE007; 
  17   2              } 
  18   1              for(i=0;i<3;i++){
  19   2                      pGame->GameGrid.Grid[i]=0xFFFF; 
  20   2                      pGame->GameGrid.Grid[GAME_GRID_ROW-i-1]=0xFFFF;
  21   2              }
  22   1              pGame->GameBlock.nNextBlockType=rand()%7;
  23   1      }
  24          
  25          BOOL NewGame( BLOCK_GAME* pGame )
  26          {
  27   1              InitGame(pGame);
  28   1              NewBlock(pGame);
  29   1              return 0;
  30   1      }
  31          void GameOver( BLOCK_GAME* pGame )
  32          {
  33   1              NewGame(pGame);
  34   1      }
  35          
  36          BOOL NewBlock( BLOCK_GAME* pGame )
  37          {       
  38   1              static UINT8 gc=0;
  39   1      
  40   1              pGame->GameBlock.nCurBlockType=pGame->GameBlock.nNextBlockType;
  41   1              pGame->GameBlock.nCurBlockStatus=0;
  42   1              pGame->GameBlock.nNextBlockType=rand()%7;
  43   1              if(pGame->GameBlock.nNextBlockType==pGame->GameBlock.nCurBlockType)
  44   1                      pGame->GameBlock.nNextBlockType=(pGame->GameBlock.nNextBlockType+1)%7;
  45   1              gc++;
  46   1              if(gc>=6)
  47   1              {       
  48   2                      pGame->GameBlock.nNextBlockType=1;              
  49   2                      gc=0;
  50   2              }
  51   1              // need a better algorithm or a better evaluating function 
  52   1              // to make cmputer to run as an expert.
  53   1      
  54   1              pGame->GameBlock.nFirstBlockRow=GAME_FIRST_ROW-1;
  55   1              pGame->GameBlock.nFirstBlockCol=(GAME_LAST_COL-GAME_FIRST_COL+1-4)/2+GAME_FIRST_COL;
C51 COMPILER V7.06   BLOCKGAME                                                             11/12/2008 09:12:21 PAGE 2   

  56   1              BuildBlocks(pGame);
  57   1              return BlockGridConsistent(pGame);
  58   1      }
  59          
  60          /* 判断方格是否可以容纳方块 */
  61          BOOL BlockGridConsistent( BLOCK_GAME* pGame )
  62          {
  63   1              UINT8 i;
  64   1              UINT16 tmp;
  65   1              for(i=0;i<4;i++)
  66   1              {       
  67   2                      tmp=(pGame->GameBlock.BlocksInfo>>(i*4))&0x000F;
  68   2                      tmp=tmp<<pGame->GameBlock.nFirstBlockCol;
  69   2                      if( (pGame->GameGrid.Grid[i+pGame->GameBlock.nFirstBlockRow]&tmp)!=0x0 )
  70   2                      {                       
  71   3                              return 0;
  72   3                      }
  73   2              }
  74   1              return 1;
  75   1      }
  76           /* 生成方块 */
  77          void BuildBlocks( BLOCK_GAME* pGame )   /*之所以采取这种方式,为了减少ram存储空间*/
  78          { 
  79   1              switch(pGame->GameBlock.nCurBlockType)   
  80   1              {
  81   2              case 0: /*一种状态*/
  82   2                      pGame->GameBlock.BlocksInfo=0x0660;
  83   2                      break;
  84   2              case 1: /*两种状态*/
  85   2                      switch(pGame->GameBlock.nCurBlockStatus)
  86   2                      {
  87   3                      case 0:
  88   3                      case 2:
  89   3                              pGame->GameBlock.BlocksInfo=0x00F0;
  90   3                              break;
  91   3                      case 1:
  92   3                      case 3:
  93   3                              pGame->GameBlock.BlocksInfo=0x2222;
  94   3                              break;
  95   3                      }
  96   2                      break;
  97   2              case 2: /*两种状态*/
  98   2                      switch(pGame->GameBlock.nCurBlockStatus)
  99   2                      {
 100   3                      case 0:
 101   3                      case 2:
 102   3                              pGame->GameBlock.BlocksInfo=0x4620;
 103   3                              break;
 104   3                      case 1:
 105   3                      case 3:
 106   3                              pGame->GameBlock.BlocksInfo=0x3600;
 107   3                              break;
 108   3                      }
 109   2                      break;
 110   2              case 3: /*两种状态*/
 111   2                      switch(pGame->GameBlock.nCurBlockStatus)
 112   2                      {
 113   3                      case 0:
 114   3                      case 2:
 115   3                              pGame->GameBlock.BlocksInfo=0x2640;
 116   3                              break;
 117   3                      case 1:
C51 COMPILER V7.06   BLOCKGAME                                                             11/12/2008 09:12:21 PAGE 3   

 118   3                      case 3:
 119   3                              pGame->GameBlock.BlocksInfo=0x6300;
 120   3                              break;
 121   3                      }
 122   2                      break;
 123   2              case 4: /*四种状态*/
 124   2                      switch(pGame->GameBlock.nCurBlockStatus)
 125   2                      {
 126   3                      case 0:
 127   3                              pGame->GameBlock.BlocksInfo=0x2260;
 128   3                              break;
 129   3                      case 1:
 130   3                              pGame->GameBlock.BlocksInfo=0x0710;
 131   3                              break;
 132   3                      case 2:
 133   3                              pGame->GameBlock.BlocksInfo=0x3220;
 134   3                              break;
 135   3                      case 3:
 136   3                              pGame->GameBlock.BlocksInfo=0x4700;
 137   3                              break;
 138   3                      }
 139   2                      break;
 140   2              case 5: /*四种状态*/
 141   2                      switch(pGame->GameBlock.nCurBlockStatus)
 142   2                      {
 143   3                      case 0:
 144   3                              pGame->GameBlock.BlocksInfo=0x2230;
 145   3                              break;
 146   3                      case 1:
 147   3                              pGame->GameBlock.BlocksInfo=0x1700;
 148   3                              break;
 149   3                      case 2:
 150   3                              pGame->GameBlock.BlocksInfo=0x6220;
 151   3                              break;
 152   3                      case 3:
 153   3                              pGame->GameBlock.BlocksInfo=0x0740;
 154   3                              break;
 155   3                      }
 156   2                      break;
 157   2              case 6: /*四种状态*/
 158   2                      switch(pGame->GameBlock.nCurBlockStatus)
 159   2                      {
 160   3                      case 0:
 161   3                              pGame->GameBlock.BlocksInfo=0x0720;
 162   3                              break;
 163   3                      case 1:
 164   3                              pGame->GameBlock.BlocksInfo=0x2320;
 165   3                              break;
 166   3                      case 2:
 167   3                              pGame->GameBlock.BlocksInfo=0x2700;
 168   3                              break;
 169   3                      case 3:
 170   3                              pGame->GameBlock.BlocksInfo=0x2620;
 171   3                              break;
 172   3                      }
 173   2                      break;
 174   2              default: break;
 175   2              }
 176   1      }
 177          /*--移动方块----------------*/
 178          /*  type = eMoveUp     上移 */
 179          /*  type = eMoveDown   下移 */
C51 COMPILER V7.06   BLOCKGAME                                                             11/12/2008 09:12:21 PAGE 4   

 180          /*  type = eMoveLeft   左移 */
 181          /*  type = eMoveRigh   右移 */
 182          BOOL MoveBlock( BLOCK_GAME* pGame, UINT8 nMoveMode)
 183          {
 184   1              switch((enum eMoveMode)nMoveMode)
 185   1              {
 186   2              case eMoveUp:
 187   2                      pGame->GameBlock.nFirstBlockRow--;
 188   2                      break;
 189   2              case eMoveDown:
 190   2                      pGame->GameBlock.nFirstBlockRow++;
 191   2      
 192   2                      break;  
 193   2              case eMoveRight:
 194   2                      pGame->GameBlock.nFirstBlockCol++;
 195   2                      break;
 196   2              case eMoveLeft:
 197   2                      pGame->GameBlock.nFirstBlockCol--;              
 198   2                      break;
 199   2              case eMoveTurn:
 200   2                      pGame->GameBlock.nCurBlockStatus=(pGame->GameBlock.nCurBlockStatus+1)%4;
 201   2                      BuildBlocks(pGame);
 202   2                      break;
 203   2              }
 204   1              if(!BlockGridConsistent(pGame))
 205   1              {
 206   2                      switch((enum eMoveMode)nMoveMode)
 207   2                      {
 208   3                      case eMoveUp:
 209   3                              pGame->GameBlock.nFirstBlockRow++;
 210   3                              break;
 211   3                      case eMoveDown:
 212   3                              pGame->GameBlock.nFirstBlockRow--;
 213   3                              break;
 214   3                      case eMoveLeft:
 215   3                              pGame->GameBlock.nFirstBlockCol++;
 216   3                              break;
 217   3                      case eMoveRight:
 218   3                              pGame->GameBlock.nFirstBlockCol--;
 219   3                              break;
 220   3                      case eMoveTurn:
 221   3                              pGame->GameBlock.nCurBlockStatus=(pGame->GameBlock.nCurBlockStatus-1+4)%4;
 222   3                              BuildBlocks(pGame);
 223   3                              break;
 224   3                      }
 225   2                      return 0;
 226   2              }       
 227   1              return 1;
 228   1      }
 229          
 230          /* 扩展功能-旋转方块,尽可能保证旋转成功 */
 231          BOOL TurnBlock( BLOCK_GAME* pGame )
 232          {

⌨️ 快捷键说明

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