鱼C论坛

 找回密码
 立即注册
查看: 1244|回复: 1

[技术交流] C语言坦克大战

[复制链接]
发表于 2021-11-5 10:56:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
啥也不说了直接上源码

  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <time.h>
  4.                            //里规格:长39*2=78 (真坐标)(假坐标宽为39)  高39
  5.                            //外规格:长41*2=82 (真坐标)(假坐标宽为41)  高41
  6. #define UP    1
  7. #define DOWN  2
  8. #define LEFT  3
  9. #define RIGHT 4
  10. #define MAX_LEVEL 8
  11. #define BULLET_NUM 20
  12. #define MAX_LIFE 4

  13. //程序中未写入函数参数表中且未说明的变量只有map二维数组,level_info数组和level   

  14. /*
  15.       此程序中涉及的x,y类的坐标值,分为以下两种:                                 
  16.                                                                                                   
  17. 假坐标:这里的坐标指的是以一个■长度为单位的坐标,而不是真正的coord坐标 (用于map数组的坐标)                             
  18.                                                                                                   
  19. 真坐标:头文件自带的坐标结构coord中的坐标(也可以说是控制台里的真正坐标值)                                 
  20.                                                                                                   
  21.   区别:纵坐标y两值一致,假横坐标x值与真正coord横坐标(真坐标)关系是 x * 2 = coord 横坐标   
  22.                                                                                                             
  23.                   coord横坐标既指GoTo函数中的x参数,因为本程序游戏界面以一个■长度为基本单位,                    
  24.                                                                                                   
  25.                   可以说涉及的coord横坐标全是偶数。既假坐标要变真坐标(变真坐标才能发挥真正作用),横坐标须乘以2                                    
  26.                                                            
  27. */
  28. typedef struct             //这里的出现次序指的是一个AI_tank变量中的次序,游戏共有四个AI_tank变量
  29. {                          //∵设定每个AI_tank每种特殊坦克只出现一次 ∴fast_tank & firm_tank 最多出现次数不超过1
  30.         int fast_tank_order;   //fast_tank出现的次序(在第fast_tank_order次复活出现,从第0次开始),且每个AI_tank只出现一次
  31.         int firm_tank_order;   //firm_tank出现的次序,同上
  32. } LevInfo;                 //关卡信息(准确说是该关出现的坦克信息)
  33. LevInfo level_info [MAX_LEVEL] = {{-1,-1},{3,-1},{-1,3},{2,3},{2,3},{2,3},{2,3},{2,3}};   //初始化,-1代表没有该类型坦克


  34. typedef struct      //子弹结构体
  35. {
  36.         int x,y;        //子弹坐标,假坐标
  37.         int direction;  //子弹方向变量
  38.         bool exist;     //子弹存在与否的变量,1为存在,0不存在
  39.         bool initial;   //子弹是否处于建立初状态的值,1为处于建立初状态,0为处于非建立初状态
  40.         bool my;        //区分AI子弹与玩家子弹的标记,0为AI子弹,1为玩家(我的)子弹
  41. } Bullet;
  42. Bullet bullet [BULLET_NUM];  //考虑到地图上不太可能同时存在20颗子弹,所以数组元素设置20个


  43. typedef struct      //坦克结构体
  44. {
  45.         int x,y;        //坦克中心坐标
  46.         int direction;  //坦克方向
  47.         int color;      //颜色参方向数,1到6分别代表不同颜色,具体在PrintTank函数定义有说明
  48.         int model;      //坦克图案模型,值为1,2,3,分别代表不同的坦克图案,0为我的坦克图案,AI不能使用
  49.         int stop;       //只能是AI坦克使用的参数,非0代表坦克停止走动,0为可以走动
  50.         int revive;     //坦克复活次数
  51.         int num;        //AI坦克编号(固定值,为常量,初始化函数中定下)0~3
  52.         int CD;         //发射子弹冷却计时
  53.         bool my;        //是否敌方坦克参数,我的坦克此参数为1,为常量
  54.         bool alive;     //存活为1,不存活为0
  55. }  Tank;
  56. Tank AI_tank[4] , my_tank;  //my_tank为我的坦克,Ai_tank 代表AI坦克

  57. //∵所有的函数都有可能对全局变量map进行读写(改变),
  58. //∴函数中不另说明是否会对全局变量map读写
  59. //基本操作与游戏辅助函数
  60. void GoToxy(int x,int y);    //光标移动
  61. void HideCursor();           //隐藏光标
  62. void keyboard ();            //接受键盘输入
  63. void Initialize();           //初始化(含有对多个数据的读写)
  64. void Stop();                 //暂停
  65. void Getmap();               //地图数据存放与获取
  66. void Frame ();               //打印游戏主体框架
  67. void PrintMap();             //打印地图(地图既地图障碍物)(含对level的读取)
  68. void SideScreen ();          //副屏幕打印
  69. void GameCheak();            //检测游戏输赢
  70. void GameOver( bool home );  //游戏结束
  71. void ClearMainScreen();      //主屏幕清屏函数∵system("cls")后打印框架有一定几率造成框架上移一行的错误∴单独编写清屏函数
  72. void ColorChoose(int color); //颜色选择函数
  73. void NextLevel();            //下一关(含有对level全局变量的读写)

  74. //子弹部分
  75. void BuildAIBullet(Tank *tank);                //AI坦克发射子弹(含有对my_tank的读取,只读取了my_tank坐标)
  76. void BuildBullet  (Tank tank);                 //子弹发射(建立)(人机共用)(含全局变量bullet的修改)我的坦克发射子弹直接调用该函数,AI通过AIshoot间接调用
  77. void BulletFly    (Bullet bullet[BULLET_NUM]); //子弹移动和打击(人机共用),
  78. void BulletHit    (Bullet* bullet);            //子弹碰撞(人机共用)(含Tank全局变量的修改),只通过BulletFly调用,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理
  79. void PrintBullet  (int x,int y,int T);         //打印子弹(人机共用)
  80. void ClearBullet  (int x,int y,int T);         //清除子弹(人机共用)
  81. int  BulletCheak  (int x,int y);               //判断子弹前方情况(人机共用)

  82. //坦克部分
  83. void BuildAITank (int* position, Tank* AI_tank); //建立AI坦克
  84. void BuildMyTank (Tank* my_tank);                //建立我的坦克
  85. void MoveAITank  (Tank* AI_tank);                //AI坦克移动
  86. void MoveMyTank  (int turn);                     //我的坦克移动,只通过keyboard函数调用,既键盘控制
  87. void ClearTank   (int x,int y);                  //清除坦克(人机共用)
  88. void PrintTank   (Tank tank);                    //打印坦克(人机共用)
  89. bool TankCheak   (Tank tank,int direction);      //检测坦克dirtection方向的障碍物,返值1阻碍,0 畅通
  90. int  AIPositionCheak (int position);           //检测AI坦克建立位置是否有障碍物AIPositionCheak

  91. //DWORD WINAPI InputX(LPVOID lpParameter); //声明线程函数,用于检查X键输入并设置X键的输入冷却时间


  92. //注意map数组应是纵坐标在前,横坐标在后,既map[y][x],(∵数组行长度在前,列长度在后)
  93. //map里的值: 个位数的值为地图方块部分,百位数的值为坦克,子弹在map上没有值(子弹仅仅是一个假坐标)
  94. //map里的值: 0为可通过陆地,1为红砖,2黄砖,5为水,100~103为敌方坦克,200为我的坦克,

  95. //全局变量
  96. int map[41][41];  //地图二维数组
  97. int key_x;        // X键是否被“读入”的变量,也是子弹是否可以发射的变,
  98. int bul_num;      //子弹编号
  99. int position;     //位置计数,对应AI坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置
  100. int speed=7;      //游戏速度,调整用
  101. int level=1;      //游戏关卡数
  102. int score=0;      //游戏分数
  103. int remain_enemy; //剩余敌人(未出现的敌人)

  104. char* tank_figure[4][3][4]=
  105. {
  106.   {
  107.     {"◢┃◣", "◢━◣", "◢┳◣", "◢┳◣"},
  108.     {"┣●┫", "┣●┫", "━●┃", "┃●━"},
  109.     {"◥━◤", "◥┃◤", "◥┻◤", "◥┻◤"}
  110.   },
  111.   {
  112.     {"┏┃┓", "┏┳┓", "┏┳┓", "┏┳┓"},
  113.     {"┣●┫", "┣●┫", "━●┫", "┣●━"},
  114.     {"┗┻┛", "┗┃┛", "┗┻┛", "┗┻┛"}
  115.   },
  116.   {
  117.     {"┏┃┓", "◢━◣", "┏┳◣", "◢┳┓"},
  118.     {"┣●┫", "┣●┫", "━●┃", "┃●━"},
  119.     {"◥━◤", "┗┃┛", "┗┻◤", "◥┻┛"}
  120.   },
  121.   {
  122.     {"╔┃╗", "╔╦╗", "╔╦╗", "╔╦╗"},
  123.     {"╠█╣", "╠█╣", "━█╣", "╠█━"},
  124.     {"╚╩╝", "╚┃╝", "╚╩╝", "╚╩╝"}
  125.   }
  126. };



  127. int main ()                               //主函数
  128. {
  129.         int i;
  130.         unsigned int interval[12]={1,1,1,1,1,1,1,1,1,1,1,1} ;  //间隔计数器数组,用于控制速度
  131.         srand(time(NULL)); //设置随机数种子(若不设置种子而调用rand会使每次运行的随机数序列一致)随机数序列指:如首次调用rand得到1,第二次得2,第三次3,则此次随机数序列为1,2,3
  132.         HideCursor();                         //隐藏光标
  133.         system("mode con cols=112 lines=42"); //控制窗口大小
  134.         Frame ();                             //打印游戏主体框架
  135.         Initialize();                         //初始化,全局变量level初值便是1
  136. //        HANDLE h1 , h2 ;                      //定义句柄变量
  137.         for(;;)
  138.         {
  139.                 if(interval[0]++%speed==0)        //速度调整用,假设interval[0]为a, 语句意为 a % 2==0,a=a+1;
  140.                 {
  141.                         GameCheak();                  //游戏胜负检测
  142.                         BulletFly ( bullet );
  143.                         for(i=0 ; i<=3 ; i++)         //AI坦克移动循环
  144.                         {
  145.                                 if(AI_tank[i].model==2 && interval[i+1]++%2==0) //四个坦克中的快速坦克单独使用计数器1,2,3,4
  146.                                         MoveAITank( & AI_tank[i]);
  147.                                 if(AI_tank[i].model!=2 && interval[i+5]++%3==0) //四个坦克中的慢速坦克单独使用计数器5,6,7,8
  148.                                         MoveAITank( & AI_tank[i]);
  149.                         }
  150.                         for(i=0;i<=3;i++)                                   //建立AI坦克部分
  151.                                      if(AI_tank[i].alive==0 && AI_tank[i].revive<4 && interval[9]++%90==0)  //一个敌方坦克每局只有4条命
  152.                                 {                                               //如果坦克不存活。计时,每次建立有间隔  1750 ms
  153.                                BuildAITank( &position, & AI_tank[i] );     //建立AI坦克(复活)
  154.                                           break;                                      //每次循环只建立一个坦克
  155.                                   }
  156.                         for(i=0;i<=3;i++)
  157.                                 if(AI_tank[i].alive)
  158.                                         BuildAIBullet(&AI_tank[i]);                 //AIshoot自带int自增计数CD,不使用main中的CD interval
  159.                         if(my_tank.alive && interval[10]++%2==0 )
  160.                          keyboard ();
  161.                     if(my_tank.alive==0 && interval[11]++%30==0 && my_tank.revive < MAX_LIFE)
  162.                              BuildMyTank( &my_tank );
  163.                 }
  164.                 Sleep(5);
  165.         }
  166.         return 0;
  167. }


  168. /*//这里的多线程暂时不用                   //x键用于子弹发射,x键的冷却时间不能和上下左右一同设置,那样就太快了
  169. DWORD WINAPI InputX(LPVOID lpParameter)    //如果不用多线程运行,那么在x键冷却时间内程序会因Sleep将会挂起,暂停运行
  170. {                                          //因为只有一个变量改变,而且变量改变先后顺序是显而易见的,所以不必设置缓冲区
  171.         for(;;)                              
  172.         {                                    
  173.                 if(GetAsyncKeyState( 88 )& 0x8000) //88为x键键值,当摁下x并且x键处于可输入状态
  174.                 {
  175.                         key_x=1;                       // X键是否允许被“读入”的变量,也是子弹是否可以发射的变量
  176.                     Sleep(600);                    // 子线程Sleep中,x就不能被"读入",主线程每操作完一次子弹发射,key_x会归零
  177.                 }
  178.                 Sleep(10);
  179.         }
  180.         return 0;
  181. }*/


  182. void keyboard ()
  183. {               // kbhit()   getch()  用法可用但是不好用            
  184. /*
  185.    函数功能:该函数判断在此函数被调用时,某个键是处于UP状态还是处于DOWN状态,及前次调用GetAsyncKeyState函数后,
  186.    是否按过此键.如果返回值的最高位被置位,那么该键处于DOWN状态;如果最低位被置位,那么在前一次调用此函数后,此键被按过,
  187.    否则表示该键没被按过.
  188.    这里GetAsyncKeyState比 kbhit() + getch() 好用,操作更顺畅.   GetAsyncKeyState的返回值表示两个内容,
  189.    一个是最高位bit的值,代表这个键是否被按下。一个是最低位bit的值,代表上次调用GetAsyncKeyState后,这个键是否被按下。
  190.    &为与操作,&0x8000就是判断这个返回值的高位字节。如果high-order bit是1,则是按下状态,否则是弹起状态,为0
  191. */
  192.         int count=0;
  193.         if (GetAsyncKeyState(VK_UP)& 0x8000)  
  194.                 MoveMyTank( UP );
  195.         else if (GetAsyncKeyState(VK_DOWN)& 0x8000)  
  196.                 MoveMyTank( DOWN );
  197.         else if (GetAsyncKeyState(VK_LEFT)& 0x8000)
  198.         MoveMyTank( LEFT );
  199.         else if (GetAsyncKeyState(VK_RIGHT)& 0x8000)  
  200.                 MoveMyTank( RIGHT );
  201.         else if (GetAsyncKeyState( 0x1B )& 0x8000)  // Esc键
  202.                 exit(0);                                //退出程序函数
  203.         else if (GetAsyncKeyState( 0x20 )& 0x8000)  //空格
  204.                 Stop();
  205.         else if (count++%7==0)            //这里添加计数器是为了防止按键粘连不能达到微调效果
  206.         {
  207.                 if (speed>1 && GetAsyncKeyState( 0x6B )& 0x8000)   // +键
  208.                 {
  209.                         speed--;
  210.                         GoToxy(102,11);           //在副屏幕打印出当前速度
  211.                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED);
  212.                         printf("%d ",21-speed);   //副屏幕显示的速度为1~10
  213.                 }
  214.                 else if (speed<20 && GetAsyncKeyState( 0x6D )& 0x8000)  // - 键
  215.                 {
  216.                         speed++;
  217.                         GoToxy(102,11);           //在副屏幕打印出当前速度
  218.                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED);
  219.                         printf("%d ",21-speed);   //副屏幕显示的速度为1~10
  220.                 }
  221.         }
  222.         if(my_tank.CD==7)
  223.         {
  224.                 if(GetAsyncKeyState( 88 )& 0x8000)
  225.                 {
  226.                         BuildBullet(my_tank);
  227.                         my_tank.CD=0;
  228.                 }
  229.         }
  230.         else
  231.                 my_tank.CD++;
  232. }



  233. void BuildAIBullet(Tank *tank)   //AI子弹发射(建立)含有对my_tank的读取
  234. {
  235.         if(tank->CD==15)
  236.         {
  237.                 if(!(rand()%11))     //冷却结束后在随后的每个游戏周期中有10分之一的可能发射子弹
  238.                 {
  239.                         BuildBullet(*tank);
  240.                         tank->CD=0;
  241.                 }
  242.         }
  243.         else
  244.                 tank->CD++;
  245.         if(tank->CD >= 14)       //AI强化部分,在冷却到达一定范围即可使用
  246.         {
  247.                 if(tank->y==38 )     //如果坦克在底部(这个最优先)
  248.                 {
  249.                         if(tank->x < 20) //在老家左边
  250.                         {
  251.                                 if(tank->direction==RIGHT)  //坦克方向朝左
  252.                                 {
  253.                                         BuildBullet(*tank);     //发射子弹
  254.                                         tank->CD=0;
  255.                                 }
  256.                         }
  257.                         else             //在老家右边
  258.                                 if(tank->direction==LEFT)   //坦克方向朝右
  259.                                 {
  260.                                         BuildBullet(*tank);     //发射子弹
  261.                                         tank->CD=0;
  262.                                 }
  263.                 }
  264.                 else if(tank->x==my_tank.x+1 || tank->x==my_tank.x || tank->x==my_tank.x-1)  //AI坦克在纵向上"炮口"对准我的坦克
  265.                 {
  266.                         if(tank->direction==DOWN && my_tank.y > tank->y || tank->direction==UP && my_tank.y < tank->y)
  267.                         {                               //若是AI朝下并且我的坦克在AI坦克下方(数值大的在下面)或者AI朝上我的坦克在AI上方
  268.                                 int big=my_tank.y , smal=tank->y , i;
  269.                                 if(my_tank.y < tank->y)
  270.                                 {
  271.                                         big=tank->y;
  272.                                         smal=my_tank.y;
  273.                                 }
  274.                                 for(i=smal+2;i<=big-2;i++)  //判断AI炮口的直线上两坦克间有无障碍
  275.                                         if(map[i][tank->x]!=0 || map[i][tank->x]!=5)      //若有障碍
  276.                                                 break;
  277.                                 if(i==big-1)                //若i走到big-1说明无障碍
  278.                                 {
  279.                                         BuildBullet(*tank);     //则发射子弹
  280.                                         tank->CD=0;
  281.                                 }
  282.                         }
  283.                 }
  284.                 else if(tank->y==my_tank.y+1 || tank->y==my_tank.y || tank->y==my_tank.y-1) //AI坦克在横向上"炮口"对准我的坦克
  285.                 {
  286.                         if(tank->direction==RIGHT && my_tank.x > tank->x || tank->direction==LEFT && my_tank.x < tank->x)
  287.                         {                  //若是AI朝右并且我的坦克在AI坦克右方(数值大的在下面)或者AI朝左我的坦克在AI左方
  288.                                 int big=my_tank.y , smal=tank->y , i;
  289.                                 if(my_tank.x < tank->x)
  290.                                 {
  291.                                         big=tank->x;
  292.                                         smal=my_tank.x;
  293.                                 }
  294.                                 for(i=smal+2;i<=big-2;i++)  //判断AI炮口的直线上两坦克间有无障碍
  295.                                         if(map[tank->y][i]!=0 || map[tank->y][i]!=5)      //若有障碍
  296.                                                 break;
  297.                                 if(i==big-1)   //若i走到big-1说明无障碍
  298.                                 {
  299.                                         BuildBullet(*tank);     //则发射子弹
  300.                                         tank->CD=0;
  301.                                 }
  302.                         }
  303.                 }
  304.         }
  305. }



  306. void BuildBullet(Tank tank)  //子弹发射(建立),传入结构体Tank,这里包含改变了全局变量结构体bullet
  307. {                            //∵实现方式为顺序循环建立子弹,每次调用改变的bullet数组元素都不同
  308.         switch(tank.direction)   //∴为了方便,不将bullet放入参数,bullet作为全局变量使用
  309.         {
  310.             case UP    :
  311.                                 bullet [bul_num].x = tank.x;
  312.                                 bullet [bul_num].y = tank.y-2;
  313.                                 bullet [bul_num].direction=1;
  314.                                 break;
  315.                 case DOWN  :
  316.                                 bullet [bul_num].x = tank.x;
  317.                                 bullet [bul_num].y = tank.y+2;
  318.                                 bullet [bul_num].direction=2;
  319.                                 break;
  320.                 case LEFT  :
  321.                                 bullet [bul_num].x = tank.x-2;
  322.                                 bullet [bul_num].y = tank.y;
  323.                                 bullet [bul_num].direction=3;
  324.                             break;
  325.                 case RIGHT :
  326.                                 bullet [bul_num].x = tank.x+2;                                             
  327.                                 bullet [bul_num].y = tank.y;
  328.                                 bullet [bul_num].direction=4;
  329.                                 break;
  330.         }     
  331.         bullet [bul_num].exist = 1;    //子弹被建立,此值为1则此子弹存在
  332.         bullet [bul_num].initial = 1;  //子弹处于初建立状态
  333.         bullet [bul_num].my=tank.my;   //如果是我的坦克发射的子弹bullet.my=1,否则为0
  334.         bul_num++;
  335.         if(bul_num==BULLET_NUM)        //如果子弹编号增长到20号,那么重头开始编号
  336.                 bul_num=0;                 //考虑到地图上不可能同时存在20颗子弹,所以数组元素设置20个
  337. }


  338. void BulletFly(Bullet bullet[BULLET_NUM]) //子弹移动和打击
  339. {                                         //含有全局变量Bullet的改变
  340.         for(int i =0; i<BULLET_NUM;i++)
  341.         {
  342.                 if(bullet [i].exist)              //如果子弹存在
  343.                 {   
  344.                         if(bullet [i].initial==0)     //如果子弹不是初建立的
  345.                         {                           
  346.                                 if(map[bullet[i].y] [bullet[i].x]==0 || map[bullet[i].y] [bullet[i].x]==5)   //如果子弹坐标当前位置无障碍
  347.                                         ClearBullet( bullet[i].x , bullet[i].y , BulletCheak(bullet[i].x , bullet[i].y ));     //抹除子弹图形
  348.                             switch(bullet [i].direction)                                      //然后子弹坐标变化(子弹变到下一个坐标)
  349.                                 {
  350.                                 case UP    :(bullet [i].y)--;break;
  351.                                 case DOWN  :(bullet [i].y)++;break;
  352.                                 case LEFT  :(bullet [i].x)--;break;
  353.                                 case RIGHT :(bullet [i].x)++;break;
  354.                                 }
  355.                         }
  356.                         int collide = BulletCheak ( bullet [i].x , bullet [i].y );   //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。
  357.                         if( collide )                                                //如果检测到当前子弹坐标无障碍(无碰撞)(包括在地面上与在水面上)
  358.                                 PrintBullet( bullet[i].x , bullet[i].y , collide);       //则打印子弹,若有碰撞则不打印
  359.                         else
  360.                                 BulletHit( & bullet [i] );     //若有碰撞则执行子弹碰撞函数                  
  361.                         if(bullet [i].initial)             //若子弹初建立,则把初建立标记去除
  362.                                 bullet [i].initial = 0;
  363.                         for(int j=0; j< BULLET_NUM ; j++)  //子弹间的碰撞判断,若是我方子弹和敌方子弹碰撞则都删除,若为两敌方子弹则无视
  364.                                 if(bullet [j].exist && j!=i && (bullet[i].my || bullet[j].my) && bullet[i].x==bullet[j].x && bullet[i].y==bullet[j].y)
  365.                                 {                              //同样的两颗我方子弹不可能产生碰撞
  366.                                         bullet [j].exist=0;
  367.                                         bullet [i].exist=0;
  368.                                         ClearBullet( bullet[j].x , bullet[j].y , BulletCheak(bullet[j].x , bullet[j].y ));  //抹除j子弹图形,子弹i图形已被抹除
  369.                                         break;
  370.                                 }
  371.                 }
  372.         }
  373. }


  374. void BulletHit(Bullet* bullet)  //含有Tank全局变量的修改,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理
  375. {                               //∵每次打中的坦克都不一样,不可能把所有坦克放在参数表中
  376.         int x=bullet->x;            //∴这里的Tank使用全局变量
  377.         int y=bullet->y;            //这里传入的值是子弹坐标,这两个值不需要改变
  378.         int i;
  379.         if(map[y][x]==1 || map[y][x]==2)  //子弹碰到砖块
  380.         {
  381.                 if(bullet->direction==UP || bullet->direction==DOWN)   //如果子弹是纵向的
  382.                         for(i = -1 ; i<=1 ; i++)
  383.                     if(map[y][x+i]==1 || map[y][x+i]==2)  //如果子弹打中砖块两旁为砖块,则删除砖,若不是(一旁为坦克或其他地形)则忽略
  384.                                 {
  385.                                     map[y][x+i]=0;    //砖块碎
  386.                          GoToxy(2*x+2*i,y);
  387.                                     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色
  388.                          printf("  ");
  389.                                 }
  390.                 if(bullet->direction==LEFT || bullet->direction==RIGHT)     //若子弹是横向的  (与子弹纵向实现同理)
  391.                         for(i = -1 ; i<=1 ; i++)
  392.                                 if(map[y+i][x]==1 || map[y+i][x]==2)
  393.                                 {
  394.                                     map[y+i][x]=0;
  395.                          GoToxy(2*x,y+i);
  396.                                     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色
  397.                          printf("  ");
  398.                                 }
  399.                 bullet->exist=0;           //这颗子弹已经不存在了
  400.         }
  401.         else if(map[y][x]==4 || map[y][x]==6 )  //子弹碰到边框或者不可摧毁方块
  402.         bullet->exist=0;
  403.         else if(bullet->my && map[y][x]>=100 && map[y][x]<104 )  //若我的子弹碰到了敌方坦克
  404.         {
  405.                 int num = map[y][x]%100;   //map[y][x]%100 等同于 tank.num ,可通过map值读取该坦克信息
  406.                 if(AI_tank[num].model==3 && AI_tank[num].color==2)   //若为firm tank,且color==2。该坦克为绿色,表明没有受到伤害
  407.                                 AI_tank[num].color=3;                        //则变成黄色,color=3为黄色
  408.                 else if (AI_tank[num].model==3 && AI_tank[num].color==3)
  409.                                 AI_tank[num].color=4;                        //4为红色
  410.                 else                       //其他类型的坦克或者firm tank为红色的情况
  411.                 {
  412.                         AI_tank[num].alive=0;
  413.                         ClearTank(AI_tank[num].x , AI_tank[num].y);      //清除该坦克
  414.                 }
  415.                 bullet->exist=0;
  416.                 score+=100;
  417.                 GoToxy(102,5);             //在副屏幕上打印出分数
  418.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
  419.                 printf("%d ",score);
  420.         }
  421.         else if(map[y][x]==200 && bullet->my==0 )   //若敌方子弹击中我的坦克
  422.         {
  423.                 my_tank.alive=0;
  424.                 ClearTank(my_tank.x , my_tank.y);
  425.                 bullet->exist=0;
  426.                 my_tank.revive++;      //我的坦克复活次数+1(∵我的坦克复活次数与生命值有关∴放在这里自减)
  427.                 score-=100;            //分数减少
  428.                 GoToxy(102,5);         //在副屏幕上打印出分数
  429.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
  430.                 printf("%d   ",score);
  431.                 GoToxy(102,7);         //在副屏幕打印出我的剩余生命值
  432.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
  433.                 printf("%d   ", MAX_LIFE-my_tank.revive);
  434.         }
  435. //        else if(bullet->my==0 && map[y][x]>=100 && map[y][x]<104) //敌方子弹击中敌方坦克,可以设置两种子弹运行方式,这种暂时不用
  436. //                bullet->exist=0;
  437.         else if(map[y][x]==9)      //子弹碰到家(无论是谁的子弹)
  438.         {
  439.                 bullet->exist=0;
  440.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN);
  441.                 GoToxy(38,37);         printf("      ");
  442.                 GoToxy(38,38);         printf("◢◣  ");
  443.                 GoToxy(38,39);         printf("███");
  444.                 GameOver(1);           //游戏结束,传入1代表老家被毁
  445.         }
  446. }


  447. int BulletCheak (int x,int y)  //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。
  448. {                              //有障碍返回0,无障碍且子弹在地面返回1,子弹在水面上返回2
  449.         if(map[y][x]==0)
  450.                 return 1;
  451.         else if(map[y][x]==5)
  452.                 return 2;
  453.         else
  454.                 return 0;
  455. }


  456. void PrintBullet (int x,int y,int T)   //当前坐标BulletCheak 的值做参量 T
  457. {
  458.         if(T==1)          //  T==1 表示子弹当前坐标在陆地上
  459.             SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
  460.         else if(T==2)     //  T==2 表示子弹当前坐标在水面上
  461.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY|BACKGROUND_BLUE);
  462.     GoToxy(2*x,y);
  463.     printf("☉");
  464. }


  465. void ClearBullet(int x,int y,int T)   //当前坐标BulletCheak 的值做参量 T
  466. {
  467.         GoToxy(2*x,y);
  468.         if(T==2)        //  T==2 表示子弹当前坐标在水面上
  469.         {
  470.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|BACKGROUND_BLUE|FOREGROUND_BLUE|FOREGROUND_GREEN);
  471.                 printf("~");
  472.         }
  473.         else if(T==1)   //  T==1 表示子弹当前坐标在陆地上
  474.         {
  475.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);
  476.                 printf("  ");
  477.         }
  478. }


  479. //position为坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置
  480. void BuildAITank(int* position, Tank* AI_tank)   //执行一次该函数只建立一个坦克
  481. {                                         //rand函数公式:0<=rand()%(a+1)<=a  0+m<=rand()%(n-m+1)+m<=n  
  482.                                           //rand函数实现1到n:1<=rand()%(n)+1<=n
  483.            if(AIPositionCheak(*position))        //若此位置无障碍,可生成。position参数详见AIPositionCheak函数定义
  484.         {
  485.                 AI_tank->x= 20 + 18*(*position);  //20 + 18 * position 对应三个生成位置的x假坐标
  486.                 AI_tank->y=2;
  487.                 if(AI_tank->revive==level_info[level-1].firm_tank_order)  //坦克出现(复活)次序==关卡信息(level_info)中firm tank的出现次序
  488.                 {
  489.                         AI_tank->model = 3;           //3为firm tank的模型(外观)
  490.                         AI_tank->color = 2;           //颜色参数2为绿色,具体详见函数ColorChoose
  491.                 }
  492.                 else if(AI_tank->revive==level_info[level-1].fast_tank_order)  //同上if,这里是fast_tank的
  493.                 {
  494.                         AI_tank->model = 2;
  495.                         AI_tank->color = rand()%6+1;  //若不是firm tank则随机颜色,颜色参数为1~6,分别代表不同颜色,详见函数ColorChoose
  496.                 }
  497.                 else      //普通坦克
  498.                 {
  499.                         AI_tank->model = 1;
  500.                            AI_tank->color = rand()%6+1;  //若不是firm tank则随机颜色
  501.                 }
  502.                 AI_tank->alive = 1;       //坦克变为存在
  503.                 AI_tank->direction = 2 ;  //方向朝下
  504.                 AI_tank->revive++;        //复活次数+1
  505.                 PrintTank(*AI_tank);
  506.                 (*position)++;
  507.                 remain_enemy--;
  508.                 GoToxy(102,9);            //在副屏幕上打印剩余坦克数
  509.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
  510.                 printf("%d ",remain_enemy);
  511.                 if(*position==2)          //position只能为0,1,-1,这里position循环重置
  512.                     *position = -1;
  513.                      return ;                  //若生成了一辆坦克,则结束该函数
  514.         }
  515. }


  516. int AIPositionCheak( int position )    //position为坦克生成位置2为我的坦克位置,其余为AI位,-1为左位,0为中间位置,1为右位
  517. {
  518.         int        x,y;
  519.         if(position==2)                    //2为我的坦克位置,现在暂时用不到
  520.                 x=15,y=38;
  521.         else
  522.             y=2 , x= 20 + 18 * position ;  //20 + 18 * position 对应三个生成位置的x假坐标
  523.         for(int i=0;i<3;i++)
  524.                 for(int j=0;j<3;j++)
  525.                         if( map[y+j-1][x+i-1]!=0)  //如果遍历的九宫格里有障碍物
  526.                                 return 0;              //则返回0,表示此生成位置有阻碍
  527.     return 1;                          //否则生成1,表示此生成位置无阻碍
  528. }


  529. void MoveAITank(Tank* AI_tank) //AI专用函数,该函数主要为AI加强
  530. {
  531.            if(AI_tank->alive)         //如果坦克活着
  532.         {
  533.                 if(AI_tank->stop!=0)   //坦克是否停止运动的判断,若stop参数不为0
  534.                 {
  535.                         AI_tank->stop--;   //则此坦克本回合停止运动
  536.                         return;
  537.                 }
  538.                 if( !(rand()%23) )     //22分之1的概率执行方向重置
  539.                 {
  540.                         AI_tank->direction = rand()%4+1;
  541.                         if( rand()%3 )     //在方向重置后有2分之1的概率停止走动3步的时间
  542.                         {
  543.                                 AI_tank->stop=2;
  544.                                 return;
  545.                         }
  546.                 }
  547.                 ClearTank (AI_tank->x , AI_tank->y);
  548.                 if(TankCheak ( *AI_tank , AI_tank->direction))   //如果前方无障碍
  549.                         switch ( AI_tank->direction )
  550.                         {
  551.                                case UP   : AI_tank->y--; break;  //上前进一格
  552.                         case DOWN : AI_tank->y++; break;  //下前进一格
  553.                          case LEFT : AI_tank->x--; break;  //左前进一格
  554.                         case RIGHT: AI_tank->x++; break;  //右前进一格
  555.                         }
  556.                 else                     //前方有障碍
  557.                 {
  558.                         if(!(rand()%4))      //3分之1的概率乱转
  559.                         {
  560.                                 AI_tank->direction=rand()%4+1;
  561.                                 AI_tank->stop=2; //乱转之后停止走动3步的时间
  562.                                 PrintTank(*AI_tank);
  563.                                 return;          //∵continue会跳过下面的打印函数,∴这里先打印
  564.                         }
  565.                         else                 //另外3分之2的几率选择正确的方向
  566.                         {
  567.                                 int j;
  568.                             for(j=1;j<=4;j++)
  569.                                 if(TankCheak ( *AI_tank , j ))  //循环判断坦克四周有无障碍,此函数返值1为可通过
  570.                                             break;
  571.                             if(j==5)         //j==5说明此坦克四周都有障碍物,无法通行
  572.                                 {
  573.                                         PrintTank(*AI_tank);
  574.                                     return;      //则跳过下面的while循环以防程序卡死
  575.                                 }
  576.                             while(TankCheak ( *AI_tank , AI_tank->direction) == 0)  //如果前方仍有障碍
  577.                                     AI_tank->direction=(rand()%4+1);                    //则换个随机方向检测
  578.                         }
  579.                 }
  580.                 PrintTank(*AI_tank);     //打印AI坦克
  581.         }
  582. }


  583. void BuildMyTank (Tank* my_tank) //建立我的坦克
  584. {
  585.         my_tank->x=15;
  586.            my_tank->y=38;
  587.            my_tank->stop=NULL;
  588.            my_tank->direction=1;
  589.     my_tank->model=0;
  590.     my_tank->color=1;
  591.     my_tank->alive=1;
  592.     my_tank->my=1;
  593.         my_tank->CD=7;
  594.     PrintTank (*my_tank) ;   //打印我的坦克
  595. }


  596. void MoveMyTank(int turn )   //玩家专用函数,turn为keyboard函数里因输入不同方向键而传入的不同的值
  597. {
  598.         ClearTank(my_tank.x , my_tank.y);        //map 数组中“我的坦克”参数清除工作已在此函数中完成
  599.         my_tank.direction=turn;                  //将键盘输入的方向值传入我的坦克方向值
  600.         if(TankCheak ( my_tank , my_tank.direction ))  //若此时我的坦克当前方向上无障碍
  601.                 switch (turn)
  602.                 {
  603.                         case UP   : my_tank.y--; break;  //上前进一格
  604.                         case DOWN : my_tank.y++; break;  //下前进一格
  605.                         case LEFT : my_tank.x--; break;  //左前进一格
  606.                         case RIGHT: my_tank.x++; break;  //右前进一格
  607.         }                                        //若坦克当前方向上有障碍则跳过坐标变化直接打印该转向的坦克
  608.         PrintTank (my_tank);
  609. }


  610. bool TankCheak(Tank tank,int direction)  //检测坦克前方障碍函数,参量为假坐标。返值1为可通过,返值0为阻挡(人机共用)
  611. {
  612.         switch(direction)                    //direction变量   1上,2下,3左,4右
  613.         {
  614.             case UP:
  615.                         if (map[tank.y-2][tank.x]==0 && map[tank.y-2][tank.x-1]==0 && map[tank.y-2][tank.x+1]==0)
  616.                                 return 1;
  617.                         else
  618.                                 return 0;
  619.         case DOWN:
  620.                         if (map[tank.y+2][tank.x]==0 && map[tank.y+2][tank.x-1]==0 && map[tank.y+2][tank.x+1]==0)
  621.                                 return 1;
  622.                         else
  623.                                 return 0;
  624.                 case LEFT:
  625.                         if (map[tank.y][tank.x-2]==0 && map[tank.y-1][tank.x-2]==0 && map[tank.y+1][tank.x-2]==0)
  626.                                 return 1;
  627.                         else
  628.                                 return 0;
  629.                 case RIGHT:
  630.                         if (map[tank.y][tank.x+2]==0 && map[tank.y-1][tank.x+2]==0 && map[tank.y+1][tank.x+2]==0)
  631.                                 return 1;
  632.                         else
  633.                                 return 0;
  634.                 default:
  635.                         printf("错误!!");
  636.                         Sleep(5000);
  637.                         return 0;
  638.         }
  639. }


  640. void ClearTank(int x,int y)   //清除坦克函数(人机共用)
  641. {
  642.         for(int i=0;i<3;i++)
  643.                 for(int j=0;j<3;j++)
  644.                 {                     //将坦克占用的地图上的九格去掉
  645.                      map[y+j-1][x+i-1]=0;
  646.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
  647.                         GoToxy(2*x+2*j-2,y+i-1);
  648.                         printf("  ");
  649.                 }
  650. }


  651. void PrintTank(Tank tank)     //打印坦克(人机共用) 由于读取的Tank参数较多,故就不将参数一一传入了
  652. {                             // tank.color参数对应不同的颜色,范围 1 ~ 6
  653.         ColorChoose(tank.color);  //颜色选择函数   定义一个数组里装着字符指针(既装字符串)的数组指针(指向一维数组首地址的指针)
  654.     char *(*tankF)[4] = tank_figure[tank.model];  //将二维数组首址赋初值给数组指针 model==0为我的坦克,4为电脑1坦克,8为电脑2,类推
  655.         for(int i = 0; i < 3; i++)   
  656.         {
  657.         GoToxy((tank.x-1)*2 , tank.y-1+i);        //在坦克中心坐标的左边,上中下三行打印
  658.         printf("%s", tankF[i][tank.direction-1]); //打印的是地址,地址既字符串
  659.              for(int j=0;j<3;j++)
  660.                         if(tank.my)       //若为我的坦克
  661.                     map[tank.y+j-1][tank.x+i-1]=200;  //在map上把"坦克"九格填满代表敌我坦克的参数。敌方此值为100~103,我方为200
  662.                         else
  663.                             map[tank.y+j-1][tank.x+i-1]=100+tank.num;  //这样可以通过map值读取坦克编号,读取操作在BulletHit 函数
  664.         }
  665. }


  666. void HideCursor()  //隐藏光标
  667. {                  //CONSOLE_CURSOR_INFO结构体包含控制台光标的信息,DWORD dwSize光标百分比厚度(1~100)和BOOL bVisible光标是否可见
  668.         CONSOLE_CURSOR_INFO cursor_info={1,0};
  669.         SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); //SetConsoleCursorInfo用来设置指定的控制台光标的大小和可见性。
  670. }


  671. void GoToxy(int x,int y)  //光标移动函数,X表示横坐标,Y表示纵坐标。
  672. {
  673.         COORD  coord;         //使用头文件自带的坐标结构
  674.         coord.X=x;            //这里将int类型值传给short,不过程序中涉及的坐标值均不会超过short范围
  675.         coord.Y=y;
  676.         HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);  //获得标准输出句柄
  677.         SetConsoleCursorPosition(a,coord);         //以标准输出的句柄为参数设置控制台光标坐标
  678. }


  679. void ColorChoose(int color)   //颜色选择函数
  680. {
  681.         switch(color)
  682.         {
  683.                    case 1:               //天蓝色(我的坦克颜色)
  684.                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
  685.                         break;
  686.                 case 2:               //绿色
  687.                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);       
  688.                         break;
  689.                 case 3:               //黄色
  690.                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
  691.                         break;
  692.                 case 4:               //红色
  693.                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
  694.                         break;
  695.                 case 5:               //紫色
  696.                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
  697.                         break;
  698.                 case 6:               //白色
  699.                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN);
  700.                         break;
  701.                 case 7:               //深蓝色(∵颜色深难与黑色背景辨识度不高 ∴坦克颜色不选用此颜色),只用在字体颜色闪烁中
  702.                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
  703.                         break;
  704.         }
  705. }


  706. void Stop()    //暂停
  707. {
  708.         int color=1,timing=0;
  709.         while(1)
  710.         {
  711.                 if(timing++%30==0)
  712.                 {
  713.                         ColorChoose(color);   //颜色选择
  714.                         GoToxy(100,13);       //副屏幕打印
  715.                         printf("游戏暂停");
  716.                         GoToxy(88,17);
  717.                         printf("按回车键回到游戏");
  718.                         GoToxy(88,18);
  719.                         printf("或按 Esc键退出游戏");
  720.                         if(++color==8)
  721.                                 color=1;
  722.                 }
  723.                 if (GetAsyncKeyState( 0xD )& 0x8000)      //回车键
  724.                 {
  725.                         GoToxy(100,13);       //副屏幕打印
  726.                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
  727.                         printf("正在进行");   //覆盖掉原来的提示
  728.                         GoToxy(88,17);
  729.                         printf("                     ");
  730.                         GoToxy(88,18);
  731.                         printf("                     ");
  732.                         break;
  733.                 }
  734.                 else if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出       
  735.                         exit(0);
  736.                 Sleep(20);
  737.         }
  738. }


  739. void ClearMainScreen()  //主屏幕清屏函数,因使用system("cls");再打印框架有一定几率造成框架上移一行的错误,所以单独编写清屏函数
  740. {
  741.         for(int i=1;i<40;i++)
  742.         {
  743.                 GoToxy(2,i);
  744.                 printf("                                                                              ");
  745.         }
  746. }


  747. void Frame ()     //打印游戏主体框架
  748. {                 //SetConsoleTextAttribute为设置文本颜色和文本背景颜色函数
  749.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY);
  750.         printf("  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ");
  751.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE);
  752.         printf("  ▂▂▂▂▂▂▂▂▂▂▂▂▂ \n");
  753.         for(int i=0;i<14;i++)
  754.         {
  755.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);
  756.             printf("▕                                                                              ▏");
  757.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE);
  758.                 printf(" |                          |\n");
  759.         }
  760.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);
  761.         printf("▕                                                                              ▏");
  762.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE);
  763.         printf(" |═════════════|\n");
  764.         for(i=0;i<24;i++)
  765.         {
  766.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);
  767.             printf("▕                                                                              ▏");
  768.                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE);
  769.                 printf(" |                          |\n");
  770.         }
  771.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);
  772.         printf("  ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔  ");
  773.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_BLUE);
  774.         printf(" ﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊\n");
  775.         SideScreen ();  //打印副屏幕
  776. }


  777. void PrintMap()     // 打印地图(地图既地图障碍物)
  778. {
  779.         for(int j=0;j<41;j++)
  780.                 for(int i=0;i<41;i++)
  781.                         if(map[i][j]==6)
  782.                         {
  783.                                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN
  784.                                         |FOREGROUND_RED|FOREGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
  785.                                 GoToxy(2*j,i);
  786.                                 printf("■");
  787.                         }
  788.                         else if(map[i][j]==2)
  789.                         {
  790.                                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED);
  791.                                 GoToxy(2*j,i);
  792.                                 printf("▓");
  793.                         }
  794.                         else if(map[i][j]==1)
  795.                         {
  796.                                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED);
  797.                                 GoToxy(2*j,i);
  798.                                 printf("▓");
  799.                         }
  800.                         else if(map[i][j]==5)
  801.                         {                     
  802.                                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|BACKGROUND_BLUE|FOREGROUND_BLUE|FOREGROUND_GREEN);
  803.                                 GoToxy(2*j,i);
  804.                                 printf("~");
  805.                         }
  806.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN);
  807.         GoToxy(38,37);         printf("◣★◢");
  808.         GoToxy(38,38);         printf("███");    //∵无论地图怎么变,家所在位置不变,且家的字符多种,不方便用上述方式打印
  809.         GoToxy(38,39);         printf("◢█◣");    //∴直接打印(且家的map值与符号无关)
  810. }


  811. void GetMap()      //地图存放函数
  812. {                       //map里的值: 个位数的值为地图方块部分,百位数的值为坦克
  813.         int i ,j;      //map里的值: 0为可通过陆地,1为红砖,2待定,5为水,100为敌方坦克,200为我的坦克,
  814.         int Map[8][41][41]=
  815.         {
  816.                 {
  817.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
  818.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  819.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  820.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  821.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  822.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  823.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  824.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  825.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  826.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  827.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  828.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  829.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  830.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  831.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  832.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  833.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  834.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  835.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  836.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  837.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  838.                         {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,4},
  839.                         {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,4},
  840.                         {4,6,6,6,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,4},
  841.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  842.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  843.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  844.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  845.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  846.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  847.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  848.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  849.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  850.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  851.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  852.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  853.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4},
  854.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  855.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  856.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  857.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}
  858.                 },
  859.                 {
  860.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
  861.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4},
  862.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4},
  863.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4},
  864.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4},
  865.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4},
  866.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4},
  867.                         {4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4},
  868.                         {4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4},
  869.                         {4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4},
  870.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4},
  871.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4},
  872.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4},
  873.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},
  874.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},
  875.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},
  876.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},
  877.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},
  878.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},
  879.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  880.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  881.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  882.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  883.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  884.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  885.                         {4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},
  886.                         {4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},
  887.                         {4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},
  888.                         {4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4},
  889.                         {4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4},
  890.                         {4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4},
  891.                         {4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4},
  892.                         {4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4},
  893.                         {4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4},
  894.                         {4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4},
  895.                         {4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4},
  896.                         {4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4},
  897.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4},
  898.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4},
  899.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4},
  900.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}
  901.                 },
  902.                 {
  903.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
  904.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},
  905.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},
  906.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},
  907.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},
  908.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},
  909.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},
  910.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},
  911.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},
  912.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},
  913.                         {4,6,6,6,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4},
  914.                         {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4},
  915.                         {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4},
  916.                         {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  917.                         {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  918.                         {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  919.                         {4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4},
  920.                         {4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4},
  921.                         {4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4},
  922.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,6,6,6,6,6,6,4},
  923.                         {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  924.                         {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  925.                         {4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  926.                         {4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,1,1,1,4},
  927.                         {4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4},
  928.                         {4,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4},
  929.                         {4,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4},
  930.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  931.                         {4,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  932.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  933.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  934.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  935.                         {4,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  936.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  937.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  938.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  939.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  940.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},       
  941.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  942.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  943.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}
  944.                 },
  945.                 {
  946.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
  947.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  948.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  949.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  950.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  951.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,6,6,6,4},
  952.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4},
  953.                         {4,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4},
  954.                         {4,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,4},
  955.                         {4,6,6,6,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},
  956.                         {4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},
  957.                         {4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,4},
  958.                         {4,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,4},
  959.                         {4,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,4},
  960.                         {4,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},
  961.                         {4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4},
  962.                         {4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4},
  963.                         {4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4},
  964.                         {4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4},
  965.                         {4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4},
  966.                         {4,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},
  967.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4},
  968.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4},
  969.                         {4,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,4},
  970.                         {4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4},
  971.                         {4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4},
  972.                         {4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4},
  973.                         {4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},
  974.                         {4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},
  975.                         {4,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4},
  976.                         {4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4},
  977.                         {4,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,4},
  978.                         {4,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,4},
  979.                         {4,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,4},
  980.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,4},
  981.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,4},
  982.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  983.                         {4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4},
  984.                         {4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4},
  985.                         {4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4},
  986.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}
  987.                 },
  988.                 {
  989.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
  990.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4},
  991.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4},
  992.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4},
  993.                         {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4},
  994.                         {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4},
  995.                         {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4},
  996.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4},
  997.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4},
  998.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4},
  999.                         {4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},
  1000.                         {4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},
  1001.                         {4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4},
  1002.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4},
  1003.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4},
  1004.                         {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4},
  1005.                         {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  1006.                         {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  1007.                         {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4},
  1008.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},
  1009.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},
  1010.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},
  1011.                         {4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4},
  1012.                         {4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4},
  1013.                         {4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4},
  1014.                         {4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4},
  1015.                         {4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4},
  1016.                         {4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4},
  1017.                         {4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4},
  1018.                         {4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4},
  1019.                         {4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4},
  1020.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},
  1021.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},
  1022.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4},
  1023.                         {4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4},
  1024.                         {4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4},
  1025.                         {4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4},
  1026.                         {4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1027.                         {4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1028.                         {4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1029.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}
  1030.                 },
  1031.                 {
  1032.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
  1033.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1034.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1035.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1036.                         {4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,4},
  1037.                         {4,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,4},
  1038.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,4},
  1039.                         {4,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,2,2,2,2,2,2,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,4},
  1040.                         {4,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,2,2,2,2,2,2,2,0,0,0,1,1,0,0,0,0,0,0,0,1,1,4},
  1041.                         {4,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,2,2,2,2,2,2,2,2,0,0,1,1,1,0,0,0,0,0,0,0,1,1,4},
  1042.                         {4,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4},
  1043.                         {4,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4},
  1044.                         {4,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4},
  1045.                         {4,1,1,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,0,0,0,0,0,1,1,1,4},
  1046.                         {4,1,1,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,1,0,0,0,0,1,1,1,4},
  1047.                         {4,1,1,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,1,0,0,0,1,1,1,1,4},
  1048.                         {4,0,1,1,0,0,0,0,0,0,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,0,0,1,1,1,1,4},
  1049.                         {4,0,1,1,1,0,0,0,0,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,4},
  1050.                         {4,0,0,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,4},
  1051.                         {4,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,4},
  1052.                         {4,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,4},
  1053.                         {4,0,0,0,0,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,0,0,4},
  1054.                         {4,0,0,0,0,0,1,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4},
  1055.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4},
  1056.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4},
  1057.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,4},
  1058.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},
  1059.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4},
  1060.                         {4,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,4},
  1061.                         {4,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,4},
  1062.                         {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4},
  1063.                         {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4},
  1064.                         {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4},
  1065.                         {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4},
  1066.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1067.                         {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4},
  1068.                         {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4},
  1069.                         {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4},
  1070.                         {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4},
  1071.                         {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4},
  1072.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}
  1073.                 },
  1074.                 {
  1075.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
  1076.                         {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4},
  1077.                         {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4},
  1078.                         {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4},
  1079.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4},
  1080.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4},
  1081.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4},
  1082.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4},
  1083.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4},
  1084.                         {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4},
  1085.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4},
  1086.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4},
  1087.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4},
  1088.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},
  1089.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},
  1090.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4},
  1091.                         {4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4},
  1092.                         {4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4},
  1093.                         {4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4},
  1094.                         {4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4},
  1095.                         {4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4},
  1096.                         {4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4},
  1097.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},
  1098.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},
  1099.                         {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},
  1100.                         {4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4},
  1101.                         {4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4},
  1102.                         {4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4},
  1103.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4},
  1104.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4},
  1105.                         {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4},
  1106.                         {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4},
  1107.                         {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4},
  1108.                         {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4},
  1109.                         {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},
  1110.                         {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},
  1111.                         {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4},
  1112.                         {4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4},
  1113.                         {4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4},
  1114.                         {4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4},
  1115.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}
  1116.                 },
  1117.                 {
  1118.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
  1119.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4},
  1120.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4},
  1121.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4},
  1122.                         {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1123.                         {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1124.                         {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1125.                         {4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4},
  1126.                         {4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4},
  1127.                         {4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4},
  1128.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4},
  1129.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4},
  1130.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4},
  1131.                         {4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1132.                         {4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1133.                         {4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1134.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},
  1135.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},
  1136.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},
  1137.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4},
  1138.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4},
  1139.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4},
  1140.                         {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1141.                         {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1142.                         {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1143.                         {4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},
  1144.                         {4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},
  1145.                         {4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4},
  1146.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},
  1147.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},
  1148.                         {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},
  1149.                         {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},
  1150.                         {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},
  1151.                         {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4},
  1152.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1153.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1154.                         {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
  1155.                         {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4},
  1156.                         {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4},
  1157.                         {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4},
  1158.                         {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}
  1159.                 },
  1160.         };
  1161.                 for(i=0;i<41;i++)
  1162.                         for(j=0;j<41;j++)
  1163.                                         map[i][j]=Map[level-1][i][j];
  1164.         PrintMap();         //打印地图
  1165. }


  1166. void GameOver(bool home)
  1167. {
  1168.         int timing=0,color=1;
  1169.         while(1)
  1170.         {
  1171.                 if(timing++%30==0)         //游戏结束原因为生命值为0
  1172.                 {
  1173.                         ColorChoose(color);    //颜色选择
  1174.                         if(home)               //游戏结束原因为老家被毁,则多打印一行字以提示玩家
  1175.                         {
  1176.                                 GoToxy(37,19);     //主屏幕中心打印
  1177.                                 printf("老家被毁!");
  1178.                         }
  1179.                         GoToxy(37,20);         //主屏幕中心打印
  1180.                         printf("游戏结束!");
  1181.                         GoToxy(100,13);        //副屏幕打印
  1182.                         printf("游戏结束");
  1183.                         GoToxy(88,17);
  1184.                         printf("请按回车键重新开始!");
  1185.                         GoToxy(88,18);
  1186.                         printf("或按 Esc键退出游戏!");
  1187.                         if(++color==8)
  1188.                                 color=1;
  1189.                 }
  1190.                 if (GetAsyncKeyState( 0xD )& 0x8000)  //回车键
  1191.                 {
  1192. //                        system("cls");       //清屏,这里清屏后再次打印框架有一定几率造成框架上移一行的bug,因此选用自建清屏函数
  1193. //                        Frame ();            //重新打印游戏框架
  1194.                         score-=500;          //分数-500
  1195.                         ClearMainScreen();   //主屏清屏函数,无需再次打印框架
  1196.                         Initialize();        //从本关重新开始
  1197.                         break;
  1198.                 }
  1199.                 else if(GetAsyncKeyState( 0x1B )& 0x8000)  //Esc键退出       
  1200.                         exit(0);
  1201.                 Sleep(20);
  1202.         }
  1203. }


  1204. void NextLevel()
  1205. {
  1206.         int timing=0,color=1;
  1207.         level++;
  1208.         if(level<=MAX_LEVEL)
  1209.                 while(1)
  1210.                 {
  1211.                         if(timing++%10==0)
  1212.                         {
  1213.                                 ColorChoose(color);   //颜色选择   
  1214.                                 GoToxy(37,20);        //主屏幕中心打印
  1215.                                 printf("恭喜过关!");
  1216.                                 GoToxy(100,13);       //副屏幕打印
  1217.                                 printf("等待下关");
  1218.                                 GoToxy(87,17);
  1219.                                 printf("请按回车键进入下一关!");
  1220.                                 GoToxy(88,18);
  1221.                                 printf("或按 Esc键退出游戏!");
  1222.                                 if(++color==8)       
  1223.                                         color=1;
  1224.                         }
  1225.                         if (GetAsyncKeyState( 0xD )& 0x8000)  //回车键
  1226.                         {
  1227.                                 GoToxy(88,17);        //抹除副屏幕中的提示
  1228.                                 printf("                     ");
  1229.                                 GoToxy(88,18);
  1230.                                 printf("                     ");
  1231.                                 ClearMainScreen();   //主屏清屏函数,无需再次打印框架
  1232.                                 Initialize();        //初始化从下一关开始,level已++
  1233.                                 break;
  1234.                         }
  1235.                         else if(GetAsyncKeyState( 0x1B )& 0x8000)  //Esc键退出       
  1236.                                 exit(0);
  1237.                         Sleep(20);
  1238.                 }
  1239.         else   //level>8 通关
  1240.                 while(1)
  1241.                 {
  1242.                         if(timing++%5==0)
  1243.                         {
  1244.                                 ColorChoose(color);
  1245.                                 GoToxy(33,20);        //主屏幕中心打印
  1246.                                 printf("恭喜通过全部关卡!");
  1247.                                 GoToxy(100,13);       //副屏幕打印
  1248.                                 printf("已通全关");
  1249.                                 GoToxy(88,17);
  1250.                                 printf("恭喜通过全部关卡!");
  1251.                                 GoToxy(88,19);
  1252.                                 printf("按 Esc键退出游戏!");
  1253.                                 if(++color==8)       
  1254.                                         color=1;
  1255.                         }
  1256.                         if(GetAsyncKeyState( 0x1B )& 0x8000)  //Esc键退出       
  1257.                                 exit(0);
  1258.                         Sleep(10);
  1259.                 }
  1260. }


  1261. void GameCheak()
  1262. {                           //剩余敌人为0且四坦克全部不存活
  1263.         if(remain_enemy<=0 && !AI_tank[0].alive && !AI_tank[1].alive && !AI_tank[2].alive && !AI_tank[3].alive )
  1264.                 NextLevel();        //进入下一关
  1265.         if(my_tank.revive>=MAX_LIFE)   //我的生命值(复活次数)全部用完 MAX_LIFE
  1266.                 GameOver(0);        //游戏结束,传入0代表我的复活次数用光(生命值为0)。游戏结束有两种判断,另一种是老家被毁
  1267. }


  1268. void SideScreen ()  //副屏幕 行(84起,110末,若双字符宽则在108打印最后一个字)列(11上屏末,13下屏初,39下屏末。为美观最好打在38)
  1269. {                   // |         第  d  关         |   " |                          |\n"
  1270.         GoToxy(93,2);
  1271.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
  1272.         printf("第     关");
  1273.         GoToxy(92,5);
  1274.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
  1275.         printf("分  数:");
  1276.         GoToxy(92,7);
  1277.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
  1278.         printf("生  命:");
  1279.         GoToxy(86,9);
  1280.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
  1281.         printf("剩余敌方坦克:");
  1282.         GoToxy(86,11);
  1283.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
  1284.         printf("当前游戏速度:  %d",21-speed);
  1285.         GoToxy(86,13);
  1286.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
  1287.         printf("当前游戏状态:");
  1288.         GoToxy(94,19);
  1289.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
  1290.         GoToxy(94,24);
  1291.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
  1292.         printf("帮  助");
  1293.         GoToxy(86,27);
  1294.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
  1295.         printf("方向键  ←↑→↓  移动");
  1296.         GoToxy(93,29);
  1297.         printf("x 键 射击");
  1298.         GoToxy(89,31);
  1299.         printf("+ - 调整游戏速度");
  1300.         GoToxy(90,33);
  1301.         printf("游戏速度范围1~20");
  1302.         GoToxy(90,35);
  1303.         printf("回车键 暂停游戏");
  1304.         GoToxy(90,37);
  1305.         printf("Esc键  退出游戏");
  1306. /*        printf("帮  助");     //这是第二种详细说明的样式
  1307.         GoToxy(86,21);
  1308.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
  1309.         printf("方向键  ←↑→↓  移动");
  1310.         GoToxy(93,23);
  1311.         printf("x 键 射击");
  1312.         GoToxy(89,25);
  1313.         printf("+ - 调整游戏速度");
  1314.         GoToxy(90,27);
  1315.         printf("游戏速度范围1~20");
  1316.         GoToxy(90,29);
  1317.         printf("回车键 暂停游戏");
  1318.         GoToxy(90,31);
  1319.         printf("Esc键  退出游戏");
  1320.         GoToxy(86,33);
  1321.         printf("敌方坦克全部消灭则过关");
  1322.         GoToxy(87,34);
  1323.         printf("己方坦克生命值为0 或");
  1324.         GoToxy(86,35);
  1325.         printf("正下方的老家被毁则失败");
  1326.         GoToxy(86,36);
  1327.         printf("己坦克与敌坦克子弹碰撞");
  1328.         GoToxy(87,37);
  1329.         printf("则抵消,敌坦克间子弹碰");
  1330.         GoToxy(86,38);
  1331.         printf("撞不抵消且可穿过敌坦克");*/
  1332. }


  1333. void Initialize()      //初始化
  1334. {
  1335.         remain_enemy=16;
  1336.         my_tank.revive=0;  //我的坦克复活次数为0
  1337.         position=0;
  1338.         bul_num=0;
  1339.         GetMap();
  1340.         BuildMyTank( &my_tank );
  1341.         for(int i=0;i<12;i++)     //子弹初始化
  1342.         {
  1343.                 bullet [i].exist=0;
  1344.                 bullet [i].initial=0;
  1345.         }
  1346.         for(i=0;i<=3;i++)         //AI坦克初始化
  1347.         {
  1348.                 AI_tank [i].revive=0;
  1349.                 AI_tank [i].alive=0;  //初始化坦克全是不存活的,BuildAITank()会建立重新建立不存活的坦克
  1350.                 AI_tank [i].stop=0;
  1351.                 AI_tank [i].num=i;
  1352.                 AI_tank [i].my=0;
  1353.                 AI_tank [i].CD=0;
  1354.         }
  1355.         GoToxy(97,2);                        //在副屏幕上关卡数
  1356.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
  1357.         printf("%d",level);
  1358.         GoToxy(102,5);                       //在副屏幕上打印分数
  1359.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
  1360.         printf("%d   ",score);
  1361.         GoToxy(102,7);                       //在副屏幕打印我的剩余生命值
  1362.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
  1363.         printf("%d", MAX_LIFE-my_tank.revive);
  1364.         GoToxy(102,9);                       //在副屏幕上打印剩余坦克数
  1365.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
  1366.         printf("%d ",remain_enemy);
  1367.         GoToxy(100,13);                      //在副屏幕上打印状态
  1368.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN);
  1369.         printf("正在游戏");
  1370. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-11-5 16:10:20 | 显示全部楼层
别忘了评个分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-4 00:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表