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

📄 gameprocess.lst

📁 单片机的俄罗斯方块程序,含Proteus 仿真文件及详细注释
💻 LST
字号:
C51 COMPILER V8.05a   GAMEPROCESS                                                          11/06/2007 17:08:34 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE GAMEPROCESS
OBJECT MODULE PLACED IN .\Target\GameProcess.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sources\GameProcess.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\L
                    -ST\GameProcess.lst) OBJECT(.\Target\GameProcess.obj)

line level    source

   1          //*************************************************************************************************
   2          //*                                                                                                                                                                                               *
   3          //*                      ******************************游戏动作处理程序**************************                         *
   4          //*                                                                                                                                                                                               *
   5          //*************************************************************************************************
   6          #include "includes.h"
   7          
   8          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<方块动作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
   9          #define ACTIONROTATE 0
  10          #define ACTIONRIGHT 1
  11          #define ACTIONDOWN 2
  12          #define ACTIONLEFT 3
  13          
  14          #define STARTROW ROW(-3)                                 //方块起始位置。
  15          #define STARTLINE LINE(5)                                
  16          #define ROW(x) (100+x)                                   //把方块位置加100,防止在--时产生负数。
  17          #define LINE(x) (100+x)                                  
  18          
  19          
  20          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定义当前方块属性变量>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  21          BLOCK *psta_BlockCur=sta_BlockSet;              //指向当前方块设定的指针。
  22          
  23          unsigned char uc_BlockRow,uc_BlockLine; //当前方块位置。
  24          
  25          bit b_GameStart=0;                                              //游戏开始标志位。
  26          
  27          unsigned int ui_GameMark=0;                             //当前游戏分数。
  28          
  29          //*************************************************************************************************
  30          //*                                                                                                                                                                                               *
  31          //*                      **********************************创建一个方块******************************             *
  32          //*                                                                                                                                                                                               *
  33          //*************************************************************************************************
  34          void vCreateBlock()      //在当前位置创建一个方块。
  35          {
  36   1              unsigned char ucRowOffset,ucLineOffset;
  37   1              for(ucRowOffset=0;ucRowOffset<4;ucRowOffset++)
  38   1                      for(ucLineOffset=0;ucLineOffset<4;ucLineOffset++)
  39   1                              {
  40   2                              if((0x01&(unsigned char)((psta_BlockCur->uiBlockMap)>>(ucRowOffset*4+ucLineOffset)))
  41   2                                              &&(uc_BlockRow+ucRowOffset)>=ROW(0))
  42   2                                      vShowBlock(uc_BlockRow+ucRowOffset-ROW(0),uc_BlockLine+ucLineOffset-LINE(0));
  43   2                              }
  44   1      }
  45          
  46          //*************************************************************************************************
  47          //*                                                                                                                                                                                               *
  48          //*                      **********************************删除一个方块******************************             *
  49          //*                                                                                                                                                                                               *
  50          //*************************************************************************************************
  51          void vDeleteBlock()      //在当前位置删除一个方块。
  52          {
  53   1              unsigned char ucRowOffset,ucLineOffset;
  54   1              for(ucRowOffset=0;ucRowOffset<4;ucRowOffset++)
C51 COMPILER V8.05a   GAMEPROCESS                                                          11/06/2007 17:08:34 PAGE 2   

  55   1                      for(ucLineOffset=0;ucLineOffset<4;ucLineOffset++)
  56   1                              {
  57   2                              if((0x01&(unsigned char)((psta_BlockCur->uiBlockMap)>>(ucRowOffset*4+ucLineOffset)))
  58   2                                              &&(uc_BlockRow+ucRowOffset)>=ROW(0))
  59   2                                      vCleanBlock(uc_BlockRow+ucRowOffset-ROW(0),uc_BlockLine+ucLineOffset-LINE(0));
  60   2                              }
  61   1      }
  62          
  63          
  64          //*************************************************************************************************
  65          //*                                                                                                                                                                                               *
  66          //*                      **********************************产生一个新的方块****************************           *
  67          //*                                                                                                                                                                                               *
  68          //*************************************************************************************************
  69          void vNewBlock()
  70          {
  71   1              unsigned char ucBlockSelect;            //用于选择方块类型及状态的数,通过取
  72   1              ucBlockSelect=(TH0+TH1)%18;                     //定时器的值产生随机数。
  73   1              psta_BlockCur=&sta_BlockSet[ucBlockSelect];     
  74   1      }
  75          //*************************************************************************************************
  76          //*                                                                                                                                                                                               *
  77          //*                      ********************************游戏初始化*******************************                        *
  78          //*                                                                                                                                                                                               *
  79          //*************************************************************************************************
  80          void vGameInitialize()
  81          {
  82   1              unsigned char ucCountOne,ucCountTwo;
  83   1      
  84   1              vWriteCMD(0x01);                //清屏。
  85   1              vShowOneChin(1,2,uca_FEN);              //显示“分数”。
  86   1              vShowOneChin(1,18,uca_SHU);
  87   1              ui_GameMark=0;                                  //清空游戏分数。
  88   1              vShowNumber(4,0,ui_GameMark);   //显示初始分数。
  89   1      
  90   1              vShowFrame();                                   //显示边框。
  91   1      
  92   1              for(ucCountOne=0;ucCountOne<21;ucCountOne++)       //清空游戏区域。
  93   1                      for(ucCountTwo=0;ucCountTwo<12;ucCountTwo++)
  94   1                              vCleanBlock(ucCountOne,ucCountTwo);
  95   1      
  96   1              uc_BlockRow=STARTROW;
  97   1              uc_BlockLine=STARTLINE;
  98   1              vNewBlock();
  99   1              vCreateBlock();                                 //新建方块。;
 100   1              b_GameStart=1;                                  //开启定时器定时下降。
 101   1      } 
 102          //*************************************************************************************************
 103          //*                                                                                                                                                                                               *
 104          //*                      ******************************判断游戏是否结束**************************                         *
 105          //*                                                                                                                                                                                               *
 106          //*************************************************************************************************
 107          unsigned char ucIsGameOver()
 108          {
 109   1              unsigned char ucCount;
 110   1              for(ucCount=0;ucCount<12;ucCount++)
 111   1                      if(ucReadBlock(0,ucCount))
 112   1                              return 1;                  
 113   1              return 0;
 114   1      }
 115          
 116          
C51 COMPILER V8.05a   GAMEPROCESS                                                          11/06/2007 17:08:34 PAGE 3   

 117          //*************************************************************************************************
 118          //*                                                                                                                                                                                               *
 119          //*                      ******************************游戏结束处理函数**************************                         *
 120          //*                                                                                                                                                                                               *
 121          //*************************************************************************************************
 122          void vGameOver()
 123          {
 124   1              b_GameStart=0;
 125   1              vShowGraph(3,40,70,2,uca_GameOver);
 126   1      }
 127          
 128          void vGetMark()
 129          {
 130   1              unsigned char ucRow,ucLine,ucCount,ucTemp=0;
 131   1              for(ucRow=uc_BlockRow+3;ucRow>0;ucRow--)
 132   1                      if((uca_BlockMap[ucRow*2]==0xFF)&&(uca_BlockMap[ucRow*2+1]==0x0F))
 133   1                              {
 134   2                              for(ucCount=ucRow;ucCount>0;ucCount--)
 135   2                                      for(ucLine=0;ucLine<12;ucLine++)
 136   2                                              {
 137   3                                              vCleanBlock(ucCount,ucLine);
 138   3                                              if(ucReadBlock(ucCount-1,ucLine))
 139   3                                                      vShowBlock(ucCount,ucLine);
 140   3                                              }
 141   2                              ucRow++;
 142   2                              ui_GameMark+=(++ucTemp);
 143   2                              }
 144   1              vShowNumber(4,0,ui_GameMark);
 145   1                      
 146   1      }
 147          //*************************************************************************************************
 148          //*                                                                                                                                                                                               *
 149          //*                      ******************************游戏动作处理函数****************************                       *
 150          //*                                                                                                                                                                                               *
 151          //*************************************************************************************************
 152          void vBlockAction(unsigned char ucAction)
 153          {
 154   1              if(ucMoveDecide(ucAction))                 //判断方块是否可以移动。
 155   1                      vMoveBlock(ucAction);              //如果可以,则移动方块。
 156   1              else
 157   1                      if(ucAction==ACTIONDOWN)
 158   1                              {
 159   2                              if(ucIsGameOver())
 160   2                                      vGameOver();
 161   2                              else
 162   2                                      {
 163   3                                      vGetMark();
 164   3                                      uc_BlockRow=STARTROW;
 165   3                                      uc_BlockLine=STARTLINE; 
 166   3                                      vNewBlock();
 167   3                                      vCreateBlock();
 168   3                                      }
 169   2                              }
 170   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    539    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7      12
C51 COMPILER V8.05a   GAMEPROCESS                                                          11/06/2007 17:08:34 PAGE 4   

   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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