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

📄 snake.lst

📁 51单片机上的贪吃蛇游戏
💻 LST
📖 第 1 页 / 共 4 页
字号:
 839   3        }
 840   2         }
 841   1      }
 842          void Inicial_Game()
 843          { 
 844   1        uchar i;
 845   1        TR1=0;
 846   1        for(i=0;i<SNAKE_LONG;i++)
 847   1         {
 848   2         My_snake.Snake_body[SNAKE_LONG-i-1][X_POT]=i;
 849   2         My_snake.Snake_body[SNAKE_LONG-i-1][Y_POT]=0;
 850   2         }  //初始化蛇身!
 851   1       My_snake.direction=RIGHT;                //初始化蛇方向!
 852   1            
 853   1          My_snake.Game_Mode=GAME_RUNING;
 854   1       My_snake.Record=0;
 855   1       KEY_DOWN=0;
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 15  

 856   1       
 857   1       
 858   1           wr_lcd (comm,0x30);  /*30---基本指令动作*/
 859   1           wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
 860   1           Erasure();
 861   1       
 862   1           // My_snake.Food_Postion.x=0;
 863   1       //My_snake.Food_Postion.y=0;
 864   1       Creat_Food();
 865   1         Write_Food();
 866   1        
 867   1       
 868   1        for(i=0;i<4;i++)
 869   1            {
 870   2         Re_Build_Buffer(i,0);
 871   2         Write_Screen_Data_To_Screen(i,0);
 872   2          
 873   2         }
 874   1         //voice_function();
 875   1        
 876   1        
 877   1         TR1=1;
 878   1      
 879   1      }
 880          void Erasure_Trail()  //擦尾
 881          {
 882   1         uchar i;
 883   1         i=My_snake.Temp_Pot_Or_Last_Trail.x/4;
 884   1         Re_Build_Buffer(i,My_snake.Temp_Pot_Or_Last_Trail.y);
 885   1        Write_Screen_Data_To_Screen(i,My_snake.Temp_Pot_Or_Last_Trail.y);
 886   1           
 887   1      }
 888          void Draw_Head()//画头
 889          {
 890   1        uchar i;
 891   1        i=My_snake.Snake_body[0][X_POT]/4;
 892   1        Re_Build_Buffer(i,My_snake.Snake_body[0][Y_POT]);
 893   1         Write_Screen_Data_To_Screen(i,My_snake.Snake_body[0][Y_POT]);
 894   1      }
 895           
 896          void test_inicial()
 897          {
 898   1         uchar i;
 899   1        for(i=0;i<SNAKE_LONG;i++)
 900   1         {
 901   2         My_snake.Snake_body[SNAKE_LONG-i-1][X_POT]=i+SNAKE_LONG;
 902   2         My_snake.Snake_body[SNAKE_LONG-i-1][Y_POT]=0;
 903   2         }  //初始化蛇身!
 904   1       My_snake.direction=DOWN;                //初始化蛇方向!
 905   1       My_snake.Speed=0;        //初始化速度 
 906   1       My_snake.Game_Mode=GAME_RUNING;        //初始化状态
 907   1       My_snake.Current_screen_num=0;
 908   1       //Creat_Food();
 909   1       My_snake.Food_Postion.x=16;
 910   1       My_snake.Food_Postion.y=15;
 911   1       
 912   1      
 913   1      }
 914          
 915          void Creat_Food()//产生一个食物并且检测食物是不是产生在蛇的身上如果是重新产生
 916          {
 917   1         uchar i;
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 16  

 918   1        My_snake.Food_Postion.x=TH0%32; //丛定时器里面读数这样可以是随机的
 919   1        My_snake.Food_Postion.y=TL0%16;
 920   1        for(i=0;i<SNAKE_LONG;i++)
 921   1          {
 922   2       if(My_snake.Food_Postion.x==My_snake.Snake_body[i][X_POT]&&My_snake.Food_Postion.y==My_snake.Snake_body[i
             -][Y_POT])
 923   2         {
 924   3         My_snake.Food_Postion.x=TH0%32;
 925   3            My_snake.Food_Postion.y=TH0%16;
 926   3         i=0;
 927   3         }
 928   2         }
 929   1       
 930   1              
 931   1      }
 932          void Write_Food()//把食物画到屏上
 933          {
 934   1         uchar i;
 935   1         i=My_snake.Food_Postion.x/4;
 936   1         Re_Build_Buffer(i,My_snake.Food_Postion.y);
 937   1         Write_Screen_Data_To_Screen(i,My_snake.Food_Postion.y);
 938   1      
 939   1       
 940   1      }
 941          
 942          void Re_Build_Food_Buffer(uchar x,uchar y)//这个是用来重构缓存数据
 943          {
 944   1      uchar i,j,k;
 945   1         for(i=0;i<2;i++)
 946   1            for(j=0;j<4;j++)
 947   1          {
 948   2          My_snake.Screen_data[i][j]=0x00;
 949   2          }
 950   1         
 951   1        for(i=0;i<SNAKE_LONG;i++)
 952   1        {
 953   2           if(My_snake.Snake_body[i][X_POT]/4==x&&My_snake.Snake_body[i][Y_POT]==y)
 954   2        {
 955   3        j=My_snake.Snake_body[i][X_POT]%4;
 956   3        switch(j)
 957   3          {
 958   4           case 0:
 959   4             {
 960   5         for(k=0;k<4;k++)   
 961   5                {
 962   6                       My_snake.Screen_data[0][k]=My_snake.Screen_data[0][k]|0xf0;
 963   6                      }
 964   5              }
 965   4         break;
 966   4           case 1:
 967   4            {
 968   5         for(k=0;k<4;k++)   
 969   5                    {
 970   6                            My_snake.Screen_data[0][k]=My_snake.Screen_data[0][k]|0x0f;
 971   6                          }
 972   5            }
 973   4         break;
 974   4        case 2:
 975   4            {
 976   5         for(k=0;k<4;k++)   
 977   5                   {
 978   6                              My_snake.Screen_data[1][k]=My_snake.Screen_data[1][k]|0xf0;
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 17  

 979   6                                 }
 980   5                   }
 981   4         break;
 982   4          case 3:
 983   4            {
 984   5         for(k=0;k<4;k++)   
 985   5                   {
 986   6                                  My_snake.Screen_data[1][k]=My_snake.Screen_data[1][k]|0x0f;
 987   6                                 }
 988   5             }
 989   4         break;
 990   4         default:
 991   4               break;          
 992   4          }
 993   3        }
 994   2         }
 995   1       
 996   1         j=My_snake.Food_Postion.x%4;
 997   1        switch(j)
 998   1          {
 999   2           case 0:
1000   2             {
1001   3         for(k=0;k<4;k++)   
1002   3                {
1003   4                       My_snake.Screen_data[0][k]=My_snake.Screen_data[0][k]|0xf0;
1004   4                      }
1005   3              }
1006   2         break;
1007   2           case 1:
1008   2            {
1009   3         for(k=0;k<4;k++)   
1010   3                    {
1011   4                            My_snake.Screen_data[0][k]=My_snake.Screen_data[0][k]|0x0f;
1012   4                          }
1013   3            }
1014   2         break;
1015   2        case 2:
1016   2            {
1017   3         for(k=0;k<4;k++)   
1018   3                   {
1019   4                              My_snake.Screen_data[1][k]=My_snake.Screen_data[1][k]|0xf0;
1020   4                                 }
1021   3                   }
1022   2         break;
1023   2          case 3:
1024   2            {
1025   3         for(k=0;k<4;k++)   
1026   3                   {
1027   4                                  My_snake.Screen_data[1][k]=My_snake.Screen_data[1][k]|0x0f;
1028   4                                 }
1029   3             }
1030   2         break;
1031   2         default:
1032   2               break;          
1033   2          }
1034   1      
1035   1       
1036   1        
1037   1       
1038   1      }
1039          void Test_inter_timer1()  //这个是用来做调试的
1040          {
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 18  

1041   1              TR1=0;
1042   1          TR0=0;
1043   1        if(My_snake.soft_conter>=My_snake.Speed)
1044   1           {
1045   2        My_snake.soft_conter=0;
1046   2        if(My_snake.Game_Mode==GAME_RUNING)
1047   2            {
1048   3               
1049   3                  One_Step();
1050   3                  Erasure_Trail();
1051   3                  Draw_Head();
1052   3          //  Write_Food();
1053   3            if(My_snake.Snake_body[0][Y_POT]==My_snake.Food_Postion.y&&My_snake.Snake_body[0][X_POT]==My_snake.F
             -ood_Postion.x)
1054   3               {
1055   4           Creat_Food();//产生一个食物并且检测食物是不是产生在蛇的身上如果是重新产生
1056   4           Write_Food();     
1057   4            }
1058   3                
1059   3             }
1060   2          else My_snake.soft_conter++;
1061   2        
1062   2        }
1063   1         else My_snake.soft_conter++;
1064   1          TR1=1;
1065   1          TR0=1; 
1066   1      }
1067           
1068          /*-----------------显示你的成绩------------*/
1069          void Show_Your_Record()
1070          {
1071   1         display_all_screen(YOUR_RECORD);
1072   1       wr_lcd (comm,0x34);
1073   1       wr_lcd (comm,0x30);
1074   1          wr_lcd (comm,0x86);
1075   1       wr_lcd(dat,NO_Data[My_snake.Record/100]);
1076   1       wr_lcd(dat,NO_Data[(My_snake.Record%100)/10]);
1077   1       wr_lcd(dat,NO_Data[My_snake.Record%10]);
1078   1      }
1079           
1080           main()
1081            { 
1082   1          //uchar i;
1083   1         inicial_timer();//初始化定时器
1084   1         Erasure();
1085   1          display_all_screen(WELCOME_SCREEN); //显示屏第一屏的欢迎信息
1086   1         My_snake.Current_screen_num=WELCOME_SCREEN;//
1087   1         My_snake.Game_Mode=GAME_WELCOME_SCREEN;
1088   1         My_snake.Speed=DEFAULT_SPEED;
1089   1         
1090   1       
1091   1        while(1) 
1092   1        {
1093   2       
1094   2       
1095   2        Key_Respond();
1096   2         
1097   2        } 
1098   1       
1099   1       
1100   1         // direction=right;//初始化方向
1101   1       // speech=2;//初始化速度
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 19  

1102   1        }
1103          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2385    ----
   CONSTANT SIZE    =    266    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     52      13
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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