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

📄 game.lst

📁 单片机12864贪吃蛇程序
💻 LST
字号:
C51 COMPILER V7.00  GAME                                                                   11/23/2009 14:38:57 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE GAME
OBJECT MODULE PLACED IN game.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE game.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <REG52.H>
   2          #include "12864.h"
   3          #include "asc.h"
   4          #define uchar unsigned char
   5          #define uint  unsigned int
   6          sbit  P00         =P0^0;
   7          sbit  P01         =P0^1;
   8          sbit  P02         =P0^2;
   9          sbit  P03         =P0^3;
  10          sbit  P04         =P0^4;
  11          #define RIGHT 1
  12          #define LIFT  2
  13          #define UP    3
  14          #define DOWN  4
  15          bit ESC=1;                //开始 暂停标志位
  16          bit START=1;              //重新开始标志位
  17          bit M_LEVEL=0;             //显示难度标志位
  18          bit hero=0;               //完成游戏
  19          unsigned char gamespeed=20;//游戏速度调节
  20          unsigned char level=1;    //难度
  21          unsigned char code s[]="--ByTang";
  22          unsigned char s1[]="1";
  23          struct Food
  24          {
  25             uchar x;/*食物的横坐标*/
  26             uchar y;/*食物的纵坐标*/
  27             uchar yes;/*判断是否要出现食物的变量*/
  28          }food;/*食物的结构体*/
  29          struct Snake
  30          {
  31             uchar x[39];
  32             uchar y[39];
  33             uchar node;/*蛇的节数*/
  34             uchar direction;/*蛇移动方向*/
  35             uchar life;/* 蛇的生命,0活着,1死亡*/
  36          }snake;
  37          int rand(void){    int i;    i = ((TH0<<8)|TL0)&0x7fff;    return(i);}   //随机数产生
  38          void delay(unsigned char m)   //10毫秒
  39          {
  40   1             unsigned char i,j,k;
  41   1              while(m--)
  42   1                        for(i=5;i>0;i--)
  43   1              for(j=4;j>0;j--)
  44   1              for(k=248;k>0;k--);
  45   1      }
  46          /* 键扫描函数 */
  47          void KeyScan()
  48          {
  49   1          P0=0xff;
  50   1               if(P00==0)
  51   1                      if(snake.direction!=LIFT)
  52   1                   snake.direction=RIGHT;
  53   1               if(P01==0)
  54   1                      if(snake.direction!=RIGHT)
  55   1                   snake.direction=LIFT;
C51 COMPILER V7.00  GAME                                                                   11/23/2009 14:38:57 PAGE 2   

  56   1               if(P02==0)
  57   1                      if(snake.direction!=DOWN)
  58   1                   snake.direction=UP;
  59   1               if(P03==0)
  60   1                      if(snake.direction!=UP)
  61   1                   snake.direction=DOWN;
  62   1               if(P04==0)
  63   1                 ESC=~ESC;
  64   1      }
  65          /*游戏结束*/
  66          void GameOver(void)
  67          {
  68   1         ClearLCD(); 
  69   1         hz_disp(3,25,4,youxijieshu,1);
  70   1         snake.life=0;/*活着*/
  71   1         snake.direction=1;/*方向往右*/
  72   1         snake.x[0]=9;snake.y[0]=33;/*蛇头*/
  73   1         snake.x[1]=6;snake.y[1]=33;
  74   1         snake.node=2;/*节数*/
  75   1         START=1;
  76   1      }
  77          void GamePlay(void)
  78          {
  79   1            uchar i;
  80   1                      while(1)
  81   1                      {
  82   2                        EA=1;
  83   2              gamespeed=20;
  84   2              level=1;
  85   2                        s1[0]='1';
  86   2                      while(ESC==0)
  87   2                  {
  88   3                                      EA=1;
  89   3                                      if(START==1)       //重新开始否
  90   3                                        {
  91   4                     ClearLCD(); 
  92   4                     hz_disp(3,40,2,nandu,1);
  93   4                     en_disp(3,80,1,Asc,s1,1);
  94   4                     delay(150);
  95   4                                              ClearLCD();
  96   4                     Rect(5,5,123,60,1);
  97   4                                              START=0;
  98   4                                         }
  99   3                                      if(snake.node%10==0 && food.yes==1)  //加大难度
 100   3                                         {
 101   4                                               level+=1;
 102   4                                               switch(level)
 103   4                                               {
 104   5                                                      case 2:
 105   5                            s1[0]='2';
 106   5                                                               gamespeed=15;
 107   5                                                               break;
 108   5                                                      case 3:
 109   5                            s1[0]='3';
 110   5                                                               gamespeed=10;
 111   5                                                               break;
 112   5                                                      case 4:
 113   5                            s1[0]='4';
 114   5                                                               gamespeed=5;
 115   5                                                               break;
 116   5                                               }
 117   4                                               M_LEVEL=1;
C51 COMPILER V7.00  GAME                                                                   11/23/2009 14:38:57 PAGE 3   

 118   4                                              }
 119   3                                      if(M_LEVEL==1)                   //加大难度显示
 120   3                                        {
 121   4                     START=1;
 122   4                                              M_LEVEL=0;
 123   4                                        }
 124   3                                      if(snake.node==39)
 125   3                                        {
 126   4                                         ESC=1;
 127   4                                              hero=1;
 128   4                                              break;
 129   4                                        }
 130   3                       if(food.yes==1)/*需要出现新食物*/
 131   3                         {
 132   4                          food.x=rand()%114+6;
 133   4                          food.y=rand()%51+6;
 134   4                          while(food.x%3!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
 135   4                               food.x++;
 136   4                          while(food.y%3!=0)
 137   4                               food.y++;
 138   4                               food.yes=0;/*画面上有食物了*/
 139   4                         }
 140   3                       if(food.yes==0)/*画面上有食物了就要显示*/
 141   3                    {
 142   4                     RectArea(food.x,food.y,food.x+2,food.y+2,1);
 143   4                    }
 144   3                  for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/
 145   3                     {
 146   4                      snake.x[i]=snake.x[i-1];
 147   4                           snake.y[i]=snake.y[i-1];
 148   4                          }
 149   3                  /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
 150   3                                      switch(snake.direction)
 151   3                             {
 152   4                                               case 1:snake.x[0]+=3;break;
 153   4                              case 2: snake.x[0]-=3;break;
 154   4                              case 3: snake.y[0]-=3;break;
 155   4                              case 4: snake.y[0]+=3;break;
 156   4                             }
 157   3                       for(i=3;i<snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过

⌨️ 快捷键说明

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