📄 main.lst
字号:
230 1 for (i=0;i<32;i++) //写上半屏(32行)
231 1 {
232 2 LCDWriteCommand(0x80+i);//Y地址寄存器
233 2 LCDWriteCommand(0x80); //X地址(LCM自动加1)
234 2 for (j=0;j<16;j++)//16x8列
235 2 {
236 3 LCDWriteData(GamePic[k]);//写入一个字节图形数据
237 3 k++; //指向下一个图形字节
238 3 }
239 2 }
240 1 for (i=0;i<32;i++) //写下半屏
241 1 {
C51 COMPILER V8.08 MAIN 06/14/2007 15:33:59 PAGE 5
242 2 LCDWriteCommand(0x80+i);//Y地址寄存器
243 2 LCDWriteCommand(0x88); //X地址(LCM自动加1)
244 2 for (j=0;j<16;j++)//
245 2 {
246 3 LCDWriteData(GamePic[k]);
247 3 k++;
248 3 }
249 2 }
250 1 }
251 /**********************************************************
252 *函数名:ReadPosition()
253 *功 能:读得娃娃脸的当前坐标位置
254 *返 回:ReadPos
255 **********************************************************/
256 uchar ReadPosition()
257 {
258 1 uchar i;
259 1 uchar ReadPos; //定义变量存放娃娃脸的位置.
260 1 for (i=0;i<64;i++)
261 1 {
262 2 if(Map[i]==4)
263 2 {
264 3 ReadPos = i; //记录娃娃脸的坐标
265 3 break; //找到位置跳出循环
266 3 }
267 2 }
268 1 return (ReadPos); //返回娃娃脸当前位置
269 1 }
270 /**********************************************************
271 *函数名:Readyuan()
272 *功 能:读得圆形的坐标位置(箱子移动目的地)
273 **********************************************************/
274 void Readyuan()
275 {
276 1 uchar i,j=0;
277 1 for (i=0;i<64;i++)
278 1 {
279 2 if (Map[i]==2) //找出圆形的位置
280 2 {
281 3 yuanPos[j] = i; //存放圆的位置
282 3 j++;
283 3 yuanPos[6] = j;//存放有几个圆
284 3 }
285 2 }
286 1 }
287 /**********************************************************
288 *函数名:Refyuan()
289 *功 能:刷新显示圆形(箱子移动目的地)
290 **********************************************************/
291 void Refyuan()
292 {
293 1 uchar i;
294 1 for (i=0;i<yuanPos[6];i++)
295 1 {
296 2 if(Map[yuanPos[i]]==0) Map[yuanPos[i]]=2;
297 2 }
298 1 if (Map[yuanPos[0]]==5&&Map[yuanPos[1]]==5&&Map[yuanPos[2]]==5)
299 1 {//过关
300 2 guanka++; //进入下一关
301 2 if (guanka==10) guanka=0;
302 2 CopyMap(guanka); //复制地图数据
303 2 MapCreate(); //地图生成程序
C51 COMPILER V8.08 MAIN 06/14/2007 15:33:59 PAGE 6
304 2 GameDisplay();//游戏界面显示程序
305 2 Readyuan();//
306 2 }
307 1 }
308 /**********************************************************
309 *函数名:UpMove()
310 *功 能:娃娃脸向上移动
311 *说 明:向上移动是-8 (8X8的数据间隔是8)
312 *空(什么都不显示)=0,墙=1,圆=2,箱子=3,脸=4,十字=5
313 **********************************************************/
314 void UpMove()
315 {
316 1 uchar pos;
317 1 pos = ReadPosition(); //获得娃娃脸的位置
318 1 if (Map[pos-8]!=1)//判断移动方向前面是否是墙
319 1 {
320 2 switch (Map[pos-8])
321 2 {
322 3 case 0: //移动方向前面是空的执行这里
323 3 Map[pos-8] = 4;//娃娃脸的新位置
324 3 Map[pos] =0; //清空娃娃脸位置
325 3 break;
326 3 case 2: //是圆形执行这里
327 3 Map[pos-8] = 4;//娃娃脸的新位置
328 3 Map[pos] =0; //清空娃娃脸位置
329 3 break;
330 3 case 3: //移动方向前面是箱子执行这里
331 3 //箱子的前面不是墙或箱子或十字就可以移动
332 3 if (Map[pos-16]==0)
333 3 {
334 4 Map[pos-16]= 3;//显示箱子
335 4 Map[pos-8] = 4;//娃娃脸的新位置
336 4 Map[pos] = 0; //清空娃娃脸位置
337 4 }
338 3 else if (Map[pos-16]==2)
339 3 {
340 4 Map[pos-16]= 5;//显示十字形
341 4 Map[pos-8] = 4;//娃娃脸的新位置
342 4 Map[pos] = 0; //清空娃娃脸位置
343 4 }
344 3 break;
345 3 case 5: //移动方向前面是十字执行这里
346 3 //十字的前面不是墙或箱子或十字就可以移动
347 3 if (Map[pos-16]==0)
348 3 {
349 4 Map[pos-16]= 3;//显示箱子
350 4 Map[pos-8] = 4;//娃娃脸的新位置
351 4 Map[pos] = 0; //清空娃娃脸位置
352 4 }
353 3 else if (Map[pos-16]==2)
354 3 {
355 4 Map[pos-16]= 5;//显示十字形
356 4 Map[pos-8] = 4;//娃娃脸的新位置
357 4 Map[pos] = 0; //清空娃娃脸位置
358 4 }
359 3 break;
360 3 }
361 2 Refyuan();//刷新圆形并判断是否满足(过关!)
362 2 MapCreate(); //刷新地图
363 2 GameDisplay();//显示游戏界面
364 2
365 2 }
C51 COMPILER V8.08 MAIN 06/14/2007 15:33:59 PAGE 7
366 1 }
367 /**********************************************************
368 *函数名:DownMove()
369 *功 能:娃娃脸向下移动 +8
370 **********************************************************/
371 void DownMove()
372 {
373 1 uchar pos;
374 1 pos = ReadPosition(); //获得娃娃脸的位置
375 1 if (Map[pos+8]!=1)//判断移动方向前面是否是墙
376 1 {
377 2 switch (Map[pos+8]) //得到娃娃脸前面的图形
378 2 {
379 3 case 0: //移动方向前面是空的执行这里
380 3 Map[pos+8] = 4;//娃娃脸的新位置
381 3 Map[pos] = 0; //清空娃娃脸位置
382 3 break;
383 3 case 2: //是圆形执行这里
384 3 Map[pos+8] = 4;//娃娃脸的新位置
385 3 Map[pos] = 0; //清空娃娃脸位置
386 3 break;
387 3 case 3: //移动方向前面是箱子执行这里
388 3 //箱子的前面不是墙或箱子或十字就可以移动
389 3 if (Map[pos+16]==0)
390 3 {
391 4 Map[pos+16]= 3;//显示箱子
392 4 Map[pos+8] = 4;//娃娃脸的新位置
393 4 Map[pos] = 0; //清空娃娃脸位置
394 4 }
395 3 else if(Map[pos+16]==2)
396 3 {
397 4 Map[pos+16]= 5;//显示十字形
398 4 Map[pos+8] = 4;//娃娃脸的新位置
399 4 Map[pos] = 0; //清空娃娃脸位置
400 4 }
401 3 break;
402 3 case 5: //移动方向前面是十字执行这里
403 3 //十字的前面不是墙或箱子或十字就可以移动
404 3 if (Map[pos+16]==0)
405 3 {
406 4 Map[pos+16]= 3;//显示箱子
407 4 Map[pos+8] = 4;//娃娃脸的新位置
408 4 Map[pos] = 0; //清空娃娃脸位置
409 4 }
410 3 else if(Map[pos+16]==2)
411 3 {
412 4 Map[pos+16]= 5;//显示十字形
413 4 Map[pos+8] = 4;//娃娃脸的新位置
414 4 Map[pos] = 0; //清空娃娃脸位置
415 4 }
416 3 break;
417 3 }
418 2 Refyuan();//刷新圆形并判断是否满足(过关!)
419 2 MapCreate(); //刷新地图
420 2 GameDisplay();//显示游戏界面
421 2 }
422 1 }
423 /**********************************************************
424 *函数名:LeftMove()
425 *功 能:娃娃脸向左移动 -1
426 **********************************************************/
427 void LeftMove()
C51 COMPILER V8.08 MAIN 06/14/2007 15:33:59 PAGE 8
428 {
429 1 uchar pos;
430 1 pos = ReadPosition(); //获得娃娃脸的位置
431 1 if (Map[pos-1]!=1)//判断移动方向前面是否是墙
432 1 {
433 2 switch (Map[pos-1])
434 2 {
435 3 case 0: //移动方向前面是空的执行这里
436 3 Map[pos-1] = 4;//娃娃脸的新位置
437 3 Map[pos] =0; //清空娃娃脸位置
438 3 break;
439 3 case 2: //是圆形执行这里
440 3 Map[pos-1] = 4;//娃娃脸的新位置
441 3 Map[pos] =0; //清空娃娃脸位置
442 3 break;
443 3 case 3: //移动方向前面是箱子执行这里
444 3 //箱子的前面不是墙或箱子或十字就可以移动
445 3 if (Map[pos-2]==0)
446 3 {
447 4 Map[pos-2]= 3;//显示箱子
448 4 Map[pos-1]= 4;//娃娃脸的新位置
449 4 Map[pos] = 0; //清空娃娃脸位置
450 4 }
451 3 else if (Map[pos-2]==2)
452 3 {
453 4 Map[pos-2]= 5; //显示十字形
454 4 Map[pos-1]= 4;//娃娃脸的新位置
455 4 Map[pos] = 0; //清空娃娃脸位置
456 4 }
457 3 break;
458 3 case 5: //移动方向前面是十字执行这里
459 3 //十字的前面不是墙或箱子或十字就可以移动
460 3 if (Map[pos-2]==0)
461 3 {
462 4 Map[pos-2]= 3;//显示箱子
463 4 Map[pos-1]= 4;//娃娃脸的新位置
464 4 Map[pos] = 0; //清空娃娃脸位置
465 4 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -