📄 16x16飞机射击游戏.lst
字号:
328 5 }
329 4
330 4 }
331 3 if(GoOrStay==-1)//如果未开始则为上下选择功能
332 3 {
333 4 if(xuanze==0)
334 4 xuanze=1;
335 4 else
336 4 xuanze=0;
337 4 }
338 3 if(GoOrStay==2)//如果为设置则选择关数
339 3 {
340 4 if(Guan==9)
341 4 Guan=0;
342 4 else
343 4 Guan++;
344 4 }
345 3 //等手放开
346 3 n=DENGFANKAISHIJIAN;
347 3 while(A_L==0)
348 3 {
349 4 A_L=1;
350 4 dian1616(TU); //显示
351 4 n--;
352 4 if(n==0)
353 4 break;//按钮超时退出
354 4 }
355 3 }//
356 2 }
357 1 }
358 ///
359 ////
360 void AnNiu_R(void)//右按钮
361 {
362 1 unsigned int n;//超时变量
363 1 A_R=1;
364 1 if(A_R==0)
365 1 {
C51 COMPILER V8.02 16X16飞籣射籣游戏 11/21/2008 23:01:10 PAGE 7
366 2 A_R=1;
367 2 QuDouDong(QUDOUDONGSHIJIAN); //去抖动
368 2 if(A_R==0) //确认进入
369 2 {
370 3 if(GoOrStay==0)//如果正在游戏则用左右功能
371 3 {
372 4 if(feiji.x==9)//如果是最右则去最左
373 4 {
374 5 feiji.x=0;
375 5 }
376 4 else
377 4 {
378 5 feiji.x++;//沿x轴右移
379 5 }
380 4
381 4 }
382 3 if(GoOrStay==-1)//如果未开始则为上下选择功能
383 3 {
384 4 if(xuanze==0)
385 4 xuanze=1;
386 4 else
387 4 xuanze=0;
388 4 }
389 3 if(GoOrStay==2)//如果为设置则选择关数
390 3 {
391 4 if(Guan==0)
392 4 Guan=9;
393 4 else
394 4 Guan--;
395 4 }
396 3 //等手放开
397 3 n=DENGFANKAISHIJIAN;
398 3 while(A_R==0)
399 3 {
400 4 A_R=1;
401 4 dian1616(TU); //显示
402 4 n--;
403 4 if(n==0)
404 4 break;//按钮超时退出
405 4 }
406 3 }//
407 2 }
408 1 }
409 ///
410 //////
411 void AnNiu_T(void)//退出
412 {
413 1 unsigned int n;
414 1 A_T=1;
415 1 if(A_T==0)
416 1 {
417 2 A_T=1;
418 2 if(A_T==0)
419 2 {
420 3 A_T=1;
421 3 QuDouDong(QUDOUDONGSHIJIAN);//去抖动
422 3 if(A_T==0)
423 3 {
424 4 chuqihua(); //初始化
425 4
426 4
427 4 //等手放开
C51 COMPILER V8.02 16X16飞籣射籣游戏 11/21/2008 23:01:10 PAGE 8
428 4 n=DENGFANKAISHIJIAN;
429 4 while(A_T==0)
430 4 {
431 5 A_T=1;
432 5 dian1616(TU); //显示
433 5 n--;
434 5 if(n==0)
435 5 break;//按钮超时退出
436 5 }
437 4 }
438 3 }
439 2 }
440 1 }
441 ///
442 ///
443 void SheJi(void) //射击调整函数
444 { idata char y;
445 1
446 1 y=TU_Y;
447 1
448 1 if(y!=0)
449 1 {
450 2
451 2 if(feiji.x<8)//找出最凹的y坐标
452 2 { //在左半面找
453 3 for(;((~TU[2*(y-1)])&(0X80>>feiji.x))==((unsigned char)(feiji.t>>8));y--)
454 3 ;
455 3 }
456 2 else
457 2 { //在右半面找
458 3 for(;((~TU[2*(y-1)+1])&(0X80>>(feiji.x-8)))==((unsigned char)(feiji.t&0xc0));y--)
459 3 ;
460 3
461 3 }
462 2 TU[2*(y-1)]=(unsigned char)((~(feiji.t>>8))&TU[2*(y-1)]);
463 2 TU[2*(y-1)+1]=(unsigned char)(~((feiji.t)&0x00c0)&TU[2*(y-1)+1]);
464 2
465 2 if((TU[2*(TU_Y-1)]==0)&&((TU[2*(TU_Y-1)+1]&0xc0)==0))
466 2 {TU_Y--;
467 3
468 3 }
469 2 }
470 1 dian1616(TU); //显示
471 1 }
472 void AnNiu_F(void)//判射击按钮
473 { unsigned int n;
474 1 A_F=1;
475 1 if(A_F==0)
476 1 {
477 2 A_F=1;
478 2 QuDouDong(QUDOUDONGSHIJIAN);//去抖动
479 2 if(A_F==0)
480 2 {
481 3 if(GoOrStay==0)
482 3 SheJi();//射击调整函数
483 3
484 3 //等手放开
485 3 n=2; //射击键超时少一点
486 3 while(A_F==0)
487 3 {
488 4 A_F=1;
489 4 dian1616(TU); //显示
C51 COMPILER V8.02 16X16飞籣射籣游戏 11/21/2008 23:01:10 PAGE 9
490 4 n--;
491 4 if(n==0)
492 4 break;//按钮超时退出
493 4 }
494 3 }
495 2 }
496 1 }
497 void AnNiu(void) //按钮实现
498 {
499 1 AnNiu_S() ;//判开始暂停
500 1 AnNiu_L() ;//判断左按钮
501 1 AnNiu_R() ; //判断右按钮
502 1 AnNiu_F() ; //判断射击
503 1 AnNiu_T() ;//判断退出
504 1
505 1 }
506 ////
507 void FAIL(void) //失败画面
508 {
509 1 idata unsigned int n;
510 1 n=300;
511 1 while(n--)
512 1 dian1616(over);
513 1 chuqihua();//初始化
514 1 }
515 void WINN(void)//胜利
516 {
517 1
518 1 idata unsigned int n;
519 1 n=300;
520 1 while(n--)
521 1 dian1616(win);
522 1 chuqihua(); //初始化
523 1 }
524
525 void winORfail(void)//判断胜利还是失败
526 {
527 1 if(Guan>9)//10关全过胜利
528 1 WINN();//胜利画面
529 1 else
530 1 if(TU_Y>14)
531 1 FAIL();
532 1
533 1 }
534 ////
535 void SheZhi(void)//设置画面
536 {
537 1 TU[30]=TU[28]=0xff;//去掉飞机图形
538 1 TU[29]|=0XC0;
539 1 TU[31]|=0XC0;
540 1
541 1 guanshu(Guan);
542 1 while(GoOrStay==2)
543 1 {
544 2 dian1616(TU); //显示
545 2 AnNiu();
546 2 }
547 1 }
548 //////菜单////
549 void caidan(void)
550 {
551 1 while(GoOrStay==-1|GoOrStay==2)//如果还没开始
C51 COMPILER V8.02 16X16飞籣射籣游戏 11/21/2008 23:01:10 PAGE 10
552 1 {
553 2 if(GoOrStay==-1)
554 2 SHAN(xuanze);//选择画面
555 2 if(GoOrStay==2)
556 2 SheZhi();//设置画面
557 2 }
558 1 }
559 ///////////////////////////////////////////
560 void TIME1(void) interrupt 3 //定时器1
561 { TH1=0X3C;
562 1 TL1=0XB0;//定时器初值
563 1 EA=0;
564 1 P3=0XF0;
565 1
566 1 //定时器处理
567 1 time_a++;
568 1 if(time_a==(40-Guan*2))
569 1 {
570 2 ZHENGJIAYIXING();
571 2 time_a=0;}
572 1
573 1 time_b++;
574 1 if(time_b==1200)
575 1 {Guan++;
576 2 time_b=0;
577 2 }
578 1 EA=1;
579 1 TR1=1;
580 1 TF1=0;
581 1 }
582 //定时器初始化
583 void dishiqi(void)
584 {
585 1 TMOD=0X10;//定时器工作方式1
586 1 TH1=0X3C;
587 1 TL1=0XB0;//定时器初值
588 1 ET1=1;
589 1 EA=1;
590 1 TF1=0;
591 1 TR1=0;//关定时器
592 1 }
593 ////////////////////初始化//////////////////
594 void chuqihua(void)//初始显示内容为0
595 {
596 1 idata char a;
597 1 dishiqi() ;//定时器初始化
598 1 for(a=0;a<32;a++)
599 1 TU[a]=0x0;
600 1 TU_Y=0;
601 1 A_L =1 ; //左移动
602 1 A_R =1 ; //右移动
603 1 A_F =1 ; //射击
604 1 A_S =1 ; //开始/暂停
605 1 A_T =1 ; //退出
606 1 P21=1;P22=1;P23=1;P24=1;
607 1
608 1
609 1 for(a=0;a<16;a++)//画上边
610 1 {
611 2 TU[2*a+1]|=0x20;
612 2 }
613 1 ZHENGJIAYIXING(); //加一层
C51 COMPILER V8.02 16X16飞籣射籣游戏 11/21/2008 23:01:10 PAGE 11
614 1
615 1 feiji.x=5; //初始飞机位置
616 1 GoOrStay=-1; //置状态标记为未开始
617 1 Guan=0;//初始关卡为0
618 1
619 1 xuanze=0;
620 1
621 1 }
622 /////////////////////////////////
623
624
625
626 void main() //程序主函数
627 {
628 1 chuqihua();//初始化
629 1 while(1)
630 1 {
631 2 if(GoOrStay==-1)
632 2 caidan();
633 2 AnNiu(); //按钮
634 2 if(GoOrStay==0)
635 2 {dian1616(TU); //显示
636 3 TR1=1;//游戏时开定时器
637 3 }
638 2 winORfail();//判断是否胜利
639 2 if(GoOrStay==1) //暂停
640 2 {dian1616(stay);
641 3 TR1=0;//关定时器
642 3 }
643 2 }
644 1 }
645
646
647
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1639 ----
CONSTANT SIZE = 242 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 37 18
IDATA SIZE = 7 6
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 + -