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

📄 game.lst

📁 单片机上的贪吃蛇。12864显示。含详细资料
💻 LST
📖 第 1 页 / 共 2 页
字号:
 165          void GameOver(void)
 166          {
 167   1              unsigned char n;
 168   1              Lcd_Rectangle(food.x,food.y,food.x+2,food.y+2,0);//消隐出食物
 169   1              for(n=1;n<snake.node;n++)
 170   1              {
 171   2                      Lcd_Rectangle(snake.x[n],snake.y[n],snake.x[n]+2,snake.y[n]+2,0);//消隐食物,蛇头已到墙壁内,故不用消去 
             -        
 172   2              }
 173   1              if(snake.life==0)//如果蛇还活着
 174   1                      Lcd_WriteStr(2,1,"过关");
 175   1              else             //如果蛇死了
 176   1                      Lcd_WriteStr(2,1,"输了");
 177   1              Lcd_WriteStr(1,2,"游戏结束");
 178   1      }
C51 COMPILER V8.02   GAME                                                                  03/12/2009 22:02:27 PAGE 4   

 179          
 180          /********************************
 181          游戏的具体过程,也是贪吃蛇算法的关键部分
 182          *********************************/
 183          void GamePlay(void)
 184          {
 185   1              unsigned char n;
 186   1              InitRandom(TL0);
 187   1              food.yes=1;//1表示需要出现新事物,0表示已经存在食物尚未吃掉
 188   1              snake.life=0;//表示蛇还活着
 189   1              snake.direction=DOWN;
 190   1              snake.x[0]=6;snake.y[0]=6;
 191   1              snake.x[1]=3;snake.y[1]=6;
 192   1              snake.node=2;
 193   1              PrintScore();
 194   1              PrintSpeed();
 195   1              while(1)
 196   1              {
 197   2                      if(food.yes==1)
 198   2                      {
 199   3                              while(1)
 200   3                              {
 201   4                                      food.x=Random()*85+3;
 202   4                                      food.y=Random()*55+3;//获得随机数
 203   4              
 204   4                                      while(food.x%3!=0)
 205   4                                              food.x++;
 206   4                                      while(food.y%3!=0)
 207   4                                              food.y++;
 208   4                                  for(n=0;n<snake.node;n++)//判断产生的食物坐标是否和蛇身重合
 209   4                                      {
 210   5                                              if((food.x==snake.x[n])&&(food.y==snake.y[n]))
 211   5                                                      break;
 212   5                                      }
 213   4                                      if(n==snake.node)
 214   4                                      {
 215   5                                              food.yes=0;
 216   5                                              break;//产生有效的食物坐标
 217   5                                      }
 218   4                              }
 219   3                      }
 220   2                      if(food.yes==0)
 221   2                      {
 222   3                              Lcd_Rectangle(food.x,food.y,food.x+2,food.y+2,1);
 223   3                      }       
 224   2                      for(n=snake.node-1;n>0;n--)
 225   2                      {
 226   3                              snake.x[n]=snake.x[n-1];
 227   3                              snake.y[n]=snake.y[n-1];
 228   3                      }
 229   2                      switch(snake.direction)
 230   2                      {
 231   3                              case DOWN:snake.x[0]+=3;break;
 232   3                              case UP:snake.x[0]-=3;break;
 233   3                              case RIGHT:snake.y[0]-=3;break;
 234   3                              case LEFT:snake.y[0]+=3;break;
 235   3                              default:break;
 236   3                      }
 237   2                      for(n=3;n<snake.node;n++)//从第三节开始判断蛇头是否咬到自己
 238   2                      {
 239   3                              if(snake.x[n]==snake.x[0]&&snake.y[n]==snake.y[0])
 240   3                              {
C51 COMPILER V8.02   GAME                                                                  03/12/2009 22:02:27 PAGE 5   

 241   4                                      GameOver();
 242   4                                      snake.life=1;
 243   4                                      break;
 244   4                              }
 245   3                      }
 246   2                      if(snake.x[0]<3||snake.x[0]>=90||snake.y[0]<3||snake.y[0]>=60)//判蛇头是否撞到墙壁
 247   2                      {
 248   3                              GameOver();
 249   3                              snake.life=1;
 250   3                      }
 251   2                      if(snake.life==1)
 252   2                              break;//蛇死,则跳出while(1)循环
 253   2                      if(snake.x[0]==food.x&&snake.y[0]==food.y)//判蛇是否吃到食物
 254   2                      {
 255   3                              Lcd_Rectangle(food.x,food.y,food.x+2,food.y+2,0);//消隐食物
 256   3                              snake.x[snake.node]=200;
 257   3                              snake.y[snake.node]=200;//产生蛇新的节坐标先放在看不见的位置
 258   3                              snake.node++;//蛇节数加1
 259   3                              food.yes=1;//食物标志置1
 260   3                              if(++Score>=PASSSCORE)
 261   3                              {
 262   4                                      PrintScore();
 263   4                                      GameOver();
 264   4                                      break;
 265   4                              }
 266   3                              PrintScore();
 267   3                      }
 268   2                      for(n=0;n<snake.node;n++)
 269   2                      {
 270   3                              Lcd_Rectangle(snake.x[n],snake.y[n],snake.x[n]+2,snake.y[n]+2,1);
 271   3                      }//根据蛇的节数画出蛇
 272   2                      delay(Speed*1000);
 273   2                      Lcd_Rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+2,snake.y[snake.node-1]+
             -2,0);
 274   2                      switch(KeyBuffer)
 275   2                      {
 276   3                              case FUNC:
 277   3                                              KeyBuffer=0;
 278   3                                              if(++Speed>=10)
 279   3                                                      Speed=1;
 280   3                                              PrintSpeed();
 281   3                                              break;
 282   3                              case DOWN:
 283   3                                              KeyBuffer=0;
 284   3                                              if(snake.direction!=UP)
 285   3                                                      snake.direction=DOWN;
 286   3                                              break;
 287   3                              case UP:
 288   3                                              KeyBuffer=0;
 289   3                                              if(snake.direction!=DOWN)
 290   3                                                      snake.direction=UP;
 291   3                                              break;
 292   3                              case RIGHT:
 293   3                                              KeyBuffer=0;
 294   3                                              if(snake.direction!=LEFT)
 295   3                                                      snake.direction=RIGHT;
 296   3                                              break;
 297   3                              case LEFT:
 298   3                                              KeyBuffer=0;
 299   3                                              if(snake.direction!=RIGHT)
 300   3                                                      snake.direction=LEFT;
 301   3                                              break;
C51 COMPILER V8.02   GAME                                                                  03/12/2009 22:02:27 PAGE 6   

 302   3                              default:
 303   3                                              break;
 304   3                      }                       
 305   2              }//结束while(1)
 306   1      }
 307          
 308          void Main()
 309          {  
 310   1              InitCpu();//初始化CPU
 311   1              Lcd_Reset(); //初始化LCD屏
 312   1              Lcd_Clear(0);//清屏
 313   1              DrawBoard();//画界面
 314   1              GamePlay();//玩游戏
 315   1              GameOver();//游戏结束
 316   1              while(1);//要想重玩,只能重启,可继续完善该游戏
 317   1      }
 318          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1295    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     64      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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