📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************
2 *名称:推箱子游戏V0.1 Beta 1 (以占用3513字节 EPROM空间)
3 *编程:飞扬
4 *说明:采用YM12864R液晶(ST7920)+62256+PT6122遥控+AT89S51
5 *下一个版本增加音效,地图编辑功能,界面显示美化,撤销上一步!
6 *主要是学习外扩展RAM才搞这个东东! 我使用的是24MHz晶振
7 *关卡增加到20关
8 **********************************************************/
9 #include <at89x52.h>
10 #include "MAIN.H"
11 /****** 引脚定义 ******/
12 sbit Beep = P3^3; //音频输出脚
13
14 /****** 变量/数组定义 ******/
15 uchar code logotab[4][17]={
16 {" "},
17 {" V0.1 Beta 1 "},
18 {" 推箱子游戏 "},
19 {" 编程 飞扬 "}};
20 //存放遥控接收数据
21 uchar xdata KeyCoding[4]={0,0,0,0};
22 //关卡设置
23 uchar guanka = 0;
24 //用1024个字节存放动态绘图数据,我叫它显存数据
25 uchar xdata GamePic[1024] _at_ 0x0100; //这里使用了绝对地址
26 //空(用于清空图形移动后的痕迹)编号0
27 uchar code kong[8]={0,0,0,0,0,0,0,0};
28 //墙壁(用来标识移动的范围)编号1
29 uchar code qiang[8]={0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00};
30 //圆形(箱子要推到的地方)编号2
31 uchar code yuan[8]={0x3c,0x66,0xc3,0x81,0x81,0xc3,0x66,0x3c};
32 //箱子(推动的就是他)编号3
33 uchar code xiangzi[8]={0xff,0x81,0xbd,0xbd,0xbd,0xbd,0x81,0xff};
34 //娃娃脸(用于推动箱子)编号4
35 uchar code lian[8]={0x7e,0xff,0xdb,0xff,0xff,0xc3,0xe7,0x7e};
36 //十字形(箱子推到圆形位置后变为十字形)编号5
37 uchar code shizi[8]={0x3c,0x3c,0xff,0xff,0xff,0xff,0x3c,0x3c};
38 //用于计算图形移动和放置的坐标
39 //实际存放的是GamePic数组的相应下标
40 uint code MoveData[64]={
41 0,1,2,3,4,5,6,7,
42 128,129,130,131,132,133,134,135,
43 256,257,258,259,260,261,262,263,
44 384,385,386,387,388,389,390,391,
45 512,513,514,515,516,517,518,519,
46 640,641,642,643,644,645,646,647,
47 768,769,770,771,772,773,774,775,
48 896,897,898,899,900,901,902,903
49 };
50 /*8X8的游戏地图数据,同时根据图形数据判断娃娃脸是否可以移动,
51 *箱子是否可以推动,箱子推动的方向是否是墙和箱子,是则不
52 *能推动!箱子推到的地方是圆形则用十字形替换(将该位置数据换成5),
53 *推动十字形,则再恢复到箱子的形状(在换成3).
54 *空(什么都不显示)=0,墙=1,圆=2,箱子=3,脸=4,十字=5 */
55 uchar code GameMap[20][64]={
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 2
56 //第一关
57 {1,1,1,1,1,1,1,1,
58 1,0,0,0,1,2,0,1,
59 1,2,0,0,3,0,0,1,
60 1,1,3,1,1,0,0,1,
61 1,0,0,1,1,3,1,1,
62 1,0,0,4,0,0,0,1,
63 1,0,2,1,0,0,0,1,
64 1,1,1,1,1,1,1,1},
65 //第二关
66 {1,1,1,1,1,1,1,1,
67 1,0,0,0,1,0,0,1,
68 1,0,2,0,3,2,0,1,
69 1,1,3,1,1,0,0,1,
70 1,0,0,1,1,3,1,1,
71 1,0,0,4,0,2,0,1,
72 1,0,0,1,0,0,0,1,
73 1,1,1,1,1,1,1,1},
74 //第三关
75 {1,1,1,1,1,1,1,1,
76 1,0,0,0,1,0,0,1,
77 1,0,0,0,3,0,0,1,
78 1,0,3,1,1,0,0,1,
79 1,0,2,1,1,3,1,1,
80 1,0,2,4,0,0,0,1,
81 1,0,2,1,0,0,0,1,
82 1,1,1,1,1,1,1,1},
83 //第四关
84 {1,1,1,1,1,1,1,1,
85 1,0,0,0,1,0,0,1,
86 1,0,2,0,3,2,0,1,
87 1,1,3,1,1,0,0,1,
88 1,0,0,1,1,3,1,1,
89 1,0,2,4,0,0,0,1,
90 1,0,0,1,0,0,0,1,
91 1,1,1,1,1,1,1,1},
92 //第五关
93 {1,1,1,1,1,1,1,1,
94 1,0,0,0,1,0,0,1,
95 1,0,0,2,3,0,0,1,
96 1,1,3,1,1,0,0,1,
97 1,0,2,1,1,3,1,1,
98 1,0,0,4,2,0,0,1,
99 1,0,0,1,0,0,0,1,
100 1,1,1,1,1,1,1,1},
101 //6
102 {1,1,1,1,1,1,1,1,
103 1,0,0,0,1,0,0,1,
104 1,0,0,0,3,0,0,1,
105 1,1,5,1,1,0,0,1,
106 1,0,2,1,1,3,1,1,
107 1,0,2,4,0,0,0,1,
108 1,0,0,1,0,0,0,1,
109 1,1,1,1,1,1,1,1},
110 //7
111 {1,1,1,1,1,1,1,1,
112 1,1,0,1,1,0,2,1,
113 1,0,0,3,0,0,0,1,
114 1,4,3,3,0,0,0,1,
115 1,0,1,0,0,1,0,1,
116 1,0,1,1,1,1,0,1,
117 1,2,0,0,0,0,2,1,
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 3
118 1,1,1,1,1,1,1,1},
119 //8
120 {1,1,1,1,1,1,1,1,
121 1,0,0,1,0,0,0,1,
122 1,0,0,1,0,5,0,1,
123 1,0,0,1,0,2,1,1,
124 1,1,0,3,0,0,0,1,
125 1,0,3,0,0,2,0,1,
126 1,4,0,1,1,0,0,1,
127 1,1,1,1,1,1,1,1},
128 //9
129 {1,1,1,1,1,1,1,1,
130 1,1,4,0,1,1,1,1,
131 1,0,0,0,3,2,0,1,
132 1,0,0,1,0,0,0,1,
133 1,0,0,0,1,5,0,1,
134 1,1,0,3,0,0,0,1,
135 1,1,1,1,0,2,0,1,
136 1,1,1,1,1,1,1,1},
137 //10
138 {1,1,1,1,1,1,1,1,
139 1,2,0,1,1,1,1,1,
140 1,2,0,0,0,1,1,1,
141 1,0,1,3,0,0,0,1,
142 1,2,0,3,3,1,0,1,
143 1,1,0,0,0,0,0,1,
144 1,1,1,1,1,0,4,1,
145 1,1,1,1,1,1,1,1},
146 //11
147 {1,1,1,1,1,1,1,1,
148 1,1,0,0,0,1,1,1,
149 1,0,1,2,3,0,1,1,
150 1,0,2,4,0,0,1,1,
151 1,0,3,0,3,0,1,1,
152 1,1,0,0,0,1,1,1,
153 1,1,1,1,1,1,1,1,
154 1,1,1,1,1,1,1,1},
155 //12
156 {1,1,1,1,1,1,1,1,
157 1,1,0,1,1,0,2,1,
158 1,0,3,0,3,3,0,1,
159 1,4,0,0,0,0,0,1,
160 1,0,1,0,0,1,0,1,
161 1,0,1,1,1,1,0,1,
162 1,2,0,0,0,0,2,1,
163 1,1,1,1,1,1,1,1},
164 //13
165 {1,1,1,1,1,1,1,1,
166 1,1,1,1,1,1,1,1,
167 1,1,0,0,0,0,1,1,
168 1,1,2,1,1,3,0,1,
169 1,0,2,2,3,0,0,1,
170 1,0,0,1,3,0,0,1,
171 1,0,0,4,0,1,1,1,
172 1,1,1,1,1,1,1,1},
173 //14
174 {1,1,1,1,1,1,1,1,
175 1,1,1,0,0,1,1,1,
176 1,1,0,0,0,0,1,1,
177 1,0,2,0,2,3,1,1,
178 1,0,0,3,4,0,0,1,
179 1,1,1,1,5,1,0,1,
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 4
180 1,1,1,1,0,0,0,1,
181 1,1,1,1,1,1,1,1},
182 //15
183 {1,1,1,1,1,1,1,1,
184 1,1,1,1,1,1,1,1,
185 1,1,0,2,0,5,0,1,
186 1,1,0,0,1,0,0,1,
187 1,1,4,3,5,0,0,1,
188 1,1,1,0,0,0,1,1,
189 1,1,1,0,0,0,1,1,
190 1,1,1,1,1,1,1,1},
191 //16
192 {1,1,1,1,1,1,1,1,
193 1,1,1,1,1,1,1,1,
194 1,0,2,2,1,1,1,1,
195 1,0,3,0,0,0,0,1,
196 1,0,0,1,3,1,0,1,
197 1,0,4,0,2,3,0,1,
198 1,1,1,1,1,1,1,1,
199 1,1,1,1,1,1,1,1},
200 //17
201 {1,1,1,1,1,1,1,1,
202 1,1,1,1,1,1,1,1,
203 1,2,0,0,4,2,1,1,
204 1,0,0,3,1,0,1,1,
205 1,0,1,0,3,2,0,1,
206 1,0,0,0,3,1,0,1,
207 1,1,1,1,0,0,0,1,
208 1,1,1,1,1,1,1,1},
209 //18
210 {1,1,1,1,1,1,1,1,
211 1,2,0,2,1,1,1,1,
212 1,2,1,3,3,0,1,1,
213 1,0,0,0,4,0,1,1,
214 1,0,3,1,0,0,1,1,
215 1,1,0,0,0,1,1,1,
216 1,1,1,1,1,1,1,1,
217 1,1,1,1,1,1,1,1},
218 //19
219 {1,1,1,1,1,1,1,1,
220 1,1,1,1,1,1,1,1,
221 1,2,0,0,0,2,0,1,
222 1,0,1,0,1,0,0,1,
223 1,4,3,0,0,3,2,1,
224 1,1,1,1,1,0,3,1,
225 1,1,1,1,1,0,0,1,
226 1,1,1,1,1,1,1,1},
227 //20
228 {1,1,1,1,1,1,1,1,
229 1,0,0,1,1,1,1,1,
230 1,0,0,1,1,1,1,1,
231 1,0,2,5,0,0,0,1,
232 1,1,3,0,0,0,0,1,
233 1,1,0,1,3,1,1,1,
234 1,1,2,0,4,1,1,1,
235 1,1,1,1,1,1,1,1}
236 };
237 /*程序存储器中的数据是只读的!根据这个地图刷新显示.
238 用于复制程序存储器中的当前地图数据*/
239 uchar xdata Map[64];
240 /*用于存放圆形的坐标,最多5个圆.yuanPos[6]存放本关有几个圆*/
241 uchar xdata yuanPos[6] = 0;
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 5
242
243 /**********************************************************
244 *函数名:CopyMap()
245 *功 能:用于复制程序存储器中的当前地图数据
246 *输 入:入口参数为当前地图编号
247 **********************************************************/
248 void CopyMap(uchar num)
249 {
250 1 uchar i;
251 1 for (i=0;i<64;i++) Map[i] = GameMap[num][i];
252 1 }
253 /**********************************************************
254 *函数名:WriteMemorizer()
255 *功 能:将图形数据写入显存
256 *pos:要显示图形的位置,*p:指针指向要显示的图形
257 **********************************************************/
258 void WriteMemorizer(uchar pos,uchar *p)
259 {
260 1 uchar i;
261 1 uint zb;
262 1 zb = MoveData[pos]; //取显存地址(显示坐标)
263 1 for (i=0;i<8;i++)
264 1 {
265 2 GamePic[zb] = *p; //要显示的图形写入显存
266 2 p++; //下一个数据
267 2 zb+=16;//显存的下一个地址(每个地址之间的差是16)
268 2 } //或者说是间隔是16.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -