📄 snake.lst
字号:
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 + -