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

📄 main.lst

📁 推箱子游戏]基于AT89S51+62256+12864LCD
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /**********************************************************
   2          *名称:推箱子游戏测试版V0.1 
   3          *编程:飞扬
   4          *说明:采用YM12864R-3的液晶(ST7920)+62256的RAM+PT6122的遥控
   5          *下一个版本增加音效,地图编辑功能,界面显示美化等等暂时没想到!
   6          *主要是学习外扩展RAM才搞这个东东!
   7          **********************************************************/
   8          #include <at89x52.h>
   9          #include "MAIN.H"
  10          /******    引脚定义   ******/
  11          sbit Beep = P3^3; //音频输出脚
  12          
  13          /****** 变量/数组定义 ******/
  14          //定义数组,存放接收到的数据
  15          uchar KeyCoding[4]={0,0,0,0};
  16          
  17          //关卡设置
  18          uchar guanka = 0;
  19           
  20          //用1024个字节存放动态绘图数据,我叫它显存数据
  21          uchar xdata GamePic[1024]; //使用绝对地址以保护数据不被破坏
  22           
  23          //十字形(箱子推到圆形位置后变为十字形)
  24          uchar code shizi[8]={0x3c,0x3c,0xff,0xff,0xff,0xff,0x3c,0x3c};
  25          
  26          //圆形(箱子要推到的地方)
  27          uchar code yuan[8]={0x3c,0x66,0xc3,0x81,0x81,0xc3,0x66,0x3c};
  28          
  29          //箱子(推动的就是他)
  30          uchar code xiangzi[8]={0xff,0x81,0xbd,0xbd,0xbd,0xbd,0x81,0xff};
  31          
  32          //娃娃脸(用于推动箱子)
  33          uchar code lian[8]={0x7e,0xff,0xdb,0xff,0xff,0xc3,0xe7,0x7e};
  34          
  35          //墙壁
  36          uchar code qiang[8]={0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00};
  37          
  38          //空(用于清空图形移动后的痕迹)
  39          uchar code kong[8]={0,0,0,0,0,0,0,0};
  40          
  41          //用于计算图形移动和放置的坐标
  42          //实际存放的是GamePic数组的相应下标
  43          uint code MoveData[64]={
  44          0,1,2,3,4,5,6,7,
  45          128,129,130,131,132,133,134,135,
  46          256,257,258,259,260,261,262,263,
  47          384,385,386,387,388,389,390,391,
  48          512,513,514,515,516,517,518,519,
  49          640,641,642,643,644,645,646,647,
  50          768,769,770,771,772,773,774,775,
  51          896,897,898,899,900,901,902,903
  52          };
  53          /*8X8的游戏地图数据,同时根据图形数据判断娃娃脸是否可以移动,
  54          *箱子是否可以推动,箱子推动的方向是否是墙和箱子,是则不
  55          *能推动!箱子推到的地方是圆形则用十字形替换(将该位置数据换成5),
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 2   

  56          *推动十字形,则再恢复到箱子的形状(在换成3).
  57          *空(什么都不显示)=0,墙=1,圆=2,箱子=3,脸=4,十字=5 */
  58          uchar code GameMap[10][64]={
  59          //第一关
  60          {1,1,1,1,1,1,1,1,
  61          1,0,0,0,1,2,0,1,
  62          1,2,0,0,3,0,0,1,
  63          1,1,3,1,1,0,0,1,
  64          1,0,0,1,1,3,1,1,
  65          1,0,0,4,0,0,0,1,
  66          1,0,2,1,0,0,0,1,
  67          1,1,1,1,1,1,1,1},
  68          //第二关
  69          {1,1,1,1,1,1,1,1,
  70          1,0,0,0,1,0,0,1,
  71          1,0,2,0,3,2,0,1,
  72          1,1,3,1,1,0,0,1,
  73          1,0,0,1,1,3,1,1,
  74          1,0,0,4,0,2,0,1,
  75          1,0,0,1,0,0,0,1,
  76          1,1,1,1,1,1,1,1},
  77          //第三关
  78          {1,1,1,1,1,1,1,1,
  79          1,0,0,0,1,0,0,1,
  80          1,0,0,0,3,0,0,1,
  81          1,0,3,1,1,0,0,1,
  82          1,0,2,1,1,3,1,1,
  83          1,0,2,4,0,0,0,1,
  84          1,0,2,1,0,0,0,1,
  85          1,1,1,1,1,1,1,1},
  86          //第四关
  87          {1,1,1,1,1,1,1,1,
  88          1,0,0,0,1,0,0,1,
  89          1,0,2,0,3,2,0,1,
  90          1,1,3,1,1,0,0,1,
  91          1,0,0,1,1,3,1,1,
  92          1,0,2,4,0,0,0,1,
  93          1,0,0,1,0,0,0,1,
  94          1,1,1,1,1,1,1,1},
  95          //第五关
  96          {1,1,1,1,1,1,1,1,
  97          1,0,0,0,1,0,0,1,
  98          1,0,0,2,3,0,0,1,
  99          1,1,3,1,1,0,0,1,
 100          1,0,2,1,1,3,1,1,
 101          1,0,0,4,2,0,0,1,
 102          1,0,0,1,0,0,0,1,
 103          1,1,1,1,1,1,1,1},
 104          //6
 105          {1,1,1,1,1,1,1,1,
 106          1,1,0,1,1,0,2,1,
 107          1,0,0,3,0,0,0,1,
 108          1,4,3,3,0,0,0,1,
 109          1,0,1,0,0,1,0,1,
 110          1,0,1,1,1,1,0,1,
 111          1,2,0,0,0,0,2,1,
 112          1,1,1,1,1,1,1,1},
 113          //7
 114          {1,1,1,1,1,1,1,1,
 115          1,0,0,1,0,0,0,1,
 116          1,0,0,1,0,5,0,1,
 117          1,0,0,1,0,2,1,1,
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 3   

 118          1,1,0,3,0,0,0,1,
 119          1,0,3,0,0,2,0,1,
 120          1,4,0,1,1,0,0,1,
 121          1,1,1,1,1,1,1,1},
 122          //8
 123          {1,1,1,1,1,1,1,1,
 124          1,1,4,0,1,1,1,1,
 125          1,0,0,0,3,2,0,1,
 126          1,0,0,1,0,0,0,1,
 127          1,0,0,0,1,5,0,1,
 128          1,1,0,3,0,0,0,1,
 129          1,1,1,1,0,2,0,1,
 130          1,1,1,1,1,1,1,1},
 131          //9
 132          {1,1,1,1,1,1,1,1,
 133          1,2,0,1,1,1,1,1,
 134          1,2,0,0,0,1,1,1,
 135          1,0,1,3,0,0,0,1,
 136          1,2,0,3,3,1,0,1,
 137          1,1,0,0,0,0,0,1,
 138          1,1,1,1,1,0,4,1,
 139          1,1,1,1,1,1,1,1},
 140          //10
 141          {1,1,1,1,1,1,1,1,
 142          1,1,0,1,1,0,2,1,
 143          1,0,3,0,3,3,0,1,
 144          1,4,0,0,0,0,0,1,
 145          1,0,1,0,0,1,0,1,
 146          1,0,1,1,1,1,0,1,
 147          1,2,0,0,0,0,2,1,
 148          1,1,1,1,1,1,1,1}
 149          };
 150          //因为程序存储器中的的是只读的!
 151          //用于复制程序存储器中的当前地图数据
 152          uchar idata Map[64];
 153           
 154          //用于存放圆形的坐标,最多5个圆
 155          //yuanPos[6]存放本关有几个圆
 156          uchar xdata yuanPos[6]=0;
 157           
 158          /**********************************************************
 159          *函数名:CopyMap() 
 160          *功  能:用于复制程序存储器中的当前地图数据
 161          *输  入:入口参数为当前地图编号
 162          **********************************************************/
 163          void CopyMap(uchar num)
 164          {
 165   1        uchar i;
 166   1        for (i=0;i<64;i++)
 167   1        {
 168   2               Map[i] = GameMap[num][i];
 169   2        }
 170   1      }
 171          /**********************************************************
 172          *函数名:WriteMemorizer()
 173          *功  能:将图形数据写入显存 
 174          *pos:要显示图形的位置,*p:指针指向要显示的图形
 175          **********************************************************/
 176          void WriteMemorizer(uchar pos,uchar *p)
 177          {
 178   1         uchar i;
 179   1         uint j;
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 4   

 180   1         j = MoveData[pos]; //取显存地址(显示坐标)
 181   1         for (i=0;i<8;i++)
 182   1         {
 183   2                      GamePic[j] = *p; //要显示的图形写入显存
 184   2                      p++;  //下一个数据
 185   2                      j+=16;//显存的下一个地址(每个地址之间的差是16)
 186   2         }              //或者说是间隔是16.
 187   1      }
 188          /**********************************************************
 189          *函数名:MapCreate() 
 190          *功  能:地图生成程序
 191          **********************************************************/
 192          void MapCreate()
 193          {
 194   1         uchar i;
 195   1         for (i=0;i<64;i++) //生成8X8的地图
 196   1         {
 197   2                      switch (Map[i])//获得地图上的图形数据
 198   2                      {
 199   3                              case 0:
 200   3                                      WriteMemorizer(i,kong);//空
 201   3                                      break;
 202   3                              case 1:
 203   3                                      WriteMemorizer(i,qiang);//墙
 204   3                                      break;
 205   3                              case 2:
 206   3                                      WriteMemorizer(i,yuan);//圆
 207   3                                      break;
 208   3                              case 3:
 209   3                                      WriteMemorizer(i,xiangzi);//箱子
 210   3                                      break;
 211   3                              case 4:
 212   3                                      WriteMemorizer(i,lian);//脸
 213   3                                      break;
 214   3                              case 5:
 215   3                                      WriteMemorizer(i,shizi);//十字
 216   3                                      break;
 217   3                      }
 218   2         }
 219   1      }
 220          /**********************************************************
 221          *函数名:GameDisplay() 
 222          *功  能:游戏图形显示程序(从左到右,从上到下)
 223          **********************************************************/
 224          void GameDisplay()
 225          {
 226   1        uchar i,j;
 227   1        uint  k=0; //对显存清计数器清0
 228   1        LCDWriteCommand(0x34);//扩充指令集
 229   1        LCDWriteCommand(0x36);//绘图显示开

⌨️ 快捷键说明

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