📄 game.lst
字号:
833 3 GameDisplay(); //游戏界面显示程序
834 3 ReadRoundPos(); //复制当前关卡圆形坐标和个数
835 3 DispPass();
836 3 }
837 2 }
838 1 }
839 /**********************************************************
840 *函数名:UpMove()
841 *功 能:娃娃脸向上移动
842 *说 明:向上移动是-8 (8X8的数据间隔是8)
843 *空(什么都不显示)=0,墙=1,圆=2,箱子=3,脸=4,十字=5
844 **********************************************************/
845 void UpMove()
846 {
847 1 uchar pos;
848 1 pos = ReadMenPos(); //获得娃娃脸的位置
849 1 if (Map[pos-8]!=1) //判断移动方向前面是否是墙
850 1 {
851 2 switch (Map[pos-8])
852 2 {
853 3 case 0: //移动方向前面是空的执行这里
854 3 Map[pos-8] = 4;//娃娃脸的新位置
855 3 Map[pos] =0; //清空娃娃脸位置
856 3 break;
857 3 case 2: //是圆形执行这里
858 3 Map[pos-8] = 4;//娃娃脸的新位置
859 3 Map[pos] =0; //清空娃娃脸位置
860 3 break;
861 3 case 3: //移动方向前面是箱子执行这里
C51 COMPILER V8.02 GAME 11/01/2008 07:36:26 PAGE 15
862 3 //箱子的前面不是墙或箱子或十字就可以移动
863 3 if (Map[pos-16]==0)
864 3 {
865 4 Map[pos-16]= 3;//显示箱子
866 4 Map[pos-8] = 4;//娃娃脸的新位置
867 4 Map[pos] = 0; //清空娃娃脸位置
868 4 }
869 3 else if (Map[pos-16]==2)
870 3 {
871 4 Map[pos-16]= 5;//显示十字形
872 4 Map[pos-8] = 4;//娃娃脸的新位置
873 4 Map[pos] = 0; //清空娃娃脸位置
874 4 }
875 3 break;
876 3 case 5: //移动方向前面是十字执行这里
877 3 //十字的前面不是墙或箱子或十字就可以移动
878 3 if (Map[pos-16]==0)
879 3 {
880 4 Map[pos-16]= 3;//显示箱子
881 4 Map[pos-8] = 4;//娃娃脸的新位置
882 4 Map[pos] = 0; //清空娃娃脸位置
883 4 }
884 3 else if (Map[pos-16]==2)
885 3 {
886 4 Map[pos-16]= 5;//显示十字形
887 4 Map[pos-8] = 4;//娃娃脸的新位置
888 4 Map[pos] = 0; //清空娃娃脸位置
889 4 }
890 3 break;
891 3 }
892 2 RefRound(); //刷新圆形
893 2 Passed(); //判断是否满足进入下一关
894 2 //MapCreate(); //刷新地图
895 2 GameDisplay();//显示游戏界面
896 2 //Passed(); //判断是否满足进入下一关
897 2 }
898 1 }
899 /**********************************************************
900 *函数名:DownMove()
901 *功 能:娃娃脸向下移动 +8
902 **********************************************************/
903 void DownMove()
904 {
905 1 uchar pos;
906 1 pos = ReadMenPos(); //获得娃娃脸的位置
907 1 if (Map[pos+8]!=1) //判断移动方向前面是否是墙
908 1 {
909 2 switch (Map[pos+8]) //得到娃娃脸前面的图形
910 2 {
911 3 case 0: //移动方向前面是空的执行这里
912 3 Map[pos+8] = 4;//娃娃脸的新位置
913 3 Map[pos] = 0; //清空娃娃脸位置
914 3 break;
915 3 case 2: //是圆形执行这里
916 3 Map[pos+8] = 4;//娃娃脸的新位置
917 3 Map[pos] = 0; //清空娃娃脸位置
918 3 break;
919 3 case 3: //移动方向前面是箱子执行这里
920 3 //箱子的前面不是墙或箱子或十字就可以移动
921 3 if (Map[pos+16]==0)
922 3 {
923 4 Map[pos+16]= 3;//显示箱子
C51 COMPILER V8.02 GAME 11/01/2008 07:36:26 PAGE 16
924 4 Map[pos+8] = 4;//娃娃脸的新位置
925 4 Map[pos] = 0; //清空娃娃脸位置
926 4 }
927 3 else if(Map[pos+16]==2)
928 3 {
929 4 Map[pos+16]= 5;//显示十字形
930 4 Map[pos+8] = 4;//娃娃脸的新位置
931 4 Map[pos] = 0; //清空娃娃脸位置
932 4 }
933 3 break;
934 3 case 5: //移动方向前面是十字执行这里
935 3 //十字的前面不是墙或箱子或十字就可以移动
936 3 if (Map[pos+16]==0)
937 3 {
938 4 Map[pos+16]= 3;//显示箱子
939 4 Map[pos+8] = 4;//娃娃脸的新位置
940 4 Map[pos] = 0; //清空娃娃脸位置
941 4 }
942 3 else if(Map[pos+16]==2)
943 3 {
944 4 Map[pos+16]= 5;//显示十字形
945 4 Map[pos+8] = 4;//娃娃脸的新位置
946 4 Map[pos] = 0; //清空娃娃脸位置
947 4 }
948 3 break;
949 3 }
950 2 RefRound(); //刷新圆形
951 2 Passed(); //判断是否满足进入下一关
952 2 //MapCreate(); //刷新地图
953 2 GameDisplay();//显示游戏界面
954 2 //Passed(); //判断是否满足进入下一关
955 2 }
956 1 }
957 /**********************************************************
958 *函数名:LeftMove()
959 *功 能:娃娃脸向左移动 -1
960 **********************************************************/
961 void LeftMove()
962 {
963 1 uchar pos;
964 1 pos = ReadMenPos(); //获得娃娃脸的位置
965 1 if (Map[pos-1]!=1) //判断移动方向前面是否是墙
966 1 {
967 2 switch (Map[pos-1])
968 2 {
969 3 case 0: //移动方向前面是空的执行这里
970 3 Map[pos-1] = 4;//娃娃脸的新位置
971 3 Map[pos] =0; //清空娃娃脸位置
972 3 break;
973 3 case 2: //是圆形执行这里
974 3 Map[pos-1] = 4;//娃娃脸的新位置
975 3 Map[pos] =0; //清空娃娃脸位置
976 3 break;
977 3 case 3: //移动方向前面是箱子执行这里
978 3 //箱子的前面不是墙或箱子或十字就可以移动
979 3 if (Map[pos-2]==0)
980 3 {
981 4 Map[pos-2]= 3;//显示箱子
982 4 Map[pos-1]= 4;//娃娃脸的新位置
983 4 Map[pos] = 0; //清空娃娃脸位置
984 4 }
985 3 else if (Map[pos-2]==2)
C51 COMPILER V8.02 GAME 11/01/2008 07:36:26 PAGE 17
986 3 {
987 4 Map[pos-2]= 5; //显示十字形
988 4 Map[pos-1]= 4;//娃娃脸的新位置
989 4 Map[pos] = 0; //清空娃娃脸位置
990 4 }
991 3 break;
992 3 case 5: //移动方向前面是十字执行这里
993 3 //十字的前面不是墙或箱子或十字就可以移动
994 3 if (Map[pos-2]==0)
995 3 {
996 4 Map[pos-2]= 3;//显示箱子
997 4 Map[pos-1]= 4;//娃娃脸的新位置
998 4 Map[pos] = 0; //清空娃娃脸位置
999 4 }
1000 3 else if (Map[pos-2]==2)
1001 3 {
1002 4 Map[pos-2]= 5;//显示十字形
1003 4 Map[pos-1]= 4;//娃娃脸的新位置
1004 4 Map[pos] = 0; //清空娃娃脸位置
1005 4 }
1006 3 break;
1007 3 }
1008 2 RefRound(); //刷新圆形
1009 2 Passed(); //判断是否满足进入下一关
1010 2 //MapCreate(); //刷新地图
1011 2 GameDisplay();//显示游戏界面
1012 2 //Passed(); //判断是否满足进入下一关
1013 2 }
1014 1 }
1015 /**********************************************************
1016 *函数名:RightMove()
1017 *功 能:娃娃脸向右移动 +1
1018 **********************************************************/
1019 void RightMove()
1020 {
1021 1 uchar pos;
1022 1 pos = ReadMenPos(); //获得娃娃脸的位置
1023 1 if (Map[pos+1]!=1) //判断移动方向前面是否是墙
1024 1 {
1025 2 switch (Map[pos+1])
1026 2 {
1027 3 case 0: //移动方向前面是空的执行这里
1028 3 Map[pos+1] = 4;//娃娃脸的新位置
1029 3 Map[pos] =0; //清空娃娃脸位置
1030 3 break;
1031 3 case 2: //是圆形执行这里
1032 3 Map[pos+1] = 4;//娃娃脸的新位置
1033 3 Map[pos] =0; //清空娃娃脸位置
1034 3 break;
1035 3 case 3: //移动方向前面是箱子执行这里
1036 3 //箱子的前面不是墙或箱子或十字就可以移动
1037 3 if (Map[pos+2]==0)
1038 3 {
1039 4 Map[pos+2]= 3;//显示箱子
1040 4 Map[pos+1]= 4;//娃娃脸的新位置
1041 4 Map[pos] = 0; //清空娃娃脸位置
1042 4 }
1043 3 else if(Map[pos+2]==2)
1044 3 {
1045 4 Map[pos+2]= 5;//显示十字形
1046 4 Map[pos+1]= 4;//娃娃脸的新位置
1047 4 Map[pos] = 0; //清空娃娃脸位置
C51 COMPILER V8.02 GAME 11/01/2008 07:36:26 PAGE 18
1048 4 }
1049 3 break;
1050 3 case 5: //移动方向前面是十字执行这里
1051 3 //十字形的前面不是墙或箱子或十字就可以移动
1052 3 if (Map[pos+2]==0)
1053 3 {
1054 4 Map[pos+2]= 3;//显示箱子
1055 4 Map[pos+1]= 4;//娃娃脸的新位置
1056 4 Map[pos] = 0; //清空娃娃脸位置
1057 4 }
1058 3 else if(Map[pos+2]==2)
1059 3 {
1060 4 Map[pos+2]= 5;//显示十字形
1061 4 Map[pos+1]= 4;//娃娃脸的新位置
1062 4 Map[pos] = 0; //清空娃娃脸位置
1063 4 }
1064 3 break;
1065 3 }
1066 2 RefRound(); //刷新圆形
1067 2 Passed(); //判断是否满足进入下一关
1068 2 //MapCreate(); //刷新地图
1069 2 GameDisplay();//显示游戏界面
1070 2 //Passed(); //判断是否满足进入下一关
1071 2 }
1072 1 }
1073 /**********************************************************
1074 *延时400us
1075 **********************************************************/
1076 void Delay400us() //晶振=12MHz 延时时间=404us
1077 {
1078 1 //晶振=11.0592MHz 延时时间≈438us
1079 1 uchar i,j; //总的延时时间=[(2*i)+1]*j+1+1
1080 1 for (j=4;j>0;j--) //j=2用12MHz,j=4 是24MHz晶振
1081 1 for (i=100;i>0;i--);
1082 1 }
1083 /**********************************************************
1084 *函数名:Sound()
1085 *功 能:音效子程序
1086 **********************************************************/
1087 void Sound()
1088 {
1089 1 uchar i;
1090 1 for (i=40;i>0;i--)
1091 1 {
1092 2 Beep=~Beep;
1093 2 Delay400us();
1094 2 }
1095 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1337 ----
CONSTANT SIZE = 1328 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 18 3
IDATA SIZE = 64 ----
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 + -