📄 game.lst
字号:
552 0,1,2,0,3,2,1,0,
553 1,1,1,0,0,3,1,1,
554 1,0,3,0,0,3,0,1,
555 1,0,1,3,1,1,0,1,
556 1,0,0,0,4,0,0,1,
557 1,1,1,1,1,1,1,1
558 }
559 ,
560 //第10关
561 {
562 1,1,1,1,1,1,0,0,
563 1,0,0,0,0,1,0,0,
564 1,0,3,3,3,1,1,1,
565 1,0,0,1,2,2,0,1,
566 1,1,0,0,2,2,3,1,
567 0,1,0,4,0,0,0,1,
568 0,1,0,0,0,0,0,1,
569 0,1,1,1,1,1,1,1
570 }
571 ,
572 {
573 1,1,1,1,1,1,1,0,
574 1,2,0,2,0,2,1,0,
575 1,0,3,3,3,0,1,0,
576 1,2,3,4,3,2,1,0,
577 1,0,3,3,3,0,1,0,
578 1,2,0,2,0,2,1,0,
579 1,1,1,1,1,1,1,0,
580 0,0,0,0,0,0,0,0
581 }
582
583
584 //*/
585 }
586 ;
587 /*程序存储器中的数据是只读的!根据这个地图刷新显示.
588 用于复制程序存储器中的当前地图数据*/
589 uchar idata Map[64];
590 /*用于存放圆形的坐标,最多5个圆.RoundPos[6]存放本关有几个圆*/
591 uchar RoundPos[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
592
593 /**********************************************************
594 *函数名:CopyMap()
595 *功 能:用于复制程序存储器中的当前地图数据
596 *输 入:入口参数为当前地图编号
597 **********************************************************/
598 void CopyMap(uchar num)
599 {
600 1 uchar i;
601 1 for (i=0;i<64;i++) Map[i] = GameMap[num][i];
602 1 }
603
604 /**********************************************************
605 *函数名:GameDisplay()
606 *功 能:游戏图形显示程序(从左到右,从上到下)
607 * *point指向外部RAM存储的128X64的图片数据
608 **********************************************************/
609 void GameDisplay()
610 {
611 1 unsigned char i;
612 1 unsigned char x=0,y=0;
613 1 Mcs=0;
C51 COMPILER V8.02 GAME 11/01/2008 07:36:26 PAGE 11
614 1 Scs=1;
615 1 for (i=0;i<64;i++) //生成8X8的地图
616 1 {
617 2 if(y>=64)
618 2 {
619 3 x++;
620 3 y=0;
621 3 }
622 2 switch (Map[i])//获得地图上的图形数据
623 2 {
624 3 case 0:
625 3
626 3 Disp8X8(x,y,Empty);
627 3 y+=8;
628 3 break;
629 3 case 1:
630 3
631 3 Disp8X8(x,y,Wall); //Wall
632 3 y+=8;
633 3 break;
634 3 case 2:
635 3
636 3 Disp8X8(x,y,Round);//Round
637 3 y+=8;
638 3 break;
639 3 case 3:
640 3
641 3 Disp8X8(x,y,Box); //Box
642 3 y+=8;
643 3 break;
644 3 case 4:
645 3
646 3 Disp8X8(x,y,Men);//Men
647 3 y+=8;
648 3 break;
649 3 case 5:
650 3
651 3 Disp8X8(x,y,BoxRound); //BoxRound
652 3 y+=8;
653 3 break;
654 3
655 3
656 3 default:break;
657 3 }
658 2 }
659 1 }
660 /**********************************************************
661 *函数名:ReadMenPos()
662 *功 能:读得娃娃脸的当前坐标位置
663 *返 回:ReadPos
664 **********************************************************/
665 uchar ReadMenPos()
666 {
667 1 uchar i;
668 1 uchar ReadPos; //定义变量存放娃娃脸的位置.
669 1 for (i=0;i<64;i++)//地图数据是64个字节
670 1 {
671 2 //逐个比较找出娃娃脸
672 2 if(Map[i]==4) //娃娃脸的编号是4
673 2 {
674 3 ReadPos = i;//记录娃娃脸的坐标
675 3 break; //找到娃娃脸就跳出循环
C51 COMPILER V8.02 GAME 11/01/2008 07:36:26 PAGE 12
676 3 }
677 2 }
678 1 return (ReadPos); //返回娃娃脸当前位置
679 1 }
680 /**********************************************************
681 *函数名:ReadRoundPos()
682 *功 能:读得圆形的坐标位置(箱子移动目的地)
683 *在初次读入当前地图数据是,5(十字)也认为是圆,不然就出错,
684 *推动十字形后就少一个圆了.
685 **********************************************************/
686 void ReadRoundPos()
687 {
688 1 uchar i,j=0;
689 1 RoundPos[15] = 0;
690 1 for (i=0;i<64;i++)//地图数据是64个字节
691 1 {
692 2 //圆形的编号是2
693 2 //if (Map[i]==2||Map[i]==5)
694 2 if (GameMap[Pass][i]==2||GameMap[Pass][i]==5) //找出圆形的位置
695 2 //if (GameMap[Pass][i]==4||GameMap[Pass][i]==5) //找出圆形的位置
696 2 {
697 3 //在编地图的时候也用十字形.
698 3 RoundPos[j] = i;//存放圆形的位置
699 3 j++; //计数圆形的个数
700 3 RoundPos[15] = j;//存放圆形的个数
701 3 }
702 2 }
703 1 }
704 /**********************************************************
705 *函数名:RefRound()
706 *功 能:刷新显示圆形(箱子移动目的地)
707 **********************************************************/
708 void RefRound()
709 {
710 1 uchar i; //RoundPos[6] 存放着圆形的个数(3--5个)
711 1 for (i=0;i<RoundPos[15];i++)//根据圆的个数来判断
712 1 {
713 2 //判断圆形的坐标位置是否为0(空),是就显示圆形
714 2 if(Map[RoundPos[i]]==0) Map[RoundPos[i]]=2;
715 2 }
716 1 }
717 /**********************************************************
718 *函数名:Passed()
719 *功 能:进入下一关
720 **********************************************************/
721 void Passed()
722 {
723 1 //圆形位置全变为十字形(5),说明推完了,过关
724 1 if(RoundPos[15]==1)
725 1 {
726 2 if (Map[RoundPos[0]]==5)
727 2 {
728 3 Pass++; //进入下一关
729 3 if (Pass==20) Pass=0;//这里设置为20关
730 3 CopyMap(Pass);//复制地图数据
731 3 //MapCreate(); //地图生成程序
732 3 GameDisplay(); //游戏界面显示程序
733 3 ReadRoundPos(); //复制当前关卡圆形坐标和个数
734 3 DispPass();
735 3 }
736 2 }
737 1 else if(RoundPos[15]==2)
C51 COMPILER V8.02 GAME 11/01/2008 07:36:26 PAGE 13
738 1 {
739 2 if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5)
740 2 {
741 3 Pass++; //进入下一关
742 3 if (Pass==20) Pass=0;//这里设置为20关
743 3 CopyMap(Pass);//复制地图数据
744 3 //MapCreate(); //地图生成程序
745 3 GameDisplay(); //游戏界面显示程序
746 3 ReadRoundPos(); //复制当前关卡圆形坐标和个数
747 3 DispPass();
748 3 }
749 2 }
750 1 else if(RoundPos[15]==3)
751 1 {
752 2 if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5)
753 2 {
754 3 //过关
755 3 Pass++; //进入下一关
756 3 if (Pass==20) Pass=0;//这里设置为20关
757 3 CopyMap(Pass);//复制地图数据
758 3 //MapCreate(); //地图生成程序
759 3 GameDisplay(); //游戏界面显示程序
760 3 ReadRoundPos(); //复制当前关卡圆形坐标和个数
761 3 DispPass();
762 3 }
763 2 }
764 1 else if(RoundPos[15]==4)
765 1 {
766 2 if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5&&Map[RoundPos[3]]==5)
767 2 {
768 3 //过关
769 3 Pass++; //进入下一关
770 3 if (Pass==20) Pass=0;//这里设置为20关
771 3 CopyMap(Pass);//复制地图数据
772 3 //MapCreate(); //地图生成程序
773 3 GameDisplay(); //游戏界面显示程序
774 3 ReadRoundPos(); //复制当前关卡圆形坐标和个数
775 3 DispPass();
776 3 }
777 2 }
778 1 else if(RoundPos[15]==5)
779 1 {
780 2 if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5&&Map[RoundPos[3]]==5
781 2 &&Map[RoundPos[4]]==5)
782 2 {
783 3 //过关
784 3 Pass++; //进入下一关
785 3 if (Pass==20) Pass=0;//这里设置为20关
786 3 CopyMap(Pass);//复制地图数据
787 3 //MapCreate(); //地图生成程序
788 3 GameDisplay(); //游戏界面显示程序
789 3 ReadRoundPos(); //复制当前关卡圆形坐标和个数
790 3 DispPass();
791 3 }
792 2 }
793 1 else if(RoundPos[15]==6)
794 1 {
795 2 if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5&&Map[RoundPos[3]]==5
796 2 &&Map[RoundPos[4]]==5&&Map[RoundPos[5]]==5)
797 2 {
798 3 //过关
799 3 Pass++; //进入下一关
C51 COMPILER V8.02 GAME 11/01/2008 07:36:26 PAGE 14
800 3 if (Pass==20) Pass=0;//这里设置为20关
801 3 CopyMap(Pass);//复制地图数据
802 3 //MapCreate(); //地图生成程序
803 3 GameDisplay(); //游戏界面显示程序
804 3 ReadRoundPos(); //复制当前关卡圆形坐标和个数
805 3 DispPass();
806 3 }
807 2 }
808 1 else if(RoundPos[15]==7)
809 1 {
810 2 if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5&&Map[RoundPos[3]]==5
811 2 &&Map[RoundPos[4]]==5&&Map[RoundPos[5]]==5&&Map[RoundPos[6]]==5)
812 2 {
813 3 //过关
814 3 Pass++; //进入下一关
815 3 if (Pass==20) Pass=0;//这里设置为20关
816 3 CopyMap(Pass);//复制地图数据
817 3 //MapCreate(); //地图生成程序
818 3 GameDisplay(); //游戏界面显示程序
819 3 ReadRoundPos(); //复制当前关卡圆形坐标和个数
820 3 DispPass();
821 3 }
822 2 }
823 1 else if(RoundPos[15]==8)
824 1 {
825 2 if (Map[RoundPos[0]]==5&&Map[RoundPos[1]]==5&&Map[RoundPos[2]]==5&&Map[RoundPos[3]]==5
826 2 &&Map[RoundPos[4]]==5&&Map[RoundPos[5]]==5&&Map[RoundPos[6]]==5&&Map[RoundPos[7]]==5)
827 2 {
828 3 //过关
829 3 Pass++; //进入下一关
830 3 if (Pass==20) Pass=0;//这里设置为20关
831 3 CopyMap(Pass);//复制地图数据
832 3 //MapCreate(); //地图生成程序
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -