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

📄 snake.lst

📁 51单片机上的贪吃蛇游戏
💻 LST
📖 第 1 页 / 共 4 页
字号:
 276   4            {
 277   5              My_snake.Temp_Pot_Or_Last_Trail.x=My_snake.Snake_body[0][X_POT];
 278   5           My_snake.Temp_Pot_Or_Last_Trail.y=My_snake.Snake_body[0][Y_POT];
 279   5           My_snake.Snake_body[0][X_POT]--;
 280   5             } //如果是第一个点就X++
 281   4            else         
 282   4           
 283   4           {
 284   5             temp_x=My_snake.Snake_body[i][X_POT];
 285   5             temp_y=My_snake.Snake_body[i][Y_POT];
 286   5           My_snake.Snake_body[i][X_POT]=My_snake.Temp_Pot_Or_Last_Trail.x;
 287   5            My_snake.Snake_body[i][Y_POT]=My_snake.Temp_Pot_Or_Last_Trail.y;
 288   5            My_snake.Temp_Pot_Or_Last_Trail.x=temp_x;
 289   5            My_snake.Temp_Pot_Or_Last_Trail.y=temp_y;
 290   5           }
 291   4           
 292   4           
 293   4            }
 294   3            return;
 295   3          }
 296   2      /*-----------------------------------------------------------------------------*/
 297   2          case UP:
 298   2                {
 299   3            for(i=0;i<SNAKE_LONG;i++)
 300   3           {
 301   4               if(i==0)
 302   4            {
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 6   

 303   5              My_snake.Temp_Pot_Or_Last_Trail.x=My_snake.Snake_body[0][X_POT];
 304   5           My_snake.Temp_Pot_Or_Last_Trail.y=My_snake.Snake_body[0][Y_POT];
 305   5           My_snake.Snake_body[0][Y_POT]--;
 306   5             } //如果是第一个点就X++
 307   4            else         
 308   4            {
 309   5            temp_x=My_snake.Snake_body[i][X_POT];
 310   5             temp_y=My_snake.Snake_body[i][Y_POT];
 311   5           My_snake.Snake_body[i][X_POT]=My_snake.Temp_Pot_Or_Last_Trail.x;
 312   5            My_snake.Snake_body[i][Y_POT]=My_snake.Temp_Pot_Or_Last_Trail.y;
 313   5            My_snake.Temp_Pot_Or_Last_Trail.x=temp_x;
 314   5            My_snake.Temp_Pot_Or_Last_Trail.y=temp_y;
 315   5            }
 316   4            }
 317   3            return;
 318   3          }
 319   2      /*---------------------------------------------------------------------------*/
 320   2         case DOWN:
 321   2                {
 322   3            for(i=0;i<SNAKE_LONG;i++)
 323   3           {
 324   4               if(i==0)
 325   4            {
 326   5              My_snake.Temp_Pot_Or_Last_Trail.x=My_snake.Snake_body[0][X_POT];
 327   5           My_snake.Temp_Pot_Or_Last_Trail.y=My_snake.Snake_body[0][Y_POT];
 328   5           My_snake.Snake_body[0][Y_POT]++;
 329   5             } //如果是第一个点就X++
 330   4            else         
 331   4            {
 332   5            temp_x=My_snake.Snake_body[i][X_POT];
 333   5             temp_y=My_snake.Snake_body[i][Y_POT];
 334   5           My_snake.Snake_body[i][X_POT]=My_snake.Temp_Pot_Or_Last_Trail.x;
 335   5            My_snake.Snake_body[i][Y_POT]=My_snake.Temp_Pot_Or_Last_Trail.y;
 336   5            My_snake.Temp_Pot_Or_Last_Trail.x=temp_x;
 337   5            My_snake.Temp_Pot_Or_Last_Trail.y=temp_y;
 338   5            }
 339   4           
 340   4            }
 341   3            return ;
 342   3                 }
 343   2           default:
 344   2              return;
 345   2         }
 346   1         return;
 347   1         
 348   1         }
 349          /*------------ 确认某一点是否是空点------------------*/
 350          bit Sure_Pot_Empty(uchar x,uchar y)   /*------------ 确认某一点是否是空点------------------*/
 351          {
 352   1          uchar i;
 353   1         for(i=0;i<SNAKE_LONG;i++)
 354   1           {
 355   2           if(My_snake.Snake_body[i][X_POT]==x&&My_snake.Snake_body[i][Y_POT]==y)   //查遍蛇的全身看看蛇身是否在
             -这点上
 356   2           return 0;
 357   2        }
 358   1         return 1;//如
 359   1      }
 360          /*--------------------这个函数是用来确认前面没有障碍物------------*/
 361          bit Sure_No_Stock()
 362              {
 363   1         switch (My_snake.direction)
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 7   

 364   1            {
 365   2         case RIGHT:  //如果向右
 366   2             {
 367   3                if((My_snake.Snake_body[0][X_POT])>=RIGHT_MAX)
 368   3                         return 0 ;
 369   3                       else  if(Sure_Pot_Empty(My_snake.Snake_body[0][X_POT]+1,My_snake.Snake_body[0][Y_POT]))
 370   3                          return 1;
 371   3                     else return 0;
 372   3              }
 373   2           break;
 374   2         case LEFT:
 375   2             {
 376   3           if(My_snake.Snake_body[0][X_POT]==LEFT_MAX)
 377   3                 return 0;
 378   3            else if(Sure_Pot_Empty(My_snake.Snake_body[0][X_POT]-1,My_snake.Snake_body[0][Y_POT]))
 379   3                return 1;
 380   3              else return 0;
 381   3          }
 382   2          break;
 383   2         case UP:
 384   2             {
 385   3            if(My_snake.Snake_body[0][Y_POT]==UP_MAX)
 386   3               return 0;
 387   3            else if(Sure_Pot_Empty(My_snake.Snake_body[0][X_POT],My_snake.Snake_body[0][Y_POT]-1))
 388   3                 return 1;
 389   3              else return 0;
 390   3          }
 391   2          break;
 392   2         case DOWN:
 393   2             {
 394   3             if(My_snake.Snake_body[0][Y_POT]>=DOWN_MAX)
 395   3               return 0;
 396   3           else if(Sure_Pot_Empty(My_snake.Snake_body[0][X_POT],My_snake.Snake_body[0][Y_POT]+1))
 397   3                return 1;
 398   3             else return 0;
 399   3          }
 400   2          break;
 401   2           default:
 402   2             break;
 403   2         }
 404   1         return 0;
 405   1        
 406   1          }
 407          /*-----------------------------键盘响应函数--------------*/
 408          void Key_Respond()
 409          { 
 410   1         if (KEY_DOWN)
 411   1         {
 412   2           KEY_DOWN=0;
 413   2            switch(My_snake.Game_Mode)
 414   2          {
 415   3            case GAME_RUNING:
 416   3               switch (KEY_WORD)
 417   3                     {
 418   4                        case DOWN_DOWN:
 419   4                            My_snake.direction=DOWN;
 420   4                  break;
 421   4                     case UP_DOWN:
 422   4                       My_snake.direction=UP;
 423   4                  break;
 424   4                    case RIGHT_DOWN:
 425   4                        My_snake.direction=RIGHT;
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 8   

 426   4               break;
 427   4                       case LEFT_DOWN:
 428   4                        My_snake.direction=LEFT;
 429   4               break;
 430   4                      default:
 431   4                      break;
 432   4            
 433   4               }
 434   3            return;
 435   3           
 436   3          case GAME_OVER: 
 437   3                   {
 438   4              display_all_screen (WAITE_IN_PUT);
 439   4              My_snake.Game_Mode=WAIT_FOR_USER_INPUT;
 440   4           wr_lcd (comm,0x34);
 441   4                        wr_lcd (comm,0x30);
 442   4                           wr_lcd (comm,0x8E);    //置AC为0
 443   4           wr_lcd(dat,NO_Data[9-My_snake.Speed]);
 444   4                      
 445   4           
 446   4       
 447   4           }
 448   3           return;    //如果游戏结束了就什么也不做了
 449   3      
 450   3          case WAIT_FOR_USER_INPUT:
 451   3                      switch (KEY_WORD)
 452   3                     {
 453   4                        case DOWN_DOWN:
 454   4                            {
 455   5             if(My_snake.Speed<9)
 456   5                {
 457   6                 My_snake.Speed++;
 458   6                 wr_lcd (comm,0x34);
 459   6                                   wr_lcd (comm,0x30);
 460   6                                    wr_lcd (comm,0x8E);    //置AC为0
 461   6                 wr_lcd(dat,NO_Data[9-My_snake.Speed]);
 462   6                }
 463   5             }
 464   4                  break;
 465   4                     case UP_DOWN:
 466   4               {
 467   5                if(My_snake.Speed>0)
 468   5                              {
 469   6               My_snake.Speed--;
 470   6                  wr_lcd (comm,0x34);
 471   6                                    wr_lcd (comm,0x30);
 472   6                                     wr_lcd (comm,0x8E);    //置AC为0
 473   6                  wr_lcd(dat,NO_Data[9-My_snake.Speed]);
 474   6               }
 475   5             }
 476   4                  break;
 477   4                    case RIGHT_DOWN:
 478   4                       
 479   4               break;
 480   4                       case LEFT_DOWN:
 481   4                        Inicial_Game();
 482   4               break;
 483   4                      default:
 484   4                      break;
 485   4               }
 486   3            return;
 487   3                                
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 9   

 488   3                                 break;//这里暂时还没有写好!
 489   3         case GAME_WELCOME_SCREEN:
 490   3                              {
 491   4               display_all_screen (WAITE_IN_PUT);
 492   4               My_snake.Game_Mode=WAIT_FOR_USER_INPUT;
 493   4                wr_lcd (comm,0x34);
 494   4                                  wr_lcd (comm,0x30);
 495   4                                   wr_lcd (comm,0x8E);    //置AC为0
 496   4                  wr_lcd(dat,NO_Data[9-My_snake.Speed]);
 497   4       
 498   4               }
 499   3                                          
 500   3                                  break;
 501   3               
 502   3          default:
 503   3               return;
 504   3           
 505   3         }
 506   2         }
 507   1        
 508   1          
 509   1      }
 510          /*----------------------------这个是用来确定不是按下了相反位-----------*/
 511          bit Press_Oppsite_Direction() /* -------这个是用来确定不是按下了相反位-------*/
 512           {
 513   1       switch(My_snake.direction)
 514   1          {
 515   2       case RIGHT:
 516   2            if(My_snake.Snake_body[0][Y_POT]==My_snake.Snake_body[1][Y_POT]&&My_snake.Snake_body[0][X_POT]+1==My
             -_snake.Snake_body[1][X_POT])
 517   2           return 1;
 518   2           break;
 519   2       case LEFT:
 520   2            if(My_snake.Snake_body[0][Y_POT]==My_snake.Snake_body[1][Y_POT]&&My_snake.Snake_body[0][X_POT]-1==My
             -_snake.Snake_body[1][X_POT])
 521   2           return 1;
 522   2           break;
 523   2       case UP:
 524   2            if(My_snake.Snake_body[0][X_POT]==My_snake.Snake_body[1][X_POT]&&My_snake.Snake_body[0][Y_POT]-1==My
             -_snake.Snake_body[1][Y_POT])
 525   2             return 1;
 526   2          break;
 527   2          case DOWN:
 528   2            if(My_snake.Snake_body[0][X_POT]==My_snake.Snake_body[1][X_POT]&&My_snake.Snake_body[0][Y_POT]+1==My
             -_snake.Snake_body[1][Y_POT])
 529   2           return 1;
 530   2          break;
 531   2       default:
 532   2            return 0;
 533   2            break;
 534   2          }
 535   1       return 0;
 536   1       }
 537          void One_Step()///这个函数里蛇走一步的
 538          {
 539   1        if(My_snake.Game_Mode==GAME_RUNING)    //如果在游戏中的话!
 540   1          {
 541   2          switch (My_snake.direction)
 542   2          {
 543   3           case RIGHT:
 544   3             {
 545   4              if(Press_Oppsite_Direction())
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 10  

 546   4               {
 547   5            My_snake.direction=LEFT;
 548   5               return ;      //如果是按了相反方向那么就返回并把方向转过来
 549   5            }
 550   4            else if(Sure_No_Stock()) //看看有障碍物 么
 551   4               {
 552   5             Go_Ahead();
 553   5             }

⌨️ 快捷键说明

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