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

📄 snake.lst

📁 键盘控制游戏液竟晶12864的,通过一般的控制新片就可以实现!供大家参考
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.08   SNAKE                                                                 06/20/2007 12:20:21 PAGE 1   


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

line level    source

   1          /*---------------------------------------------------------
   2          * 贪吃蛇游戏  测试版 V0.1 snake
   3          * 采用AT89S51+62256(RAM)+12864LCD(液晶)+RSM2222-001(遥控)
   4          ---------------------------------------------------------*/
   5          #include <AT89x52.H>
   6          #include <STDLIB.H>
   7          #include "snake.h"
   8          
   9          //移动标志位 1=上,2=下,3=左,4=右(初始向右移动)
  10          uchar MoveDirection    = 4;
  11          uchar RandCounter=0;//由于产生的随机数有问题在这加个.
  12          bit UpMove    = 0;//向上移动标志位
  13          bit DownMove  = 0;//向下移动标志位
  14          bit LeftMove  = 0;//向左移动标志位
  15          bit RightMove = 1;//向右移动标志位
  16          bit FoodFlag  = 0;//食物有无标志位
  17          bit Pause     = 0;//暂停标志位
  18          bit GameStart = 0;//游戏开始标志位
  19          bit GameOver  = 0;//游戏结束标志位
  20          sbit Beep = P3^3; //音频输出脚
  21          //存放遥控接收数据
  22          uchar xdata KeyCoding[4]={0,0,0,0};
  23          uchar counter; //计时用
  24          uchar SnakeLong = 2;//记录蛇身的长度
  25          /*Snake[0]记录蛇头的坐标位置,Snake[1]-Snake[20]记录蛇身的坐标位置,
  26           蛇的移动是将蛇尾清空,在第一个蛇头位置补上*/
  27          uchar xdata Snake[21]={
  28          //0  1  2   3    4    5    6    7    8    9    10   11   12
  29            35,34,33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  30          //13    14   15   16   17   18   19   20 
  31            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  32          //复制地图
  33          uchar xdata Map[128];
  34          /******************     用于绘图显示     *****************/
  35          uchar xdata GDRAM[1024];
  36          /******************  8X8的图形点阵数据   *****************/
  37          //空=0,墙=1,食物=2,蛇身=3,蛇头=4
  38          uchar code empty[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//空
  39          uchar code wall[8] ={0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA};//墙
  40          uchar code food[8] ={0x24,0x7E,0xFF,0xFF,0xFF,0x7E,0x3C,0x18};//食物
  41          uchar code body[8] ={0x3C,0x7E,0xFF,0xFF,0xFF,0xFF,0x7E,0x3C};//蛇身
  42          uchar code head[8] ={0x3C,0x7E,0xFB,0xFF,0xF8,0xFF,0x7E,0x3C};//蛇头
  43          /******************  8X16格的绘图坐标   *****************/
  44          uint code MoveData[128] ={
  45          0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
  46          128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
  47          256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,
  48          384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,
  49          512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,
  50          640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,
  51          768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,
  52          896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911};
  53          /******************  8X16格的地图   *****************/
  54          //空=0,墙=1,食物=2,蛇身=3,蛇头=4
  55          uchar code GameMap[128]={ //地图自己可以编辑增加障碍物,增加游戏难度
C51 COMPILER V8.08   SNAKE                                                                 06/20/2007 12:20:21 PAGE 2   

  56          1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  57          1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  58          1,3,3,4,0,0,0,0,0,0,0,0,0,0,0,1,
  59          1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  60          1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  61          1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  62          1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  63          1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
  64          
  65          /*---------------------------------------------------------
  66          函数:CopyMap()
  67          说明:复制地图
  68          ---------------------------------------------------------*/
  69          void CopyMap()
  70          {
  71   1        uchar i;
  72   1        for (i=0;i<128;i++) Map[i]= GameMap[i];
  73   1      }
  74          
  75          /**********************************************************
  76          *函数名:WriteMemorizer()
  77          *功  能:将图形数据写入显存 
  78          *pos:要显示图形的位置,*p:指针指向要显示的图形
  79          **********************************************************/
  80          void WriteMemorizer(uchar pos,uchar *p)
  81          {
  82   1         uchar i;
  83   1         uint zb;
  84   1         zb = MoveData[pos]; //取显存地址(显示坐标)
  85   1         for (i=0;i<8;i++)
  86   1         {
  87   2              GDRAM[zb] = *p; //要显示的图形写入显存
  88   2              p++;            //下一个数据
  89   2              zb+=16;         //显存的下一个地址(每个地址之间的差是16)
  90   2         }                //或者说是间隔是16.
  91   1      }
  92          /**********************************************************
  93          *函数名:MapCreate() 
  94          *功  能:地图生成程序
  95          **********************************************************/
  96          void MapCreate()
  97          {
  98   1         uchar i;
  99   1         for (i=0;i<128;i++) //生成8X8的地图(64块组成)
 100   1         {                               //每1块是8X8的点阵
 101   2                      switch (Map[i])//获得地图上的图形数据
 102   2                      {       //将图形编号对应的数据写入显存
 103   3                              case 0: 
 104   3                                      WriteMemorizer(i,empty);//空=0
 105   3                                      break;
 106   3                              case 1:
 107   3                                      WriteMemorizer(i,wall);//墙=1
 108   3                                      break;
 109   3                              case 2:
 110   3                                      WriteMemorizer(i,food);//食物=2
 111   3                                      break;
 112   3                              case 3:
 113   3                                      WriteMemorizer(i,body);//蛇身=3
 114   3                                      break;
 115   3                              case 4:
 116   3                                      WriteMemorizer(i,head);//蛇头=4
 117   3                                      break;
C51 COMPILER V8.08   SNAKE                                                                 06/20/2007 12:20:21 PAGE 3   

 118   3                      }
 119   2         }
 120   1      }
 121          /**********************************************************
 122          *函数名:GameDisplay() 
 123          *功  能:游戏图形显示程序(从左到右,从上到下)
 124          *       *point指向外部RAM存储的128X64的图片数据
 125          **********************************************************/
 126          void GameDisplay(uchar *point)
 127          {
 128   1        uchar i,j;
 129   1        LCDWriteCommand(0x34);//扩充指令集
 130   1        LCDWriteCommand(0x36);//绘图显示开
 131   1        for (i=0;i<32;i++)    //写上半屏(32行)
 132   1        {
 133   2          LCDWriteCommand(0x80+i);//Y地址寄存器
 134   2              LCDWriteCommand(0x80);  //X地址(LCM自动加1)
 135   2              for (j=0;j<16;j++)      //16x8列
 136   2              {                                               //获得GamePic的首地址
 137   3                      LCDWriteData(*point);//写入一个字节图形数据
 138   3                      point++; //指向下一个图形字节
 139   3              }
 140   2        }
 141   1        for (i=0;i<32;i++) //写下半屏
 142   1        {
 143   2          LCDWriteCommand(0x80+i);//Y地址寄存器
 144   2              LCDWriteCommand(0x88);  //X地址(LCM自动加1)
 145   2              for (j=0;j<16;j++)//
 146   2              {
 147   3                      LCDWriteData(*point);//写入一个字节图形数据
 148   3                      point++;
 149   3              }
 150   2        }
 151   1      }
 152          /*---------------------------------------------------------
 153          函数:SnakeCoor()
 154          说明:读取蛇头当前坐标
 155          ---------------------------------------------------------*/
 156          uchar SnakeCoor()
 157          {
 158   1         uchar i;
 159   1         uchar SnakeHead;
 160   1         for (i=0;i<128;i++)
 161   1         {//逐个比较找出蛇头
 162   2                 if (Map[i]==4)
 163   2                 {  //获得蛇头的当前坐标
 164   3                    SnakeHead = i;
 165   3                        break;//跳出循环
 166   3                 }
 167   2         }
 168   1         return (SnakeHead);
 169   1      }
 170          /*---------------------------------------------------------
 171          函数:PlacedFood()
 172          说明:放置食物

⌨️ 快捷键说明

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