?? main.lst
字號:
269 1 }
270 /**********************************************************
271 *函數(shù)名:MapCreate()
272 *功 能:地圖生成程序
273 **********************************************************/
274 void MapCreate()
275 {
276 1 uchar i;
277 1 for (i=0;i<64;i++) //生成8X8的地圖
278 1 {
279 2 switch (Map[i])//獲得地圖上的圖形數(shù)據(jù)
280 2 { //將圖形編號對應(yīng)的數(shù)據(jù)寫入顯存
281 3 case 0:
282 3 WriteMemorizer(i,kong);//空
283 3 break;
284 3 case 1:
285 3 WriteMemorizer(i,qiang);//墻
286 3 break;
287 3 case 2:
288 3 WriteMemorizer(i,yuan);//圓
289 3 break;
290 3 case 3:
291 3 WriteMemorizer(i,xiangzi);//箱子
292 3 break;
293 3 case 4:
294 3 WriteMemorizer(i,lian);//臉
295 3 break;
296 3 case 5:
297 3 WriteMemorizer(i,shizi);//十字
298 3 break;
299 3 }
300 2 }
301 1 }
302 /**********************************************************
303 *函數(shù)名:GameDisplay()
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 6
304 *功 能:游戲圖形顯示程序(從左到右,從上到下)
305 * *point指向外部RAM存儲(chǔ)的128X64的圖片數(shù)據(jù)
306 **********************************************************/
307 void GameDisplay(uchar xdata *point)
308 {
309 1 uchar i,j;
310 1 LCDWriteCommand(0x34);//擴(kuò)充指令集
311 1 LCDWriteCommand(0x36);//繪圖顯示開
312 1 for (i=0;i<32;i++) //寫上半屏(32行)
313 1 {
314 2 LCDWriteCommand(0x80+i);//Y地址寄存器
315 2 LCDWriteCommand(0x80); //X地址(LCM自動(dòng)加1)
316 2 for (j=0;j<16;j++)//16x8列
317 2 { //獲得GamePic的首地址
318 3 LCDWriteData(*point);//寫入一個(gè)字節(jié)圖形數(shù)據(jù)
319 3 point++; //指向下一個(gè)圖形字節(jié)
320 3 }
321 2 }
322 1 for (i=0;i<32;i++) //寫下半屏
323 1 {
324 2 LCDWriteCommand(0x80+i);//Y地址寄存器
325 2 LCDWriteCommand(0x88); //X地址(LCM自動(dòng)加1)
326 2 for (j=0;j<16;j++)//
327 2 {
328 3 LCDWriteData(*point);//寫入一個(gè)字節(jié)圖形數(shù)據(jù)
329 3 point++;
330 3 }
331 2 }
332 1 }
333 /**********************************************************
334 *函數(shù)名:ReadPosition()
335 *功 能:讀得娃娃臉的當(dāng)前坐標(biāo)位置
336 *返 回:ReadPos
337 **********************************************************/
338 uchar ReadPosition()
339 {
340 1 uchar i;
341 1 uchar ReadPos; //定義變量存放娃娃臉的位置.
342 1 for (i=0;i<64;i++)//地圖數(shù)據(jù)是64個(gè)字節(jié)
343 1 { //逐個(gè)比較找出娃娃臉
344 2 if(Map[i]==4) //娃娃臉的編號是4
345 2 {
346 3 ReadPos = i;//記錄娃娃臉的坐標(biāo)
347 3 break; //找到娃娃臉就跳出循環(huán)
348 3 }
349 2 }
350 1 return (ReadPos); //返回娃娃臉當(dāng)前位置
351 1 }
352 /**********************************************************
353 *函數(shù)名:Readyuan()
354 *功 能:讀得圓形的坐標(biāo)位置(箱子移動(dòng)目的地)
355 *在初次讀入當(dāng)前地圖數(shù)據(jù)是,5(十字)也認(rèn)為是圓,不然就出錯(cuò),
356 *推動(dòng)十字形后就少一個(gè)圓了.
357 **********************************************************/
358 void Readyuan()
359 {
360 1 uchar i,j=0;
361 1 for (i=0;i<64;i++)//地圖數(shù)據(jù)是64個(gè)字節(jié)
362 1 { //圓形的編號是2
363 2 if (Map[i]==2||Map[i]==5) //找出圓形的位置
364 2 {//在編地圖的時(shí)候也用十字形.
365 3 yuanPos[j] = i;//存放圓形的位置
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 7
366 3 j++; //計(jì)數(shù)圓形的個(gè)數(shù)
367 3 yuanPos[6] = j;//存放圓形的個(gè)數(shù)
368 3 }
369 2 }
370 1 }
371 /**********************************************************
372 *函數(shù)名:Refyuan()
373 *功 能:刷新顯示圓形(箱子移動(dòng)目的地)
374 **********************************************************/
375 void Refyuan()
376 {
377 1 uchar i; //yuanPos[6] 存放著圓形的個(gè)數(shù)(3--5個(gè))
378 1 for (i=0;i<yuanPos[6];i++)//根據(jù)圓的個(gè)數(shù)來判斷
379 1 { //判斷圓形的坐標(biāo)位置是否為0(空),是就顯示圓形
380 2 if(Map[yuanPos[i]]==0) Map[yuanPos[i]]=2;
381 2 }
382 1 }
383 /**********************************************************
384 *函數(shù)名:Next()
385 *功 能:進(jìn)入下一關(guān)
386 **********************************************************/
387 void Next()
388 { //圓形位置全變?yōu)槭中?5),說明推完了,過關(guān)
389 1 if (Map[yuanPos[0]]==5&&Map[yuanPos[1]]==5&&Map[yuanPos[2]]==5)
390 1 {//過關(guān)
391 2 guanka++; //進(jìn)入下一關(guān)
392 2 if (guanka==20) guanka=0;//這里設(shè)置為20關(guān)
393 2 CopyMap(guanka);//復(fù)制地圖數(shù)據(jù)
394 2 MapCreate(); //地圖生成程序
395 2 GameDisplay(GamePic); //游戲界面顯示程序
396 2 Readyuan(); //復(fù)制當(dāng)前關(guān)卡圓形坐標(biāo)和個(gè)數(shù)
397 2 }
398 1 }
399 /**********************************************************
400 *函數(shù)名:UpMove()
401 *功 能:娃娃臉向上移動(dòng)
402 *說 明:向上移動(dòng)是-8 (8X8的數(shù)據(jù)間隔是8)
403 *空(什么都不顯示)=0,墻=1,圓=2,箱子=3,臉=4,十字=5
404 **********************************************************/
405 void UpMove()
406 {
407 1 uchar pos;
408 1 pos = ReadPosition(); //獲得娃娃臉的位置
409 1 if (Map[pos-8]!=1) //判斷移動(dòng)方向前面是否是墻
410 1 {
411 2 switch (Map[pos-8])
412 2 {
413 3 case 0: //移動(dòng)方向前面是空的執(zhí)行這里
414 3 Map[pos-8] = 4;//娃娃臉的新位置
415 3 Map[pos] =0; //清空娃娃臉位置
416 3 break;
417 3 case 2: //是圓形執(zhí)行這里
418 3 Map[pos-8] = 4;//娃娃臉的新位置
419 3 Map[pos] =0; //清空娃娃臉位置
420 3 break;
421 3 case 3: //移動(dòng)方向前面是箱子執(zhí)行這里
422 3 //箱子的前面不是墻或箱子或十字就可以移動(dòng)
423 3 if (Map[pos-16]==0)
424 3 {
425 4 Map[pos-16]= 3;//顯示箱子
426 4 Map[pos-8] = 4;//娃娃臉的新位置
427 4 Map[pos] = 0; //清空娃娃臉位置
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 8
428 4 }
429 3 else if (Map[pos-16]==2)
430 3 {
431 4 Map[pos-16]= 5;//顯示十字形
432 4 Map[pos-8] = 4;//娃娃臉的新位置
433 4 Map[pos] = 0; //清空娃娃臉位置
434 4 }
435 3 break;
436 3 case 5: //移動(dòng)方向前面是十字執(zhí)行這里
437 3 //十字的前面不是墻或箱子或十字就可以移動(dòng)
438 3 if (Map[pos-16]==0)
439 3 {
440 4 Map[pos-16]= 3;//顯示箱子
441 4 Map[pos-8] = 4;//娃娃臉的新位置
442 4 Map[pos] = 0; //清空娃娃臉位置
443 4 }
444 3 else if (Map[pos-16]==2)
445 3 {
446 4 Map[pos-16]= 5;//顯示十字形
447 4 Map[pos-8] = 4;//娃娃臉的新位置
448 4 Map[pos] = 0; //清空娃娃臉位置
449 4 }
450 3 break;
451 3 }
452 2 Refyuan(); //刷新圓形
453 2 MapCreate(); //刷新地圖
454 2 GameDisplay(GamePic);//顯示游戲界面
455 2 Next(); //判斷是否滿足進(jìn)入下一關(guān)
456 2 }
457 1 }
458 /**********************************************************
459 *函數(shù)名:DownMove()
460 *功 能:娃娃臉向下移動(dòng) +8
461 **********************************************************/
462 void DownMove()
463 {
464 1 uchar pos;
465 1 pos = ReadPosition(); //獲得娃娃臉的位置
466 1 if (Map[pos+8]!=1) //判斷移動(dòng)方向前面是否是墻
467 1 {
468 2 switch (Map[pos+8]) //得到娃娃臉前面的圖形
469 2 {
470 3 case 0: //移動(dòng)方向前面是空的執(zhí)行這里
471 3 Map[pos+8] = 4;//娃娃臉的新位置
472 3 Map[pos] = 0; //清空娃娃臉位置
473 3 break;
474 3 case 2: //是圓形執(zhí)行這里
475 3 Map[pos+8] = 4;//娃娃臉的新位置
476 3 Map[pos] = 0; //清空娃娃臉位置
477 3 break;
478 3 case 3: //移動(dòng)方向前面是箱子執(zhí)行這里
479 3 //箱子的前面不是墻或箱子或十字就可以移動(dòng)
480 3 if (Map[pos+16]==0)
481 3 {
482 4 Map[pos+16]= 3;//顯示箱子
483 4 Map[pos+8] = 4;//娃娃臉的新位置
484 4 Map[pos] = 0; //清空娃娃臉位置
485 4 }
486 3 else if(Map[pos+16]==2)
487 3 {
488 4 Map[pos+16]= 5;//顯示十字形
489 4 Map[pos+8] = 4;//娃娃臉的新位置
C51 COMPILER V8.08 MAIN 06/15/2007 17:28:51 PAGE 9
490 4 Map[pos] = 0; //清空娃娃臉位置
491 4 }
492 3 break;
493 3 case 5: //移動(dòng)方向前面是十字執(zhí)行這里
494 3 //十字的前面不是墻或箱子或十字就可以移動(dòng)
495 3 if (Map[pos+16]==0)
496 3 {
497 4 Map[pos+16]= 3;//顯示箱子
498 4 Map[pos+8] = 4;//娃娃臉的新位置
499 4 Map[pos] = 0; //清空娃娃臉位置
500 4 }
501 3 else if(Map[pos+16]==2)
502 3 {
503 4 Map[pos+16]= 5;//顯示十字形
504 4 Map[pos+8] = 4;//娃娃臉的新位置
505 4 Map[pos] = 0; //清空娃娃臉位置
506 4 }
507 3 break;
508 3 }
509 2 Refyuan(); //刷新圓形
510 2 MapCreate(); //刷新地圖
511 2 GameDisplay(GamePic);//顯示游戲界面
512 2 Next(); //判斷是否滿足進(jìn)入下一關(guān)
513 2 }
514 1 }
515 /**********************************************************
516 *函數(shù)名:LeftMove()
517 *功 能:娃娃臉向左移動(dòng) -1
518 **********************************************************/
519 void LeftMove()
520 {
521 1 uchar pos;
522 1 pos = ReadPosition(); //獲得娃娃臉的位置
523 1 if (Map[pos-1]!=1) //判斷移動(dòng)方向前面是否是墻
524 1 {
525 2 switch (Map[pos-1])
526 2 {
527 3 case 0: //移動(dòng)方向前面是空的執(zhí)行這里
528 3 Map[pos-1] = 4;//娃娃臉的新位置
529 3 Map[pos] =0; //清空娃娃臉位置
530 3 break;
531 3 case 2: //是圓形執(zhí)行這里
532 3 Map[pos-1] = 4;//娃娃臉的新位置
533 3 Map[pos] =0; //清空娃娃臉位置
534 3 break;
535 3 case 3: //移動(dòng)方向前面是箱子執(zhí)行這里
536 3 //箱子的前面不是墻或箱子或十字就可以移動(dòng)
537 3 if (Map[pos-2]==0)
538 3 {
539 4 Map[pos-2]= 3;//顯示箱子
540 4 Map[pos-1]= 4;//娃娃臉的新位置
541 4 Map[pos] = 0; //清空娃娃臉位置
542 4 }
543 3 else if (Map[pos-2]==2)
544 3 {
545 4 Map[pos-2]= 5; //顯示十字形
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -