问题标题: 坦克

1
1

0
1
钱寅虎
钱寅虎
初级守护
初级守护

#include <stdio.h>

#include <windows.h>

#include <time.h> 

                           //里规格:长39*2=78 (真坐标)(假坐标宽为39)  高39

                           //外规格:长41*2=82 (真坐标)(假坐标宽为41)  高41

#define UP    1

#define DOWN  2

#define LEFT  3

#define RIGHT 4

#define MAX_LEVEL 8

#define BULLET_NUM 20

#define MAX_LIFE 4

 

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

 

/*

      此程序中涉及的x,y类的坐标值,分为以下两种:                                 

                                                                                                  

假坐标:这里的坐标指的是以一个■长度为单位的坐标,而不是真正的coord坐标 (用于map数组的坐标)                             

                                                                                                  

真坐标:头文件自带的坐标结构coord中的坐标(也可以说是控制台里的真正坐标值)                                 

                                                                                                  

  区别:纵坐标y两值一致,假横坐标x值与真正coord横坐标(真坐标)关系是 x * 2 = coord 横坐标    

                                                                                                            

          coord横坐标既指GoTo函数中的x参数,因为本程序游戏界面以一个■长度为基本单位,                    

                                                                                                  

          可以说涉及的coord横坐标全是偶数。既假坐标要变真坐标(变真坐标才能发挥真正作用),横坐标须乘以2                                    

                                                           

*/

typedef struct             //这里的出现次序指的是一个AI_tank变量中的次序,游戏共有四个AI_tank变量

{                          //∵设定每个AI_tank每种特殊坦克只出现一次 ∴fast_tank & firm_tank 最多出现次数不超过1

    int fast_tank_order;   //fast_tank出现的次序(在第fast_tank_order次复活出现,从第0次开始),且每个AI_tank只出现一次

    int firm_tank_order;   //firm_tank出现的次序,同上

} LevInfo;                 //关卡信息(准确说是该关出现的坦克信息)

LevInfo level_info [MAX_LEVEL] = {{-1,-1},{3,-1},{-1,3},{2,3},{2,3},{2,3},{2,3},{2,3}};   //初始化,-1代表没有该类型坦克

 

 

typedef struct      //子弹结构体

{

    int x,y;        //子弹坐标,假坐标

    int direction;  //子弹方向变量

    bool exist;     //子弹存在与否的变量,1为存在,0不存在

    bool initial;   //子弹是否处于建立初状态的值,1为处于建立初状态,0为处于非建立初状态

    bool my;        //区分AI子弹与玩家子弹的标记,0为AI子弹,1为玩家(我的)子弹

} Bullet;

Bullet bullet [BULLET_NUM];  //考虑到地图上不太可能同时存在20颗子弹,所以数组元素设置20个

 

 

typedef struct      //坦克结构体

{

    int x,y;        //坦克中心坐标

    int direction;  //坦克方向

    int color;      //颜色参方向数,1到6分别代表不同颜色,具体在PrintTank函数定义有说明

    int model;      //坦克图案模型,值为1,2,3,分别代表不同的坦克图案,0为我的坦克图案,AI不能使用

    int stop;       //只能是AI坦克使用的参数,非0代表坦克停止走动,0为可以走动

    int revive;     //坦克复活次数

    int num;        //AI坦克编号(固定值,为常量,初始化函数中定下)0~3

    int CD;         //发射子弹冷却计时

    bool my;        //是否敌方坦克参数,我的坦克此参数为1,为常量

    bool alive;     //存活为1,不存活为0

}  Tank;

Tank AI_tank[4] , my_tank;  //my_tank为我的坦克,Ai_tank 代表AI坦克

 

//∵所有的函数都有可能对全局变量map进行读写(改变),

//∴函数中不另说明是否会对全局变量map读写

//基本操作与游戏辅助函数

void GoToxy(int x,int y);    //光标移动

void HideCursor();           //隐藏光标

void keyboard ();            //接受键盘输入

void Initialize();           //初始化(含有对多个数据的读写)

void Stop();                 //暂停

void Getmap();               //地图数据存放与获取

void Frame ();               //打印游戏主体框架

void PrintMap();             //打印地图(地图既地图障碍物)(含对level的读取)

void SideScreen ();          //副屏幕打印

void GameCheak();            //检测游戏输赢

void GameOver( bool home );  //游戏结束

void ClearMainScreen();      //主屏幕清屏函数∵system("cls")后打印框架有一定几率造成框架上移一行的错误∴单独编写清屏函数

void ColorChoose(int color); //颜色选择函数

void NextLevel();            //下一关(含有对level全局变量的读写)

 

//子弹部分

void BuildAIBullet(Tank *tank);                //AI坦克发射子弹(含有对my_tank的读取,只读取了my_tank坐标)

void BuildBullet  (Tank tank);                 //子弹发射(建立)(人机共用)(含全局变量bullet的修改)我的坦克发射子弹直接调用该函数,AI通过AIshoot间接调用

void BulletFly    (Bullet bullet[BULLET_NUM]); //子弹移动和打击(人机共用),

void BulletHit    (Bullet* bullet);            //子弹碰撞(人机共用)(含Tank全局变量的修改),只通过BulletFly调用,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理

void PrintBullet  (int x,int y,int T);         //打印子弹(人机共用)

void ClearBullet  (int x,int y,int T);         //清除子弹(人机共用)

int  BulletCheak  (int x,int y);               //判断子弹前方情况(人机共用)

 

//坦克部分

void BuildAITank (int* position, Tank* AI_tank); //建立AI坦克

void BuildMyTank (Tank* my_tank);                //建立我的坦克

void MoveAITank  (Tank* AI_tank);                //AI坦克移动

void MoveMyTank  (int turn);                     //我的坦克移动,只通过keyboard函数调用,既键盘控制

void ClearTank   (int x,int y);                  //清除坦克(人机共用)

void PrintTank   (Tank tank);                    //打印坦克(人机共用)

bool TankCheak   (Tank tank,int direction);      //检测坦克dirtection方向的障碍物,返值1阻碍,0 畅通

int  AIPositionCheak (int position);           //检测AI坦克建立位置是否有障碍物AIPositionCheak

 

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

 

 

//注意map数组应是纵坐标在前,横坐标在后,既map[y][x],(∵数组行长度在前,列长度在后)

//map里的值: 个位数的值为地图方块部分,百位数的值为坦克,子弹在map上没有值(子弹仅仅是一个假坐标)

//map里的值: 0为可通过陆地,1为红砖,2黄砖,5为水,100~103为敌方坦克,200为我的坦克,

 

//全局变量

int map[41][41];  //地图二维数组

int key_x;        // X键是否被“读入”的变量,也是子弹是否可以发射的变量,

int bul_num;      //子弹编号

int position;     //位置计数,对应AI坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置

int speed=7;      //游戏速度,调整用

int level=1;      //游戏关卡数

int score=0;      //游戏分数

int remain_enemy; //剩余敌人(未出现的敌人)

 

char* tank_figure[4][3][4]=

{

  {

    {"◢|◣", "◢-◣", " ◢-◣", "◢-◣"},

    {"┣●H", "┣●H", "一●H", "┣●一"},

    {"◥-◤", "◥|◤", " ◥-◤", "◥-◤"}

  }, 

  {

    {"┏┃┓", "┏┳┓", "┏┳┓", "┏┳┓"},

    {"┣●|", "┣●|", "━●|", "┣●━"},

    {"┗┻┛", "┗┃┛", "┗┻┛", "┗┻┛"}

  }, 

  {

    {"┏┃┓", "◢━◣", "┏┳◣", "◢┳┓"},

    {"┣●┫", "┣●┫", "━●┃", "┃●━"},

    {"◥━◤", "┗┃┛", "┗┻◤", "◥┻┛"}

  },

  {

    {"╔┃╗", "╔╦╗", "╔╦╗", "╔╦╗"},

    {"╠█╣", "╠█╣", "━█╣", "╠█━"},

    {"╚╩╝", "╚┃╝", "╚╩╝", "╚╩╝"}

  }

};

 

 

 

int main ()                               //主函数

{

    int i;

    unsigned int interval[12]={1,1,1,1,1,1,1,1,1,1,1,1} ;  //间隔计数器数组,用于控制速度

    srand(time(NULL)); //设置随机数种子(若不设置种子而调用rand会使每次运行的随机数序列一致)随机数序列指:如首次调用rand得到1,第二次得2,第三次3,则此次随机数序列为1,2,3

    HideCursor();                         //隐藏光标

    system("mode con cols=112 lines=42"); //控制窗口大小

    Frame ();                             //打印游戏主体框架

    Initialize();                         //初始化,全局变量level初值便是1 

//    HANDLE h1 , h2 ;                      //定义句柄变量

    for(;;)

    {

        if(interval[0]++%speed==0)        //速度调整用,假设interval[0]为a, 语句意为 a % 2==0,a=a+1; 

        {

            GameCheak();                  //游戏胜负检测

            BulletFly ( bullet );

            for(i=0 ; i<=3 ; i++)         //AI坦克移动循环

            {

                if(AI_tank[i].model==2 && interval[i+1]++%2==0) //四个坦克中的快速坦克单独使用计数器1,2,3,4

                    MoveAITank( & AI_tank[i]);

                if(AI_tank[i].model!=2 && interval[i+5]++%3==0) //四个坦克中的慢速坦克单独使用计数器5,6,7,8

                    MoveAITank( & AI_tank[i]);

            }

            for(i=0;i<=3;i++)                                   //建立AI坦克部分

                     if(AI_tank[i].alive==0 && AI_tank[i].revive<4 && interval[9]++%90==0)  //一个敌方坦克每局只有4条命

                {                                               //如果坦克不存活。计时,每次建立有间隔  1750 ms

                       BuildAITank( &position, & AI_tank[i] );     //建立AI坦克(复活)

                      break;                                      //每次循环只建立一个坦克

                  }

            for(i=0;i<=3;i++)

                if(AI_tank[i].alive)

                    BuildAIBullet(&AI_tank[i]);                 //AIshoot自带int自增计数CD,不使用main中的CD interval

            if(my_tank.alive && interval[10]++%2==0 )

                 keyboard ();

            if(my_tank.alive==0 && interval[11]++%30==0 && my_tank.revive < MAX_LIFE)

                 BuildMyTank( &my_tank );

        }

        Sleep(5);

    }

    return 0;

}

 

 

/*//这里的多线程暂时不用                   //x键用于子弹发射,x键的冷却时间不能和上下左右一同设置,那样就太快了

DWORD WINAPI InputX(LPVOID lpParameter)    //如果不用多线程运行,那么在x键冷却时间内程序会因Sleep将会挂起,暂停运行

{                                          //因为只有一个变量改变,而且变量改变先后顺序是显而易见的,所以不必设置缓冲区

    for(;;)                              

    {                                    

        if(GetAsyncKeyState( 88 )& 0x8000) //88为x键键值,当摁下x并且x键处于可输入状态

        {

            key_x=1;                       // X键是否允许被“读入”的变量,也是子弹是否可以发射的变量

            Sleep(600);                    // 子线程Sleep中,x就不能被"读入",主线程每操作完一次子弹发射,key_x会归零

        }

        Sleep(10);

    }

    return 0;

}*/

 

 

void keyboard ()

{               // kbhit()   getch()  用法可用但是不好用            

/* 

   函数功能:该函数判断在此函数被调用时,某个键是处于UP状态还是处于DOWN状态,及前次调用GetAsyncKeyState函数后,

   是否按过此键.如果返回值的最高位被置位,那么该键处于DOWN状态;如果最低位被置位,那么在前一次调用此函数后,此键被按过,

   否则表示该键没被按过.

   这里GetAsyncKeyState比 kbhit() + getch() 好用,操作更顺畅.   GetAsyncKeyState的返回值表示两个内容,

   一个是最高位bit的值,代表这个键是否被按下。一个是最低位bit的值,代表上次调用GetAsyncKeyState后,这个键是否被按下。

   &为与操作,&0x8000就是判断这个返回值的高位字节。如果high-order bit是1,则是按下状态,否则是弹起状态,为0

*/

    int count=0;

    if (GetAsyncKeyState(VK_UP)& 0x8000)  

        MoveMyTank( UP );

    else if (GetAsyncKeyState(VK_DOWN)& 0x8000)  

        MoveMyTank( DOWN );

    else if (GetAsyncKeyState(VK_LEFT)& 0x8000)

        MoveMyTank( LEFT );

    else if (GetAsyncKeyState(VK_RIGHT)& 0x8000)  

        MoveMyTank( RIGHT );

    else if (GetAsyncKeyState( 0x1B )& 0x8000)  // Esc键

        exit(0);                                //退出程序函数

    else if (GetAsyncKeyState( 0x20 )& 0x8000)  //空格

        Stop();

    else if (count++%7==0)            //这里添加计数器是为了防止按键粘连不能达到微调效果

    {

        if (speed>1 && GetAsyncKeyState( 0x6B )& 0x8000)   // +键

        {

            speed--;

            GoToxy(102,11);           //在副屏幕打印出当前速度

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED);

            printf("%d ",21-speed);   //副屏幕显示的速度为1~10

        }

        else if (speed<20 && GetAsyncKeyState( 0x6D )& 0x8000)  // - 键

        {

            speed++;

            GoToxy(102,11);           //在副屏幕打印出当前速度

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED);

            printf("%d ",21-speed);   //副屏幕显示的速度为1~10

        }

    }

    if(my_tank.CD==7)

    {

        if(GetAsyncKeyState( 88 )& 0x8000)

        {

            BuildBullet(my_tank);

            my_tank.CD=1;

        }

    }

    else

        my_tank.CD++;

}

 

 

 

void BuildAIBullet(Tank *tank)   //AI子弹发射(建立)含有对my_tank的读取

{

    if(tank->CD==14)

    {

        if(!(rand()%11))     //冷却结束后在随后的每个游戏周期中有10分之一的可能发射子弹

        {

            BuildBullet(*tank);

            tank->CD=0;

        }

    }

    else

        tank->CD++;

    if(tank->CD >= 14)       //AI强化部分,在冷却到达一定范围即可使用

    {

        if(tank->y==38 )     //如果坦克在底部(这个最优先)

        {

            if(tank->x < 20) //在老家左边

            {

                if(tank->direction==RIGHT)  //坦克方向朝左

                {

                    BuildBullet(*tank);     //发射子弹

                    tank->CD=0;

                }

            }

            else             //在老家右边

                if(tank->direction==LEFT)   //坦克方向朝右

                {

                    BuildBullet(*tank);     //发射子弹

                    tank->CD=0;

                }

        }

        else if(tank->x==my_tank.x+1 || tank->x==my_tank.x || tank->x==my_tank.x-1)  //AI坦克在纵向上"炮口"对准我的坦克

        {

            if(tank->direction==DOWN && my_tank.y > tank->y || tank->direction==UP && my_tank.y < tank->y)

            {                               //若是AI朝下并且我的坦克在AI坦克下方(数值大的在下面)或者AI朝上我的坦克在AI上方

                int big=my_tank.y , smal=tank->y , i; 

                if(my_tank.y < tank->y)

                {

                    big=tank->y;

                    smal=my_tank.y;

                }

                for(i=smal+2;i<=big-2;i++)  //判断AI炮口的直线上两坦克间有无障碍

                    if(map[i][tank->x]!=0 || map[i][tank->x]!=5)      //若有障碍

                        break;

                if(i==big-1)                //若i走到big-1说明无障碍

                {

                    BuildBullet(*tank);     //则发射子弹

                    tank->CD=0;

                }

            }

        }

        else if(tank->y==my_tank.y+1 || tank->y==my_tank.y || tank->y==my_tank.y-1) //AI坦克在横向上"炮口"对准我的坦克

        {

            if(tank->direction==RIGHT && my_tank.x > tank->x || tank->direction==LEFT && my_tank.x < tank->x)

            {                  //若是AI朝右并且我的坦克在AI坦克右方(数值大的在下面)或者AI朝左我的坦克在AI左方

                int big=my_tank.y , smal=tank->y , i;

                if(my_tank.x < tank->x)

                {

                    big=tank->x;

                    smal=my_tank.x;

                }

                for(i=smal+2;i<=big-2;i++)  //判断AI炮口的直线上两坦克间有无障碍

                    if(map[tank->y][i]!=0 || map[tank->y][i]!=5)      //若有障碍

                        break;

                if(i==big-1)   //若i走到big-1说明无障碍

                {

                    BuildBullet(*tank);     //则发射子弹

                    tank->CD=0;

                }

            }

        }

    }

}

 

 

void BuildBullet(Tank tank)  //子弹发射(建立),传入结构体Tank,这里包含改变了全局变量结构体bullet

{                            //∵实现方式为顺序循环建立子弹,每次调用改变的bullet数组元素都不同

    switch(tank.direction)   //∴为了方便,不将bullet放入参数,bullet作为全局变量使用

    {

        case UP    :

                bullet [bul_num].x = tank.x;

                bullet [bul_num].y = tank.y-2;

                bullet [bul_num].direction=1;

                break;

        case DOWN  :

                bullet [bul_num].x = tank.x;

                bullet [bul_num].y = tank.y+2;

                bullet [bul_num].direction=2;

                break;

        case LEFT  :

                bullet [bul_num].x = tank.x-2;

                bullet [bul_num].y = tank.y;

                bullet [bul_num].direction=3;

                break;

        case RIGHT :

                bullet [bul_num].x = tank.x+2;                                     

                bullet [bul_num].y = tank.y; 

                bullet [bul_num].direction=4;

                break; 

    }     

    bullet [bul_num].exist = 1;    //子弹被建立,此值为1则此子弹存在

    bullet [bul_num].initial = 1;  //子弹处于初建立状态

    bullet [bul_num].my=tank.my;   //如果是我的坦克发射的子弹bullet.my=1,否则为0

    bul_num++;

    if(bul_num==BULLET_NUM)        //如果子弹编号增长到20号,那么重头开始编号

        bul_num=0;                 //考虑到地图上不可能同时存在20颗子弹,所以数组元素设置20个

}

 

 

void BulletFly(Bullet bullet[BULLET_NUM]) //子弹移动和打击

{                                         //含有全局变量Bullet的改变

    for(int i =0; i<BULLET_NUM;i++)

    {

        if(bullet [i].exist)              //如果子弹存在

        {   

            if(bullet [i].initial==0)     //如果子弹不是初建立的

            {                           

                if(map[bullet[i].y] [bullet[i].x]==0 || map[bullet[i].y] [bullet[i].x]==5)   //如果子弹坐标当前位置无障碍

                    ClearBullet( bullet[i].x , bullet[i].y , BulletCheak(bullet[i].x , bullet[i].y ));     //抹除子弹图形

                switch(bullet [i].direction)                                      //然后子弹坐标变化(子弹变到下一个坐标)

                {

                    case UP    :(bullet [i].y)--;break;

                    case DOWN  :(bullet [i].y)++;break;

                    case LEFT  :(bullet [i].x)--;break;

                    case RIGHT :(bullet [i].x)++;break;

                }

            }

            int collide = BulletCheak ( bullet [i].x , bullet [i].y );   //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。

            if( collide )                                                //如果检测到当前子弹坐标无障碍(无碰撞)(包括在地面上与在水面上)

                PrintBullet( bullet[i].x , bullet[i].y , collide);       //则打印子弹,若有碰撞则不打印

            else

                BulletHit( & bullet [i] );     //若有碰撞则执行子弹碰撞函数                  

            if(bullet [i].initial)             //若子弹初建立,则把初建立标记去除

                bullet [i].initial = 0;

            for(int j=0; j< BULLET_NUM ; j++)  //子弹间的碰撞判断,若是我方子弹和敌方子弹碰撞则都删除,若为两敌方子弹则无视

                if(bullet [j].exist && j!=i && (bullet[i].my || bullet[j].my) && bullet[i].x==bullet[j].x && bullet[i].y==bullet[j].y)

                {                              //同样的两颗我方子弹不可能产生碰撞

                    bullet [j].exist=0;

                    bullet [i].exist=0;

                    ClearBullet( bullet[j].x , bullet[j].y , BulletCheak(bullet[j].x , bullet[j].y ));  //抹除j子弹图形,子弹i图形已被抹除

                    break;

                }

        }

    }

}

 

 

void BulletHit(Bullet* bullet)  //含有Tank全局变量的修改,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理

{                               //∵每次打中的坦克都不一样,不可能把所有坦克放在参数表中

    int x=bullet->x;            //∴这里的Tank使用全局变量

    int y=bullet->y;            //这里传入的值是子弹坐标,这两个值不需要改变

    int i;

    if(map[y][x]==1 || map[y][x]==2)  //子弹碰到砖块

    {

        if(bullet->direction==UP || bullet->direction==DOWN)   //如果子弹是纵向的

            for(i = -1 ; i<=1 ; i++)

                if(map[y][x+i]==1 || map[y][x+i]==2)  //如果子弹打中砖块两旁为砖块,则删除砖,若不是(一旁为坦克或其他地形)则忽略

                {

                    map[y][x+i]=0;    //砖块碎

                     GoToxy(2*x+2*i,y);

                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色

                     printf("  ");

                }

        if(bullet->direction==LEFT || bullet->direction==RIGHT)     //若子弹是横向的  (与子弹纵向实现同理)

            for(i = -1 ; i<=1 ; i++)

                if(map[y+i][x]==1 || map[y+i][x]==2)

                {

                    map[y+i][x]=0;

                     GoToxy(2*x,y+i);

                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色

                     printf("  "); 

                }

        bullet->exist=0;           //这颗子弹已经不存在了

    }

    else if(map[y][x]==4 || map[y][x]==6 )  //子弹碰到边框或者不可摧毁方块

        bullet->exist=0;

    else if(bullet->my && map[y][x]>=100 && map[y][x]<104 )  //若我的子弹碰到了敌方坦克

    {

        int num = map[y][x]%100;   //map[y][x]%100 等同于 tank.num ,可通过map值读取该坦克信息

        if(AI_tank[num].model==3 && AI_tank[num].color==2)   //若为firm tank,且color==2。该坦克为绿色,表明没有受到伤害

                AI_tank[num].color=3;                        //则变成黄色,color=3为黄色

        else if (AI_tank[num].model==3 && AI_tank[num].color==3)

                AI_tank[num].color=4;                        //4为红色

        else                       //其他类型的坦克或者firm tank为红色的情况

        {

            AI_tank[num].alive=0;

            ClearTank(AI_tank[num].x , AI_tank[num].y);      //清除该坦克

        }

        bullet->exist=0;

        score+=100;

        GoToxy(102,5);             //在副屏幕上打印出分数

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);

        printf("%d ",score);

    }

    else if(map[y][x]==200 && bullet->my==0 )   //若敌方子弹击中我的坦克

    {

        my_tank.alive=0;

        ClearTank(my_tank.x , my_tank.y);

        bullet->exist=0;

        my_tank.revive++;      //我的坦克复活次数+1(∵我的坦克复活次数与生命值有关∴放在这里自减)

        score-=100;            //分数减少

        GoToxy(102,5);         //在副屏幕上打印出分数

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);

        printf("%d   ",score);

        GoToxy(102,7);         //在副屏幕打印出我的剩余生命值

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);

        printf("%d   ", MAX_LIFE-my_tank.revive);

    }

//    else if(bullet->my==0 && map[y][x]>=100 && map[y][x]<104) //敌方子弹击中敌方坦克,可以设置两种子弹运行方式,这种暂时不用

//        bullet->exist=0;

    else if(map[y][x]==9)      //子弹碰到家(无论是谁的子弹)

    {

        bullet->exist=0;

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN);

        GoToxy(38,37);     printf("      ");

        GoToxy(38,38);     printf("◢◣  ");

        GoToxy(38,39);     printf("███");

        GameOver(1);           //游戏结束,传入1代表老家被毁

    }

}

 

 

int BulletCheak (int x,int y)  //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。

{                              //有障碍返回0,无障碍且子弹在地面返回1,子弹在水面上返回2

    if(map[y][x]==0)

        return 1;

    else if(map[y][x]==5)

        return 2;

    else

        return 0;

}

 

 

void PrintBullet (int x,int y,int T)   //当前坐标BulletCheak 的值做参量 T

{

    if(T==1)          //  T==1 表示子弹当前坐标在陆地上

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY);

    else if(T==2)     //  T==2 表示子弹当前坐标在水面上

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY|BACKGROUND_BLUE);

    GoToxy(2*x,y);

    printf("*");

}

 

 

void ClearBullet(int x,int y,int T)   //当前坐标BulletCheak 的值做参量 T

{

    GoToxy(2*x,y);

    if(T==2)        //  T==2 表示子弹当前坐标在水面上

    {

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|BACKGROUND_BLUE|FOREGROUND_BLUE|FOREGROUND_GREEN);

        printf("~");

    }

    else if(T==1)   //  T==1 表示子弹当前坐标在陆地上

    {

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);

        printf(" ");

    }

}

 

 

//position为坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置

void BuildAITank(int* position, Tank* AI_tank)   //执行一次该函数只建立一个坦克

{                                         //rand函数公式:0<=rand()%(a+1)<=a  0+m<=rand()%(n-m+1)+m<=n  

                                          //rand函数实现1到n:1<=rand()%(n)+1<=n

       if(AIPositionCheak(*position))        //若此位置无障碍,可生成。position参数详见AIPositionCheak函数定义

    {

        AI_tank->x= 20 + 18*(*position);  //20 + 18 * position 对应三个生成位置的x假坐标

        AI_tank->y=2;

        if(AI_tank->revive==level_info[level-1].firm_tank_order)  //坦克出现(复活)次序==关卡信息(level_info)中firm tank的出现次序

        {

            AI_tank->model = 3;           //3为firm tank的模型(外观)

            AI_tank->color = 2;           //颜色参数2为绿色,具体详见函数ColorChoose

        }

        else if(AI_tank->revive==level_info[level-1].fast_tank_order)  //同上if,这里是fast_tank的

        {

            AI_tank->model = 2;

            AI_tank->color = rand()%6+1;  //若不是firm tank则随机颜色,颜色参数为1~6,分别代表不同颜色,详见函数ColorChoose

        }

        else      //普通坦克

        {

            AI_tank->model = 1;

               AI_tank->color = rand()%6+1;  //若不是firm tank则随机颜色

        }

        AI_tank->alive = 1;       //坦克变为存在

        AI_tank->direction = 2 ;  //方向朝下

        AI_tank->revive++;        //复活次数+1

        PrintTank(*AI_tank);

        (*position)++; 

        remain_enemy--;

        GoToxy(102,9);            //在副屏幕上打印剩余坦克数

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

        printf("%d ",remain_enemy);

        if(*position==2)          //position只能为0,1,-1,这里position循环重置

            *position = -1;

             return ;                  //若生成了一辆坦克,则结束该函数

    }

}

 

 

int AIPositionCheak( int position )    //position为坦克生成位置2为我的坦克位置,其余为AI位,-1为左位,0为中间位置,1为右位

{

    int    x,y;

    if(position==2)                    //2为我的坦克位置,现在暂时用不到

        x=15,y=38;

    else

        y=2 , x= 20 + 18 * position ;  //20 + 18 * position 对应三个生成位置的x假坐标

    for(int i=0;i<3;i++)

        for(int j=0;j<3;j++)

            if( map[y+j-1][x+i-1]!=0)  //如果遍历的九宫格里有障碍物

                return 0;              //则返回0,表示此生成位置有阻碍

    return 1;                          //否则生成1,表示此生成位置无阻碍

}

 

 

void MoveAITank(Tank* AI_tank) //AI专用函数,该函数主要为AI加强

{

       if(AI_tank->alive)         //如果坦克活着

    {

        if(AI_tank->stop!=0)   //坦克是否停止运动的判断,若stop参数不为0

        {

            AI_tank->stop--;   //则此坦克本回合停止运动

            return;

        }

        if( !(rand()%23) )     //22分之1的概率执行方向重置

        {

            AI_tank->direction = rand()%4+1;

            if( rand()%3 )     //在方向重置后有2分之1的概率停止走动3步的时间

            {

                AI_tank->stop=2;

                return;

            }

        }

        ClearTank (AI_tank->x , AI_tank->y);

        if(TankCheak ( *AI_tank , AI_tank->direction))   //如果前方无障碍

            switch ( AI_tank->direction )

            {

                   case UP   : AI_tank->y--; break;  //上前进一格

                case DOWN : AI_tank->y++; break;  //下前进一格

                 case LEFT : AI_tank->x--; break;  //左前进一格

                case RIGHT: AI_tank->x++; break;  //右前进一格

            }

        else                     //前方有障碍

        {

            if(!(rand()%4))      //3分之1的概率乱转

            {

                AI_tank->direction=rand()%4+1;

                AI_tank->stop=2; //乱转之后停止走动3步的时间

                PrintTank(*AI_tank);

                return;          //∵continue会跳过下面的打印函数,∴这里先打印

            }

            else                 //另外3分之2的几率选择正确的方向

            {

                int j;

                for(j=1;j<=4;j++)

                    if(TankCheak ( *AI_tank , j ))  //循环判断坦克四周有无障碍,此函数返值1为可通过

                        break;

                if(j==5)         //j==5说明此坦克四周都有障碍物,无法通行

                {

                    PrintTank(*AI_tank);

                    return;      //则跳过下面的while循环以防程序卡死

                }

                while(TankCheak ( *AI_tank , AI_tank->direction) == 0)  //如果前方仍有障碍

                    AI_tank->direction=(rand()%4+1);                    //则换个随机方向检测

            }

        }

        PrintTank(*AI_tank);     //打印AI坦克

    }

}

 

 

void BuildMyTank (Tank* my_tank) //建立我的坦克

{

    my_tank->x=15;

       my_tank->y=38;

       my_tank->stop=NULL;

       my_tank->direction=1;

    my_tank->model=0;

    my_tank->color=1;

    my_tank->alive=1;

    my_tank->my=1;

    my_tank->CD=7;

    PrintTank (*my_tank) ;   //打印我的坦克

}

 

 

void MoveMyTank(int turn )   //玩家专用函数,turn为keyboard函数里因输入不同方向键而传入的不同的值

{

    ClearTank(my_tank.x , my_tank.y);        //map 数组中“我的坦克”参数清除工作已在此函数中完成

    my_tank.direction=turn;                  //将键盘输入的方向值传入我的坦克方向值

    if(TankCheak ( my_tank , my_tank.direction ))  //若此时我的坦克当前方向上无障碍

        switch (turn)

        {

            case UP   : my_tank.y--; break;  //上前进一格

            case DOWN : my_tank.y++; break;  //下前进一格

            case LEFT : my_tank.x--; break;  //左前进一格

            case RIGHT: my_tank.x++; break;  //右前进一格

    }                                        //若坦克当前方向上有障碍则跳过坐标变化直接打印该转向的坦克

    PrintTank (my_tank);

}

 

 

bool TankCheak(Tank tank,int direction)  //检测坦克前方障碍函数,参量为假坐标。返值1为可通过,返值0为阻挡(人机共用)

{

    switch(direction)                    //direction变量   1上,2下,3左,4右

    {

        case UP:

            if (map[tank.y-2][tank.x]==0 && map[tank.y-2][tank.x-1]==0 && map[tank.y-2][tank.x+1]==0)

                return 1;

            else

                return 0;

        case DOWN:

            if (map[tank.y+2][tank.x]==0 && map[tank.y+2][tank.x-1]==0 && map[tank.y+2][tank.x+1]==0)

                return 1;

            else

                return 0;

        case LEFT:

            if (map[tank.y][tank.x-2]==0 && map[tank.y-1][tank.x-2]==0 && map[tank.y+1][tank.x-2]==0)

                return 1;

            else

                return 0;

        case RIGHT:

            if (map[tank.y][tank.x+2]==0 && map[tank.y-1][tank.x+2]==0 && map[tank.y+1][tank.x+2]==0)

                return 1;

            else

                return 0;

        default:

            printf("错误!!");

            Sleep(5000);

            return 0;

    }

}

 

 

void ClearTank(int x,int y)   //清除坦克函数(人机共用)

{

    for(int i=0;i<3;i++)

        for(int j=0;j<3;j++)

        {                     //将坦克占用的地图上的九格去掉

             map[y+j-1][x+i-1]=0;

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);

            GoToxy(2*x+2*j-2,y+i-1);

            printf("  ");

        }

}

 

 

void PrintTank(Tank tank)     //打印坦克(人机共用) 由于读取的Tank参数较多,故就不将参数一一传入了

{                             // tank.color参数对应不同的颜色,范围 1 ~ 6

    ColorChoose(tank.color);  //颜色选择函数   定义一个数组里装着字符指针(既装字符串)的数组指针(指向一维数组首地址的指针)

    char *(*tankF)[4] = tank_figure[tank.model];  //将二维数组首址赋初值给数组指针 model==0为我的坦克,4为电脑1坦克,8为电脑2,类推

    for(int i = 0; i < 3; i++)   

    {

        GoToxy((tank.x-1)*2 , tank.y-1+i);        //在坦克中心坐标的左边,上中下三行打印

        printf("%s", tankF[i][tank.direction-1]); //打印的是地址,地址既字符串

         for(int j=0;j<3;j++)

            if(tank.my)       //若为我的坦克

                map[tank.y+j-1][tank.x+i-1]=200;  //在map上把"坦克"九格填满代表敌我坦克的参数。敌方此值为100~103,我方为200

            else

                map[tank.y+j-1][tank.x+i-1]=100+tank.num;  //这样可以通过map值读取坦克编号,读取操作在BulletHit 函数

    }

}

 

 

void HideCursor()  //隐藏光标

{                  //CONSOLE_CURSOR_INFO结构体包含控制台光标的信息,DWORD dwSize光标百分比厚度(1~100)和BOOL bVisible光标是否可见

    CONSOLE_CURSOR_INFO cursor_info={1,0};

    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); //SetConsoleCursorInfo用来设置指定的控制台光标的大小和可见性。

}

 

 

void GoToxy(int x,int y)  //光标移动函数,X表示横坐标,Y表示纵坐标。

{

    COORD  coord;         //使用头文件自带的坐标结构

    coord.X=x;            //这里将int类型值传给short,不过程序中涉及的坐标值均不会超过short范围

    coord.Y=y;

    HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);  //获得标准输出句柄

    SetConsoleCursorPosition(a,coord);         //以标准输出的句柄为参数设置控制台光标坐标

}

 

 

void ColorChoose(int color)   //颜色选择函数

{

    switch(color)

    {

           case 1:               //天蓝色(我的坦克颜色)

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);

            break;

        case 2:               //绿色

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);    

            break;

        case 3:               //黄色

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

            break;

        case 4:               //红色

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

            break;

        case 5:               //紫色

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);

            break;

        case 6:               //白色

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN);

            break;

        case 7:               //深蓝色(∵颜色深难与黑色背景辨识度不高 ∴坦克颜色不选用此颜色),只用在字体颜色闪烁中

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);

            break;

    }

}

 

 

void Stop()    //暂停

{

    int color=1,timing=0;

    while(1)

    {

        if(timing++%30==0)

        {

            ColorChoose(color);   //颜色选择

            GoToxy(100,13);       //副屏幕打印

            printf("游戏暂停");

            GoToxy(88,17);

            printf("按回车键回到游戏");

            GoToxy(88,18);

            printf("或按 Esc键退出游戏");

            if(++color==8)

                color=1;

        }

        if (GetAsyncKeyState( 0xD )& 0x8000)      //回车键

        {

            GoToxy(100,13);       //副屏幕打印

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);

            printf("正在进行");   //覆盖掉原来的提示

            GoToxy(88,17);

            printf("                     ");

            GoToxy(88,18);

            printf("                     ");

            break;

        }

        else if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出    

            exit(0);

        Sleep(20);

    }

}

 

 

void ClearMainScreen()  //主屏幕清屏函数,因使用system("cls");再打印框架有一定几率造成框架上移一行的错误,所以单独编写清屏函数

{

    for(int i=1;i<40;i++)

    {

        GoToxy(2,i);

        printf("                                                                              ");

    }

}

 

 

void Frame ()     //打印游戏主体框架

{                 //SetConsoleTextAttribute为设置文本颜色和文本背景颜色函数

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY);

    printf("  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); 

    printf("  ▂▂▂▂▂▂▂▂▂▂▂▂▂ \n");

    for(int i=0;i<14;i++)

    {

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);

        printf("▕                                                                              ▏");

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); 

        printf(" |                          |\n");

    }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);

    printf("▕                                                                              ▏");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); 

    printf(" |═════════════════════════ |\n");

    for(int i=0;i<24;i++)

    {

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);

        printf("▕                                                                              ▏");

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); 

        printf(" |                          |\n");

    }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);

    printf("  ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔  ");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_BLUE); 

    printf(" ﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊\n");

    SideScreen ();  //打印副屏幕

}

 

 

void PrintMap()     // 打印地图(地图既地图障碍物)

{

    for(int j=0;j<41;j++)

        for(int i=0;i<41;i++)

            if(map[i][j]==6)

            {

                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN

                    |FOREGROUND_RED|FOREGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);

                GoToxy(2*j,i);

                printf("■");

            }

            else if(map[i][j]==2)

            {

                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED);

                GoToxy(2*j,i);

                printf("▓");

            }

            else if(map[i][j]==1)

            {

                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED);

                GoToxy(2*j,i);

                printf("▓");

            }

            else if(map[i][j]==5)

            {                      

                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|BACKGROUND_BLUE|FOREGROUND_BLUE|FOREGROUND_GREEN);

                GoToxy(2*j,i);

                printf("~");

            }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN);

    GoToxy(38,37);     printf("  ★ ");

    GoToxy(38,38);     printf("███");    //∵无论地图怎么变,家所在位置不变,且家的字符多种,不方便用上述方式打印

    GoToxy(38,39);     printf("◢█◣");    //∴直接打印(且家的map值与符号无关)

}

 

 

void GetMap()      //地图存放函数

{                   //map里的值: 个位数的值为地图方块部分,百位数的值为坦克

    int i ,j;      //map里的值: 0为可通过陆地,1为红砖,2待定,5为水,100为敌方坦克,200为我的坦克,

    int Map[8][41][41]=

    {

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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}, 

            {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},

            {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}, 

            {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},

            {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}, 

            {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}, 

            {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},

            {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}, 

            {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},

            {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},

            {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}, 

            {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},

            {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},

            {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},

            {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},

            {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},

            {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}, 

            {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},

            {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},

            {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},

            {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}, 

            {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},

            {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},

            {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},

            {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},

            {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},

            {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}, 

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},    

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

    };

        for(i=0;i<41;i++)

            for(j=0;j<41;j++)

                    map[i][j]=Map[level-1][i][j];

    PrintMap();         //打印地图

}

 

 

void GameOver(bool home)

{

    int timing=0,color=1;

    while(1)

    {

        if(timing++%30==0)         //游戏结束原因为生命值为0

        {

            ColorChoose(color);    //颜色选择

            if(home)               //游戏结束原因为老家被毁,则多打印一行字以提示玩家

            {

                GoToxy(37,19);     //主屏幕中心打印

                printf("老家被毁!");

            }

            GoToxy(37,20);         //主屏幕中心打印

            printf("游戏结束!");

            GoToxy(100,13);        //副屏幕打印

            printf("游戏结束");

            GoToxy(88,17);

            printf("请按回车键重新开始!");

            GoToxy(88,18);

            printf("或按 Esc键退出游戏!");

            if(++color==8)

                color=1;

        }

        if (GetAsyncKeyState( 0xD )& 0x8000)  //回车键

        {

//            system("cls");       //清屏,这里清屏后再次打印框架有一定几率造成框架上移一行的bug,因此选用自建清屏函数

//            Frame ();            //重新打印游戏框架

            score-=500;          //分数-500

            ClearMainScreen();   //主屏清屏函数,无需再次打印框架

            Initialize();        //从本关重新开始

            break;

        }

        else if(GetAsyncKeyState( 0x1B )& 0x8000)  //Esc键退出    

            exit(0);

        Sleep(20);

    }

}

 

 

void NextLevel()

{

    int timing=0,color=1;

    level++;

    if(level<=MAX_LEVEL)

        while(1)

        {

            if(timing++%10==0)

            {

                ColorChoose(color);   //颜色选择   

                GoToxy(37,20);        //主屏幕中心打印

                printf("恭喜过关!");

                GoToxy(100,13);       //副屏幕打印

                printf("等待下关");

                GoToxy(87,17);

                printf("请按回车键进入下一关!");

                GoToxy(88,18);

                printf("或按 Esc键退出游戏!");

                if(++color==8)    

                    color=1;

            }

            if (GetAsyncKeyState( 0xD )& 0x8000)  //回车键

            {

                GoToxy(88,17);        //抹除副屏幕中的提示

                printf("                     ");

                GoToxy(88,18);

                printf("                     ");

                ClearMainScreen();   //主屏清屏函数,无需再次打印框架

                Initialize();        //初始化从下一关开始,level已++

                break;

            }

            else if(GetAsyncKeyState( 0x1B )& 0x8000)  //Esc键退出    

                exit(0);

            Sleep(20);

        }

    else   //level>8 通关

        while(1)

        {

            if(timing++%5==0)

            {

                ColorChoose(color);

                GoToxy(33,20);        //主屏幕中心打印

                printf("恭喜通过全部关卡!");

                GoToxy(100,13);       //副屏幕打印

                printf("已通全关");

                GoToxy(88,17);

                printf("恭喜通过全部关卡!");

                GoToxy(88,19);

                printf("按 Esc键退出游戏!");

                if(++color==8)    

                    color=1;

            }

            if(GetAsyncKeyState( 0x1B )& 0x8000)  //Esc键退出    

                exit(0);

            Sleep(10);

        }

}

 

 

void GameCheak()

{                           //剩余敌人为0且四坦克全部不存活

    if(remain_enemy<=0 && !AI_tank[0].alive && !AI_tank[1].alive && !AI_tank[2].alive && !AI_tank[3].alive )

        NextLevel();        //进入下一关

    if(my_tank.revive>=MAX_LIFE)   //我的生命值(复活次数)全部用完 MAX_LIFE

        GameOver(0);        //游戏结束,传入0代表我的复活次数用光(生命值为0)。游戏结束有两种判断,另一种是老家被毁

}

 

 

void SideScreen ()  //副屏幕 行(84起,110末,若双字符宽则在108打印最后一个字)列(11上屏末,13下屏初,39下屏末。为美观最好打在38)

{                   // |         第  d  关         |   " |                          |\n"

    GoToxy(93,2);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);

    printf("第     关");

    GoToxy(92,5);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);

    printf("分  数:");

    GoToxy(92,7);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);

    printf("生  命:");

    GoToxy(86,9);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

    printf("剩余敌方坦克:");

    GoToxy(86,11);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);

    printf("当前游戏速度:  %d",21-speed);

    GoToxy(86,13);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);

    printf("当前游戏状态:");

    GoToxy(94,19);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);

    GoToxy(94,24);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);

   /* printf("帮  助");

    GoToxy(86,27);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);

    printf("方向键  ←↑→↓  移动");

    GoToxy(93,29);

    printf("x 键 射击");

    GoToxy(89,31);

    printf("+ - 调整游戏速度");

    GoToxy(90,33);

    printf("游戏速度范围1~20");

    GoToxy(90,35);

    printf("空格键 暂停游戏");

    GoToxy(90,37);

    printf("Esc键  退出游戏");*/

  printf("帮  助");     //这是第二种详细说明的样式

    GoToxy(86,21);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);

    printf("方向键  ←↑→↓  移动");

    GoToxy(93,23);

    printf("x 键 射击");

    GoToxy(89,25);

    printf("+ - 调整游戏速度");

    GoToxy(90,27);

    printf("游戏速度范围1~20");

    GoToxy(90,29);

    printf("回车键 暂停游戏");

    GoToxy(90,31);

    printf("Esc键  退出游戏");

    GoToxy(86,33);

    printf("敌方坦克全部消灭则过关");

    GoToxy(87,34);

    printf("己方坦克生命值为0 或");

    GoToxy(86,35);

    printf("正下方的老家被毁则失败");

    GoToxy(86,36);

    printf("己坦克与敌坦克子弹碰撞");

    GoToxy(87,37);

    printf("则抵消,敌坦克间子弹碰");

    GoToxy(86,38);

    printf("撞不抵消且可穿过敌坦克");

}

 

 

void Initialize()      //初始化

{

    remain_enemy=16;

    my_tank.revive=0;  //我的坦克复活次数为0

    position=0;

    bul_num=0;

    GetMap();

    BuildMyTank( &my_tank );

    for(int i=0;i<12;i++)     //子弹初始化

    {

        bullet [i].exist=0;

        bullet [i].initial=0;

    }

    for(int i=0;i<=3;i++)         //AI坦克初始化

    {

        AI_tank [i].revive=0;

        AI_tank [i].alive=0;  //初始化坦克全是不存活的,BuildAITank()会建立重新建立不存活的坦克

        AI_tank [i].stop=0;

        AI_tank [i].num=i;

        AI_tank [i].my=0;

        AI_tank [i].CD=0;

    }

    GoToxy(97,2);                        //在副屏幕上关卡数

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

    printf("%d",level);

    GoToxy(102,5);                       //在副屏幕上打印分数

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);

    printf("%d   ",score);

    GoToxy(102,7);                       //在副屏幕打印我的剩余生命值

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);

    printf("%d", MAX_LIFE-my_tank.revive);

    GoToxy(102,9);                       //在副屏幕上打印剩余坦克数

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

    printf("%d ",remain_enemy);

    GoToxy(100,13);                      //在副屏幕上打印状态

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN);

    printf("正在游戏");

}
 

1
钱寅虎
钱寅虎
初级守护
初级守护

#include<iostream>
#include<string>
#include<cstdio>
#include<windows.h>
#include<stdlib.h> 
#include<fstream>
#include<sys/time.h>
#include<cstdlib>
#include<ctime>
#include<string.h>
#include<conio.h>
#include<iomanip>
#include<stdio.h>
#include<iterator>  
#pragma  comment(lib,"WinMM.Lib")
using namespace std;
string n,mima;
char zsm,czp1,czp2;
int ldj=1,ljy=1000,zs=0;
int xl=100,gj=20,nl=100,nlsx=100,jy,dj=1,xlsx=100,jb=100,zt[110]={0},ylxl=100;
int bao[110],dy=1;
struct JN{
    string nm;
    int nb,hl,cd,lq;
}jn[30]; 
int ss[15];
void hf();
void h1(string s)
{
    int l=s.length(),j;
    for(int i=0;i<l;i++)
    {
        cout<<s[i];
        Sleep(0);
    }
}
void h2()
{
    system("cls");

string h3(){
    time_t timep;
    time(&timep);
    char tmp[64];
    strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M",localtime(&timep) );
    return tmp;
}
void hg();
void hca(); 
void hca()
{
    char c;
    h1("A:还魂丹:250币   B:血瓶:20币   C:能量瓶:15币 D:退出此界面\n");
    c=getche();
    h2();
    system("cls");
    if(c=='A')
    {
        if(jb>=250)
        {
            jb-=250;
            bao[1]++;
            h1("购买成功\n");
        }
        else
            h1("金币不足\n");
    }
    if(c=='B')
    {
        if(jb>=20)
        {
            jb-=20;
            bao[2]++;
            h1("购买成功\n");
        } 
        else
            h1("金币不足\n");
    } 
    if(c=='C')
    {
        if(jb>=15)
        {
            jb-=15;
            bao[3]++;
            h1("购买成功\n");
        } 
        else
            h1("金币不足\n");
    } 
    system("pause");
}
void hcb()
{
    char c;
    h1("A:剧毒之刺:50币 B:毒雾:80币 C:巨力斩:30币 D:暴血狂魔:80币 E:千古冰封:80币 F:寒冰刃:30币");
    h1(" G:辉煌之力:50币 H:养精蓄锐:50币 I:极置千连拍:30币 Z:退出此界面\n");
    c=getche();
    h2();
    system("cls");
    if(c=='A')
    {
        h1("剧毒之刺可以对单个敌人造成持续伤害\n");
        if(jb>=50)
        {
            jb-=50;
            jn[4].nb=1;
            jn[4].hl=70;
            h1("购买成功\n");
        } 
        else
            h1("金币不足\n");
    }
    if(c=='B')
    {
        h1("毒雾可以对多个敌人造成持续伤害并对其\n");
        if(jb>=80)
        {
            jb-=80;
            jn[8].nb=1;
            jn[8].hl=175; 
            h1("购买成功\n");
        } 
        else
            h1("金币不足\n");
    }
    if(c=='C')
    {
        h1("巨力斩可以对前方敌人造成大量伤害并位移一格\n");
        if(jb>=30)
        {
            jb-=30;
            jn[1].nb=max(1,jn[1].nb);
            h1("购买成功\n");
            jn[1].hl=40; 
            jn[1].cd=5;
        } 
        else
            h1("金币不足\n");
    }
    if(c=='D')
    {
        h1("爆血狂魔可以令自己暴血加伤害\n");
        if(jb>=80)
        {
            jb-=80;
            jn[9].nb=1;
            jn[9].hl=400; 
            h1("购买成功\n");
        } 
        else
            h1("金币不足\n");
    }
    if(c=='E')
    {
        h1("千古冰封可以让单个敌人无法行动\n");
        if(jb>=80)
        {
            jb-=80;
            jn[7].nb=1;
            h1("购买成功\n");
            jn[7].hl=120;
        } 
        else
            h1("金币不足\n");
    }
    if(c=='F')
    {
        h1("寒冰刃可以对单个敌人造成伤害并无法行动\n");
        if(jb>=30)
        {
            jb-=30;
            jn[3].nb=1;
            h1("购买成功\n");
            jn[3].hl=60;
        } 
        else
            h1("金币不足\n");
    }
    if(c=='G')
    {
        h1("辉煌之力可以让残血加伤害\n");
        if(jb>=50)
        {
            jb-=50;
            jn[6].hl=70; 
            jn[6].nb=1;
            h1("购买成功\n");
        } 
        else
            h1("金币不足\n");
    }
    int czp;
    if(c=='H')
    {
        h1("养精蓄锐可以恢复血量\n");
        if(jb>=50)
        {
            jb-=50;
            jn[5].nb=1;
            jn[5].hl=60;
            h1("购买成功\n");
        } 
        else
            h1("金币不足\n");
    }
    if(c=='I')
    {
        h1("极置千连拍可以对多个敌人造成伤害\n");
        if(jb>=30)
        {
            jb-=30;
            jn[2].nb=1;
            jn[2].hl=55;
            h1("购买成功\n");
        } 
        else
            h1("金币不足\n");
    }
    system("pause");
}
void hcca()
{
    char c;
    h1("A:木刀:40币   B:石刀:70币   C:铁刀:150币   D:钢刀:250币   F:铜刀:450币 E:退出此界面\n");
    c=getche();
    system("cls");
    if(c=='A')
    {
        if(jb>=40)
        {
            jb-=40;
            ss[1]=1;
            h1("购买成功  穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='B')
    {
        if(jb>=70)
        {
            jb-=70;
            ss[1]=2;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='C')
    {
        if(jb>=150)
        {
            jb-=150;
            ss[1]=3;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='D')
    {
        if(jb>=250)
        {
            jb-=250;
            ss[1]=4;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='F')
    {
        if(jb>=450)
        {
            jb-=450;
            ss[1]=5;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    system("pause");
}
void hccb()
{
    char c;
    h1("A:木甲:40币   B:石甲:70币   C:铁甲:150币   D:钢甲:250币   E:退出此界面\n");
    c=getche();
    h2();
    system("cls");
    if(c=='A')
    {
        if(jb>=40)
        {
            jb-=40;
            ss[2]=1;
            h1("购买成功  穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='B')
    {
        if(jb>=70)
        {
            jb-=70;
            ss[2]=2;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='C')
    {
        if(jb>=150)
        {
            jb-=150;
            ss[2]=3;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='D')
    {
        if(jb>=250)
        {
            jb-=250;
            ss[2]=4;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    system("pause");
}
void hccc()
{
    char c;
    h1("A:木光环:40币   B:石光环:70币   C:铁光环:150币   D:钢光环:250币   E:退出此界面\n");
    c=getche();
    system("cls");
    if(c=='A')
    {
        if(jb>=40)
        {
            jb-=40;
            ss[3]=1;
            h1("购买成功  穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='B')
    {
        if(jb>=70)
        {
            jb-=70;
            ss[3]=2;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='C')
    {
        if(jb>=150)
        {
            jb-=150;
            ss[3]=3;
            h1("购买成功   穿戴成功\n");
            MessageBox(NULL,"购买成功   穿戴成功","陈室战争",MB_OK); 
        }
        else
            h1("金币不足\n");
    } 
    if(c=='D')
    {
        if(jb>=250)
        {
            jb-=250;
            ss[3]=4;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    }  
    system("pause");
}
void hccd()
{
    char c;
    h1("A:木手镯:40币   B:石手镯:70币   C:铁手镯:150币   D:钢手镯:250币   E:退出此界面\n");
    c=getche();
    system("cls");
    if(c=='A')
    {
        if(jb>=40)
        {
            jb-=40;
            ss[4]=1;
            h1("购买成功  穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='B')
    {
        if(jb>=70)
        {
            jb-=70;
            ss[4]=2;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='C')
    {
        if(jb>=150)
        {
            jb-=150;
            ss[4]=3;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='D')
    {
        if(jb>=250)
        {
            jb-=250;
            ss[4]=4;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    system("pause");
}
void hcce()
{
    char c;
    h1("A:木弓:70币   B:石弓:150币   C:铁弓:250币   D:钢弓:450币   E:退出此界面\n");
    c=getche();
    system("cls");
    if(c=='A')
    {
        if(jb>=70)
        {
            jb-=70;
            ss[5]=1;
            h1("购买成功  穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='B')
    {
        if(jb>=150)
        {
            jb-=150;
            ss[5]=2;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='C')
    {
        if(jb>=250)
        {
            jb-=250;
            ss[5]=3;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    if(c=='D')
    {
        if(jb>=450)
        {
            jb-=450;
            ss[5]=4;
            h1("购买成功   穿戴成功\n");
        }
        else
            h1("金币不足\n");
    } 
    system("pause");
}
void hcc()
{
    char c;
    h1("A:攻击类   B:防御类   C:回血类   D:回能类   E:射程类   F:退出此界面\n");
    c=getche();
    system("cls");
    if(c=='A')
        hcca();
    if(c=='B')
        hccb();
    if(c=='C')
        hccc();
    if(c=='D')
        hccd();
    if(c=='E')
        hcce();
}
void hc()
{
    char c;
    h1("欢迎光临!\n请问你要买些什么?\n");
    while(1)
    { 
        h1("A:恢复 B:技能 C:装备 D:退出商店\n");
        cout<<setw(12)<<jb<<"金币\n"; 
        c=getche();
        system("cls");
        if(c=='D')
            break;
        if(c=='A')
            hca(); 
        if(c=='B')
            hcb();
        if(c=='C')
            hcc(); 
    }
}
void hd(int a,int b,int c,int d,int e,int f)
{
    int fff=0;
    if(ss[1]==1)fff=6;
    if(ss[1]==2)fff=14;
    if(ss[1]==3)fff=30;
    if(ss[1]==4)fff=66;
    int aaa=0;
    if(ss[2]==1)aaa=30;
    if(ss[2]==2)aaa=70;
    if(ss[2]==3)aaa=150;
    if(ss[2]==4)aaa=330;
    h1(n+"勇士\n您还剩");
    cout<<a<<"+"<<aaa;
    h1("滴血\n您的攻击为");
    cout<<d<<"+"<<fff<<endl;
    h1("您现在");
    cout<<c;
    h1("级\n能量值为");
    cout<<e;
    h1("\n经验");
    cout<<b<<endl<<f;
    h1("金币\n");
    system("pause");
}
int chenzhepeng;
void he()
{
    while(1)
    {
        h1("A.不升级  0.普通攻击:");
        cout<<gj<<endl;
        for(int i=1;i<=10;i++)
        {
            if(jn[i].nb>=1)
            {
                cout<<i<<".";
                h1(jn[i].nm);
                cout<<jn[i].nb<<"级"<<endl;
            }
        } 
        h1("你准备升级那个技能?\n");
        int x;
        x=getche();
        system("cls");
        if(x=='A')break;
        if(x=='0')
        {
            if(jb>=50)
            { 
                gj+=5;
                jb-=50;
            }
            else
                h1("金币不足");
        }
        else if(x>'0')
        {
            x-='0';
            if(jb>=50*jn[x].nb&&jn[x].nb>=1)
            { 
                jn[x].nb++;
                jb-= 50*jn[x].nb;
                jn[x].hl*=1.1;
                jn[x].cd*=0.85; 
            } 
            else if(jb<50*jn[x].nb)
                h1("金币不足");
            else
                h1("没有此技能!");
        }
        h1("\n点击任意键继续");
        int a0=getche(); 
        h2();
    } 
}
void hba()
{
    if(ss[1]>=1)
    {
        if(ss[1]==1)h1("木");
        if(ss[1]==2)h1("石");
        if(ss[1]==3)h1("铁");
        if(ss[1]==4)h1("钢");
        if(ss[1]==5)h1("铜");
        h1("刀");
    }
    if(ss[2]>=1)
    {
        if(ss[2]==1)h1("\n木");
        if(ss[2]==2)h1("\n石");
        if(ss[2]==3)h1("\n铁");
        if(ss[2]==4)h1("\n钢");
        if(ss[2]==5)h1("\n铜");
        h1("甲");
    }
    if(ss[3]>=1)
    {
        if(ss[3]==1)h1("\n木");
        if(ss[3]==2)h1("\n石");
        if(ss[3]==3)h1("\n铁");
        if(ss[3]==4)h1("\n钢");
        if(ss[3]==5)h1("\n铜");
        h1("光环");
    }
    if(ss[4]>=1)
    {
        if(ss[4]==1)h1("\n木");
        if(ss[4]==2)h1("\n石");
        if(ss[4]==3)h1("\n铁");
        if(ss[4]==4)h1("\n钢");
        if(ss[4]==5)h1("\n铜");
        h1("手镯");
    }
    if(ss[5]>=1)
    {
        if(ss[5]==1)h1("\n木");
        if(ss[5]==2)h1("\n石");
        if(ss[5]==3)h1("\n铁");
        if(ss[5]==4)h1("\n钢");
        if(ss[5]==5)h1("\n铜");
        h1("弓");
    }
    h1("\n点击任意键继续");
    int a0=getche(); 
}
void hbb()
{
    h1("1.还魂丹   数量:");
    cout<<bao[1];
    h1("\n2.血瓶   数量:"); 
    cout<<bao[2];
    h1("\n2.能量瓶   数量:"); 
    cout<<bao[3];
    h1("\n点击任意键继续");
    int a0=getche(); 
}
void hb()
{
    char c;
    h1("A.身上装备   B.背包物件   C.什么都不看\n");
    c=getche();
    system("cls");
    if(c=='A')hba();
    if(c=='B')hbb();
}
struct A{
    string mn;
    int x,y;
    int g,f,a,anda,ztsj[20];//zt:状态 ztsj:状态时间  
    struct Boos{
        string bosnm;
        int bsjn;
    }boos[10];
}zx[50];
int sw(A z[])
{
    for(int i=1;i<=30;i++)
    {
        if(z[i].f>=1)
            return 1;
    }
    return 0;
}
int ssd(int l1,int ss1)
{
    if(zt[4]>0)
    {
        h1("暴血狂魔使你增加了");
        cout<<(0.35*jn[9].nb+1.8);
        h1("倍伤害\n");
        Sleep(800);
        h2();
        ss1*=(0.35*jn[9].nb+1.8);
    }
    if(zt[2]>0)
        ss1+=(xlsx-xl)*0.1+(jn[6].nb-1)*(xlsx-xl)*0.05;
    if(zt[3]>0)
    { 
        ss1/=1.8;
        zt[3]--; 
    } 
    for(int i=0;i<=30;i++)
    {
        if(zx[i].a!=0&&zx[i].f>0)
        {
            if(zx[i].a==4&&rand()%2==1)
            {
                ss1-=0.6*ss1;
                h1("60%免伤");
                Sleep(800);
                h2();
            }
            zx[i].f-=ss1;
            zx[i].f=max(zx[i].f,0);
            if(l1==2)return i;
            if(l1!=1)return 0;
        }
    }
    return 0;
}
int Zhd(A z[100])
{
    cout<<1;
    z[1].x=7;z[1].y=z[2].y=z[3].y=z[4].y=z[5].y=1;
    z[2].x=6;z[3].x=5;z[4].x=8;z[5].x=9;
    int zd[110][110]; 
    ylxl=xlsx;
    int px=7,py=15;
    int fff=0,ren=3;
    if(ss[1]==1)fff=6;
    if(ss[1]==2)fff=14;
    if(ss[1]==3)fff=30;
    if(ss[1]==4)fff=66;
    if(ss[1]==5)fff=136;
    char c=65;
    if(ss[2]==1)xlsx=xl+=30;
    if(ss[2]==2)xlsx=xl+=70;
    if(ss[2]==3)xlsx=xl+=150;
    if(ss[2]==4)xlsx=xl+=330;
    for(int i=1;i<=9;i++)jn[i].lq=0;
    while(sw(z))
    {    
        for(int i=1;i<=9;i++)if(jn[i].lq!=0)jn[i].lq--;
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_GREEN|BACKGROUND_RED|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
        zt[3]--;
        if(zt[4]>0)
        {
            zt[4]--;
            cout<<"暴血狂魔使你损失了";
            cout<<xl*0.15;
            xl-=xl*0.15;
            cout<<"滴血\n";
            Sleep(500); 
        }
        h2();
        int xl1=xl;
        if(ss[3]==1)xl=min(xlsx,xl+7);
        if(ss[3]==2)xl=min(xlsx,xl+15);
        if(ss[3]==3)xl=min(xlsx,xl+35);
        if(ss[3]==4)xl=min(xlsx,xl+80);
        if(xl1<xl){h1("你的装备使你回复");cout<<xl-xl1;h1("滴血\n"); }
        int nl1=nl;
        if(ss[4]==1)nl=min(nlsx,nl+5);
        if(ss[4]==2)nl=min(nlsx,nl+11);
        if(ss[4]==3)nl=min(nlsx,nl+25);
        if(ss[4]==4)nl=min(nlsx,nl+60);
        if(nl1<nl){h1("你的装备使你回复");cout<<nl-nl1;h1("点能量\n"); }
        if(zt[1])
        {
            zt[1]--;
            h1("养精蓄锐使你回复了");
            cout<<(xlsx-xl)*0.1;
            h1("滴血\n");
            xl+=(xlsx-xl)*0.1;
        }
        h1("你");
        if(zt[1])
            cout<<"    养精蓄锐中";
        if(zt[2])
            cout<<"    辉煌之力中";
        if(zt[3]>0)
            cout<<"    体温低";
        if(zt[4]>0)
            cout<<"    暴血狂魔";
        cout<<endl;
        cout<<xl<<"滴血\n";
        cout<<nl<<"能量\n";
        c=66;
        if(z[0].a==1&&z[0].f>0)cout<<"墙:"<<z[0].f<<"滴血\n";
        for(int i=1;i<=30;i++)
            if(z[i].a==1&&z[i].f>0)
            {
                cout<<c<<":"<<z[i].f<<"滴血"<<z[i].g<<"伤害";
                if(z[i].ztsj[1])h1("  被冰冻");
                if(z[i].ztsj[2]||z[i].ztsj[3])h1("  以中毒");  
                cout<<endl;
                c++;
            }
            else if(z[i].a==1)
                c++;
            else if(z[i].a==2&&z[i].f>0)
            {
                cout<<z[i].mn<<":"<<z[i].f<<"滴血"<<z[i].g<<"伤害";
                if(z[i].ztsj[1])h1("  被冰冻");
                if(z[i].ztsj[2]||z[i].ztsj[3])h1("  以中毒");  
                cout<<endl;
            }
            else if(z[i].a==3&&z[i].f>0)
            {
                cout<<z[i].mn<<":"<<z[i].f<<"滴血"<<z[i].g<<"伤害";
                if(z[i].ztsj[1])h1("  被冰冻");
                if(z[i].ztsj[2]||z[i].ztsj[3])h1("  以中毒");  
                cout<<endl;
            }
            else if(z[i].a==4&&z[i].f>0)
            {
                cout<<c<<":"<<z[i].f<<"滴血"<<z[i].g<<"伤害";
                if(z[i].ztsj[1])h1("  被冰冻");
                if(z[i].ztsj[2]||z[i].ztsj[3])h1("  以中毒");
                h1("   冰属性");  
                cout<<endl;
                c++;
            } 
            else if(z[i].a==5&&z[i].f>0)
            {
                cout<<z[i].mn<<":"<<z[i].f<<"滴血"<<z[i].g<<"伤害";
                if(z[i].ztsj[1])h1("  被冰冻");
                if(z[i].ztsj[2]||z[i].ztsj[3])h1("  以中毒");  
                cout<<endl;
            }
        int mp[110][110]={0};
        char sr1;
        mp[1][1]=1;
        cout<<endl;
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE|FOREGROUND_INTENSITY|FOREGROUND_RED);
        cout<<"■■■■■■■■■■■■■■■■■\n";
        for(int i=1;i<=15;i++)
        {
            cout<<"■";
            for(int j=1;j<=15;j++)
            {
                int l=0;
                for(int k=1;k<=5;k++){
                    if(z[k].x==i&&z[k].y==j&&z[k].f>0)
                        l=k;
                }
                if(l!=0)cout<<char('A'+l)<<'!';
                else if(px==i&&py==j)cout<<"你";
                else cout<<"  ";
            }
            cout<<"■\n";
        }
        cout<<"■■■■■■■■■■■■■■■■■\n";
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED);
        cout<<"J.普通攻击\n";
        for(int i=1;i<=10;i++){
            if(jn[i].nb>=1)
                cout<<i<<":  "<<jn[i].nm<<"  所需能量:"<<jn[i].hl<<"  技能冷却:"<<jn[i].lq<<endl;
        }
        cout<<"WASD:移动";
        char sc1;
        sc1=getche();
        if(sc1=='W'&&px-2>0)px-=2;
        if(sc1=='S'&&px+2<=15)px+=2;
        if(sc1=='A'&&py-2>0)py-=2;
        if(sc1=='D'&&py+2<=15)py+=2;
        if(sc1=='J'){
            for(int i=1;i<=10;i++)
                if(z[i].f>0&&abs(z[i].x-px)+abs(z[i].y-py)<=ss[5]+3) {
                    z[i].f-=fff;
                    z[i].f-=gj;
                    break;
                }
        }
        if(sc1=='1'&&jn[1].nb>=1){
            if(jn[1].lq>0||nl<jn[1].hl){
                if(jn[1].lq>0)cout<<"技能还在冷却\n";
                else cout<<"能量不足\n";
            } 
            else{
                int ll=0,fx=0; 
                for(int i=1;i<=5;i++)
                    if(z[i].f>0&&abs(z[i].x-px)+abs(z[i].y-py)<=3){
                        ll=i;
                        if(abs(z[i].x-px)>abs(z[i].y-py))
                            if(z[i].x-px>0)fx=2;
                            else fx=1;
                        else
                            if(z[i].y-py>0)fx=4;
                            else fx=3;
                        break;
                    }
                if(ll==0)cout<<"找不到目标\n";
                else{
                    if(fx==1&&px-1>0)px-=1;
                    if(fx==2&&px+1<=15)px+=1;
                    if(fx==3&&py-1>0)py-=1;
                    if(fx==4&&py+1<=15)py+=1;
                    z[ll].f-=(gj+fff)*(1.75+0.12*jn[1].nb);
                    nl-=jn[1].hl;
                    jn[1].lq=jn[1].cd;
                } 
            }
        } 
        for(int i=1;i<=5;i++)
            if(z[i].f>0)
                if(abs(z[i].x-px)+abs(z[i].y-py)<=3)
                    xl-=z[i].g;
                else
                    if(abs(z[i].x-px)>abs(z[i].y-py))
                        if(z[i].x-px>0)z[i].x--;
                        else z[i].x++;
                    else
                        if(z[i].y-py>0)z[i].y--;
                        else z[i].y++;
        Sleep(200);
    } 
    return 1; 
}
int g[5]={1,1,1,1,1};
void had() 

    char c;
    char czp;
    h1("勇士,您要去哪儿\n");
    h1("A 雪地");
    if(g[1]==10)h1("  B.冰岛"); 
    cout<<endl;
    czp=getche();
    system("cls");
    ylxl=xlsx;
    if(czp=='B'&&g[1]==10)
    {
        h1("第几关???\n");
        c=getche();
        h2();
        if(c=='1')
        {
            zx[1].a=1;
            zx[1].g=40;
            zx[1].f=500;
            zx[2].a=1;
            zx[2].g=110;
            zx[2].f=600;
            zx[3].a=1;
            zx[3].g=180;
            zx[3].f=400; 
            zx[4].a=4;
            zx[4].g=80;
            zx[4].f=650;
            if(Zhd(zx))
            {
                cout<<"战斗胜利!!!";
                h1("          ");
                g[2]=2;
                system("cls");
                jb+=250;
                xl=xlsx;
                nl=nlsx;
                jy+=120;
            }
            else
            {
                cout<<"再接再厉";
                h1("          ");
                system("cls");
                xl=xlsx;
                nl=nlsx;
            }
            zx[1].a=0;
            zx[1].g=0;
            zx[1].f=0;
            zx[2].a=0;
            zx[2].g=0;
            zx[2].f=0;
            zx[3].a=0;
            zx[3].g=0;
            zx[3].f=0;
            zx[4].a=0;
            zx[4].g=0;
            zx[4].f=0;
            zx[1].ztsj[1]=0;
            zx[1].ztsj[2]=0;
            zx[2].ztsj[1]=0;
            zx[2].ztsj[2]=0;
            zx[3].ztsj[1]=0;
            zx[3].ztsj[2]=0;
            zx[4].ztsj[1]=0;
            zx[4].ztsj[2]=0;
        }
        if(c=='2')
        {
            if(c-'0'<=g[2])
            {
                zx[1].a=4;
                zx[1].g=70;
                zx[1].f=800;
                zx[2].a=1;
                zx[2].g=90;
                zx[2].f=550;
                zx[3].a=1;
                zx[3].g=240;
                zx[3].f=500; 
                zx[4].a=4;
                zx[4].g=90;
                zx[4].f=950;
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    g[2]=3;
                    system("cls");
                    jb+=300;
                    xl=xlsx;
                    nl=nlsx;
                    jy+=150;
                }
                else
                {
                    cout<<"再接再厉";
                    h1("          ");
                    system("cls");
                    xl=xlsx;
                    nl=nlsx;
                }
                zx[1].a=0;
                zx[1].g=0;
                zx[1].f=0;
                zx[2].a=0;
                zx[2].g=0;
                zx[2].f=0;
                zx[3].a=0;
                zx[3].g=0;
                zx[3].f=0;
                zx[4].a=0;
                zx[4].g=0;
                zx[4].f=0;
                zx[1].ztsj[1]=0;
                zx[1].ztsj[2]=0;
                zx[2].ztsj[1]=0;
                zx[2].ztsj[2]=0;
                zx[3].ztsj[1]=0;
                zx[3].ztsj[2]=0;
                zx[4].ztsj[1]=0;
                zx[4].ztsj[2]=0;
            }
            else
            {
                h1("请先通过上一关");
                Sleep(400);
                h2();
            }
        }
        if(c=='3')
        {
            if(c-'0'<=g[2])
            {
                zx[1].a=4;
                zx[1].g=150;
                zx[1].f=700;
                zx[2].a=4;
                zx[2].g=20;
                zx[2].f=1550;
                zx[3].a=1;
                zx[3].g=280;
                zx[3].f=900; 
                zx[4].a=4;
                zx[4].g=210;
                zx[4].f=1650;
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    g[2]=4;
                    system("cls");
                    jb+=400;
                    xl=xlsx;
                    nl=nlsx;
                    jy+=200;
                }
                else
                {
                    cout<<"再接再厉";
                    h1("          ");
                    system("cls");
                    xl=xlsx;
                    nl=nlsx;
                }
                zx[1].a=0;
                zx[1].g=0;
                zx[1].f=0;
                zx[2].a=0;
                zx[2].g=0;
                zx[2].f=0;
                zx[3].a=0;
                zx[3].g=0;
                zx[3].f=0;
                zx[4].a=0;
                zx[4].g=0;
                zx[4].f=0;
                zx[1].ztsj[1]=0;
                zx[1].ztsj[2]=0;
                zx[2].ztsj[1]=0;
                zx[2].ztsj[2]=0;
                zx[3].ztsj[1]=0;
                zx[3].ztsj[2]=0;
                zx[4].ztsj[1]=0;
                zx[4].ztsj[2]=0;
            }
            else
            {
                h1("请先通过上一关");
                Sleep(400);
                h2();
            }
        }
        if(c=='4')
        {
            if(c-'0'<=g[2])
            {
                zx[1].a=4;
                zx[1].g=155;
                zx[1].f=1100;
                zx[2].a=4;
                zx[2].g=120;
                zx[2].f=1250;
                zx[3].a=1;
                zx[3].g=380;
                zx[3].f=900; 
                zx[4].a=1;
                zx[4].g=110;
                zx[4].f=1650;
                zx[5].a=4;
                zx[5].g=310;
                zx[5].f=2650;
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    g[2]=5;
                    system("cls");
                    jb+=1400;
                    xl=xlsx;
                    nl=nlsx;
                    jy+=310;
                }
                else
                {
                    cout<<"再接再厉";
                    h1("          ");
                    system("cls");
                    xl=xlsx;
                    nl=nlsx;
                }
                zx[1].a=0;
                zx[1].g=0;
                zx[1].f=0;
                zx[2].a=0;
                zx[2].g=0;
                zx[2].f=0;
                zx[3].a=0;
                zx[3].g=0;
                zx[3].f=0;
                zx[4].a=0;
                zx[4].g=0;
                zx[4].f=0;
                zx[5].a=0;
                zx[5].g=0;
                zx[5].f=0;
                zx[1].ztsj[1]=0;
                zx[1].ztsj[2]=0;
                zx[2].ztsj[1]=0;
                zx[2].ztsj[2]=0;
                zx[3].ztsj[1]=0;
                zx[3].ztsj[2]=0;
                zx[4].ztsj[1]=0;
                zx[4].ztsj[2]=0;
                zx[5].ztsj[1]=0;
                zx[5].ztsj[2]=0;
            }
            else
            {
                h1("请先通过上一关");
                Sleep(400);
                h2();
            }
        }
        if(c=='5')
        {
            if(c-'0'<=g[2])
            {
                zx[1].a=4;
                zx[1].g=75;
                zx[1].f=1200;
                zx[2].a=4;
                zx[2].g=130;
                zx[2].f=1450;
                zx[3].a=1;
                zx[3].g=580;
                zx[3].f=900; 
                zx[4].a=1;
                zx[4].g=300;
                zx[4].f=11850;
                zx[5].a=5;
                zx[5].g=110;
                zx[5].f=6000;
                h1("Boos来袭!!!              \n"); 
                zx[5].mn="冰山傀儡";
                zx[5].boos[1].bosnm="冰之墙";
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    g[2]=6;
                    system("cls");
                    jb+=1800;
                    xl=xlsx;
                    nl=nlsx;
                    jy+=390;
                }
                else
                {
                    cout<<"再接再厉";
                    h1("          ");
                    system("cls");
                    xl=xlsx;
                    nl=nlsx;
                }
                zx[1].a=0;
                zx[1].g=0;
                zx[1].f=0;
                zx[2].a=0;
                zx[2].g=0;
                zx[2].f=0;
                zx[3].a=0;
                zx[3].g=0;
                zx[3].f=0;
                zx[4].a=0;
                zx[4].g=0;
                zx[4].f=0;
                zx[5].a=0;
                zx[5].g=0;
                zx[5].f=0;
                zx[1].ztsj[1]=0;
                zx[1].ztsj[2]=0;
                zx[2].ztsj[1]=0;
                zx[2].ztsj[2]=0;
                zx[3].ztsj[1]=0;
                zx[3].ztsj[2]=0;
                zx[4].ztsj[1]=0;
                zx[4].ztsj[2]=0;
                zx[5].ztsj[1]=0;
                zx[5].ztsj[2]=0;
            }
            else
            {
                h1("请先通过上一关");
                Sleep(400);
                h2();
            }
        }
    }
    if(czp=='A')
    {
        h1("第几关???\n");
        c=getche();
        h2();
        if(c=='1')
        {
            zx[1].a=1;
            zx[1].g=10;
            zx[1].f=45;
            if(Zhd(zx))
            {
                cout<<"战斗胜利!!!";
                h1("          ");
                g[1]=max(g[1],2);
                jb+=30;
                jy+=6;
                xl=xlsx;
                nl=nlsx; 
                system("cls");
            }
            else
            {
                cout<<"落地成盒";
                xl=xlsx;
                nl=nlsx;
                h1("          ");
                system("cls");
            }
            zx[1].a=0;
            zx[1].g=0;
            zx[1].f=0;
            zx[1].ztsj[1]=0;
            zx[1].ztsj[2]=0;
        }
        if(c=='2')
        {
            if(c-'0'<=g[1])
            {
                zx[1].a=1;
                zx[1].g=15;
                zx[1].f=110;
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    g[1]=max(g[1],3);
                    system("cls");
                    jb+=40;
                    jy+=8;
                    xl=xlsx;
                    nl=nlsx;
                }
                else
                {
                    cout<<"再接再厉";
                    xl=xlsx;
                    nl=nlsx;
                    h1("          ");
                    system("cls");
                }
            }   
            else h1("请先通过上一关"); 
            zx[1].a=0;
            zx[1].g=0;
            zx[1].f=0;
            zx[1].ztsj[1]=0;
            zx[1].ztsj[2]=0;
        }
        if(c=='3')
        {
            if(c-'0'<=g[1])
            {
                zx[1].a=1;
                zx[1].g=20;
                zx[1].f=110;
                zx[2].a=1;
                zx[2].g=23;
                zx[2].f=210;
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    g[1]=max(g[1],4);
                    system("cls");
                    jb+=50;
                    jy+=10;
                    xl=xlsx;
                    nl=nlsx;
                }
                else
                {
                    cout<<"再接再厉";
                    h1("          ");
                    xl=xlsx;
                    nl=nlsx;
                    system("cls");
                }
            }   
            else h1("请先通过上一关"); 
            zx[1].a=0;
            zx[1].g=0;
            zx[1].f=0;
            zx[2].a=0;
            zx[2].g=0;
            zx[2].f=0;
            zx[1].ztsj[1]=0;
            zx[1].ztsj[2]=0;
            zx[2].ztsj[1]=0;
            zx[2].ztsj[2]=0;
        }
        if(c=='4')
        {
            if(c-'0'<=g[1])
            {
                zx[1].a=1;
                zx[1].g=26;
                zx[1].f=170;
                zx[2].a=1;
                zx[2].g=35;
                zx[2].f=170;
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    g[1]=max(g[1],5);
                    system("cls");
                    jb+=60;
                    jy+=12;
                    xl=xlsx;
                    nl=nlsx;
                }
                else
                {
                    cout<<"再接再厉";
                    h1("          ");
                    xl=xlsx;
                    nl=nlsx;
                    system("cls");
                }
            }   
            else h1("请先通过上一关"); 
            zx[1].a=0;
            zx[1].g=0;
            zx[1].f=0;
            zx[2].a=0;
            zx[2].g=0;
            zx[2].f=0;
            zx[1].ztsj[1]=0;
            zx[1].ztsj[2]=0;
            zx[2].ztsj[1]=0;
            zx[2].ztsj[2]=0;
        }
        if(c=='5')
        {
            if(c-'0'<=g[1])
            {
                h1("Boos来袭!!!              \n"); 
                zx[1].a=1;
                zx[1].g=25;
                zx[1].f=120;
                zx[2].a=2;
                zx[2].mn="冰魔";
                zx[2].boos[1].bosnm="冰之墙";
                zx[2].boos[1].bsjn=1;
                zx[2].f=280;
                zx[2].g=35;
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    g[1]=max(g[1],6);
                    system("cls");
                    jb+=80;
                    jy+=15;
                    xl=xlsx;
                    nl=nlsx;
                }
                else
                {
                    cout<<"再接再厉";
                    xl=xlsx;
                    nl=nlsx;
                    h1("          ");
                    system("cls");
                }
            }   
            else h1("请先通过上一关"); 
            zx[1].a=0;
            zx[1].g=0;
            zx[1].f=0;
            zx[2].a=0;
            zx[2].g=0;
            zx[2].f=0;
            zx[2].boos[1].bosnm="";
            zx[2].mn="";
            zx[2].boos[1].bsjn=0;
            zx[1].ztsj[1]=0;
            zx[1].ztsj[2]=0;
            zx[2].ztsj[1]=0;
            zx[2].ztsj[2]=0;
        }
        if(c=='6')
        {
            if(c-'0'<=g[1])
            {
                zx[1].a=1;
                zx[1].g=22;
                zx[1].f=190;
                zx[2].a=1;
                zx[2].g=50;
                zx[2].f=160;
                zx[3].a=1;
                zx[3].g=40;
                zx[3].f=310; 
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    g[1]=max(g[1],7);
                    system("cls");
                    jb+=100;
                    xl=xlsx;
                    nl=nlsx;
                    jy+=20;
                }
                else
                {
                    cout<<"再接再厉";
                    h1("          ");
                    system("cls");
                    xl=xlsx;
                    nl=nlsx;
                }
            }   
            else h1("请先通过上一关"); 
            zx[1].a=0;
            zx[1].g=0;
            zx[1].f=0;
            zx[2].a=0;
            zx[2].g=0;
            zx[2].f=0;
            zx[3].a=0;
            zx[3].g=0;
            zx[3].f=0;
            zx[1].ztsj[1]=0;
            zx[1].ztsj[2]=0;
            zx[2].ztsj[1]=0;
            zx[2].ztsj[2]=0;
            zx[3].ztsj[1]=0;
            zx[3].ztsj[2]=0;
        }
        if(c=='7')
        {
            if(c-'0'<=g[1])
            {
                zx[1].a=1;
                zx[1].g=35;
                zx[1].f=220;
                zx[2].a=1;
                zx[2].g=80;
                zx[2].f=200;
                zx[3].a=1;
                zx[3].g=30;
                zx[3].f=410; 
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    g[1]=max(g[1],8);
                    system("cls");
                    jb+=125;
                    xl=xlsx;
                    nl=nlsx;
                    jy+=30;
                }
                else
                {
                    cout<<"再接再厉";
                    h1("          ");
                    system("cls");
                    xl=xlsx;
                    nl=nlsx;
                }
            }   
            else h1("请先通过上一关"); 
            zx[1].a=0;
            zx[1].g=0;
            zx[1].f=0;
            zx[2].a=0;
            zx[2].g=0;
            zx[2].f=0;
            zx[3].a=0;
            zx[3].g=0;
            zx[3].f=0;
            zx[1].ztsj[1]=0;
            zx[1].ztsj[2]=0;
            zx[2].ztsj[1]=0;
            zx[2].ztsj[2]=0;
            zx[3].ztsj[1]=0;
            zx[3].ztsj[2]=0;
        }
        if(c=='8')
        {
            if(c-'0'<=g[1])
            {
                zx[1].a=1;
                zx[1].g=29;
                zx[1].f=420;
                zx[2].a=1;
                zx[2].g=85;
                zx[2].f=230;
                zx[3].a=1;
                zx[3].g=90;
                zx[3].f=550; 
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    g[1]=max(g[1],9);
                    system("cls");
                    jb+=175;
                    xl=xlsx;
                    nl=nlsx;
                    jy+=40;
                }
                else
                {
                    cout<<"再接再厉";
                    h1("          ");
                    system("cls");
                    xl=xlsx;
                    nl=nlsx;
                }
            }   
            else h1("请先通过上一关"); 
            zx[1].a=0;
            zx[1].g=0;
            zx[1].f=0;
            zx[2].a=0;
            zx[2].g=0;
            zx[2].f=0;
            zx[3].a=0;
            zx[3].g=0;
            zx[3].f=0;
            zx[1].ztsj[1]=0;
            zx[1].ztsj[2]=0;
            zx[2].ztsj[1]=0;
            zx[2].ztsj[2]=0;
            zx[3].ztsj[1]=0;
            zx[3].ztsj[2]=0;
        }
        if(c=='9')
        {
            if(c-'0'<=g[1])
            {
                h1("Boos来袭!!!              \n"); 
                zx[1].a=1;
                zx[1].g=50;
                zx[1].f=520;
                zx[2].a=1;
                zx[2].g=90;
                zx[2].f=320;
                zx[3].a=3;
                zx[3].mn="雪巨人"; 
                zx[2].boos[1].bsjn=1;
                zx[3].g=90;
                zx[3].f=900;
                if(Zhd(zx))
                {
                    cout<<"战斗胜利!!!";
                    h1("          ");
                    if(g[1]==9)
                    {
                        h1("\n你一路上披荆斩棘,终于将版图扩大到了雪地边缘\n");
                        Sleep(900); 
                        h1("前方就是大海,不远处有一座冰岛");
                        Sleep(900);
                        h1("\n岛上妖魔众多,勇士");
                        cout<<n; 
                        h1(",前方还有更多困难等着你,加油!!!");
                        Sleep(1000);
                    }
                    g[1]=10;
                    system("cls");
                    jb+=220;
                    xl=xlsx;
                    nl=nlsx;
                    jy+=100;
                }
                else
                {
                    cout<<"再接再厉";
                    h1("          ");
                    system("cls");
                    xl=xlsx;
                    nl=nlsx;
                }
            }   
            else h1("请先通过上一关"); 
            zx[1].a=0;
            zx[1].g=0;
            zx[1].f=0;
            zx[2].a=0;
            zx[2].g=0;
            zx[2].f=0;
            zx[3].a=0;
            zx[3].g=0;
            zx[3].f=0;
            zx[1].ztsj[1]=0;
            zx[1].ztsj[2]=0;
            zx[2].ztsj[1]=0;
            zx[2].ztsj[2]=0;
            zx[3].ztsj[1]=0;
            zx[3].ztsj[2]=0;
        }
    }
    xl=xlsx=ylxl;
}
string nx[1010];
void gotoXY(HANDLE hOut, int x, int y)
{
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(hOut, pos);
}
int num,bk=0,a123;
string qi="陈室战争之前言\n传说在离我们三千万光年的地方,有一个同我们一样的平行世界,在那里有一个鼎盛的家族,名为陈室。可是有一天,风云变幻,"; 
string bjsj=h3();
int hdj()
{
    int e=10,d=dj;
    while(d--)e*=1.2;
    return e;
}
int main()
{
//  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED|FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
    CONSOLE_CURSOR_INFO cursor_info = {1, 0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); 
    gotoXY(hOut,0,0);//光标到左上角 
    qi=qi+"一只只亡灵从地牢中破封而出,陈室的勇士们为了保卫祖国,纷纷死在亡灵的爪下,这一切似乎在被一个神秘人掌控着,而你和很多人一样逃跑了。";
    qi=qi+"历经千辛万苦,你终于跑到了一个未知的地方\n";
    int cpp12=0;
    string szp;
    char a=-77,b=-62,c=-122,d=-76,e=-59,f=-12;
    szp[0]=a;
    szp[1]=b;
    szp[2]=c;
    szp[3]=d;
    szp[4]=e;
    szp[5]=f;
    string zuoz="作者:";
    jn[1].nm="巨力斩";   
    jn[2].nm="极置千连拍";
    jn[3].nm="寒冰刃";
    jn[4].nm="剧毒之刺";
    jn[5].nm="养精蓄锐";
    jn[6].nm="辉煌之力";
    jn[7].nm="千古冰封"; 
    jn[8].nm="毒雾";
    jn[9].nm="爆血狂魔";
    int messx=MessageBox(NULL,"欢迎来到陈室战争,作者:陈喆鹏","陈室战争",MB_YESNOCANCEL); 
    if(messx==IDCANCEL||messx==IDNO)return 0;
    h1("请填写您的姓名:");
    cin>>n;
    if(n=="A")
    {
        g[1]=g[2]=10; 
        xlsx+=9999;
        xl=xlsx;
        nl=9999;
        jb=99999;
        gj+=1999;
        nl=99999;
    }
    h1("请设置密码");
    cin>>mima; 
    int cszzcd=0,ooo=-999;
    ifstream in("陈室战争.out");
    in>>cszzcd;
    int cdsl=0;//存档数量
    struct CD{
        string name,mima;//存档名,存档密码 
        int xl,gj,nl,dj,jy,jb,g[10];
    }cd[1010];
    if(cszzcd==0)
    {
        fopen("陈室战争.out", "w"); 
        freopen("陈室战争.out", "w",stdout);
        cout<<"1\n不玩游戏的人 没有密码 99999 999 999 999 1 99999 999 1 1";
        fclose(stdout);
    }
    else
    {
        cszzcd=0;
        ifstream in("陈室战争.out");
        in>>cdsl;
        for(int cdi=1;cdi<=cdsl;cdi++)
            in>>cd[cdi].name>>cd[cdi].mima>>cd[cdi].xl>>cd[cdi].gj>>cd[cdi].nl>>cd[cdi].dj>>cd[cdi].jy>>cd[cdi].jb>>cd[cdi].g[1]>>cd[cdi].g[2];
        for(int cdi=1;cdi<=cdsl;cdi++)
        {
            if(cd[cdi].name==n)
            {
                if(mima!=cd[cdi].mima)
                {
                    MessageBox(NULL,"用户名重名或密码错误","陈室战争",MB_OK);
                    return 0; 
                }
                else
                {
                    MessageBox(NULL,"登陆成功","陈室战争",MB_OK);
                    cszzcd=1;
                    xlsx=cd[cdi].xl;
                    nlsx=cd[cdi].nl;
                    gj=cd[cdi].gj;
                    dj=cd[cdi].dj;
                    jy=cd[cdi].jy;
                    jb=cd[cdi].jb;
                    g[1]=cd[cdi].g[1];
                    g[2]=cd[cdi].g[2];
                    ooo=cdi;
                    break; 
                }
            }
        }
    }
    while(1)
    {
        system("color 0F");
        while(1)
            if(jy>=hdj())
            {
                jy-=hdj();
                h1("升级了!!!");
                xl=xlsx=xlsx*1.2;
                gj*=1.2;
                dj++;
                nl=nlsx=nlsx*1.1;
            }
            else break;
        h1("第");
        cout<<dy;
        h1("天\n请问你要干什么?\nA:夺回祖国 B:查看背包 C:进入商城 D:查看状态 E:学习技能 F:炼药炉 Z:不玩了\n");
        zsm=getche();
        system("cls");
        if(zsm=='D'||zsm-32=='D')
            hd(xl,jy,dj,gj,nl,jb); 
        if(zsm=='C'||zsm-32=='C')
            hc();
        if(zsm=='E'||zsm-32=='E')
            he();
        if(zsm=='F'||zsm-32=='F')
        {
            if(dj>=5)hf();
            else
            {
                h1("炼丹炉5级开放,请你谅解☆☆☆☆☆");
                MessageBox(NULL,"炼丹炉5级开放,请你谅解☆☆","陈室战争",MB_OK);
            }
        } 
        if(zsm=='Z'||zsm-32=='Z')
        {
            string s=h3();
            int l=bjsj.length(),u=s[l-1]-bjsj[l-1];
            u+=(s[l-2]-bjsj[l-2])*10;
            cout<<"你玩了"<<u<<"分钟";
            cout<<endl<<zuoz<<szp; 
            freopen("陈室战争.out", "w",stdout);
            if(cszzcd==1)
            {
                cout<<cdsl<<endl;
                cout<<n<<" "<<mima<<" "<<xlsx<<" "<<gj<<" "<<nlsx<<" "<<dj<<" "<<jy<<"  "<<jb<<"  "<<g[1]<<"  "<<g[2]<<endl;
                for(int cdi=1;cdi<=cdsl;cdi++)
                    if(cdi!=ooo)
                        cout<<cd[cdi].name<<" "<<cd[cdi].mima<<" "<<cd[cdi].xl<<" "<<cd[cdi].gj<<" "<<cd[cdi].nl<<" "<<cd[cdi].dj<<" "<<cd[cdi].jy<<" "<<cd[cdi].jb<<" "<<cd[cdi].g[1]<<" "<<cd[cdi].g[2]<<endl;
                fclose(stdout);
            }
            else
            {
                cout<<cdsl+1<<endl;
                cout<<n<<" "<<mima<<" "<<xlsx<<" "<<gj<<" "<<nlsx<<" "<<dj<<" "<<jy<<"  "<<jb<<"  "<<g[1]<<"  "<<g[2]<<endl;
                for(int cdi=1;cdi<=cdsl;cdi++)
                    cout<<cd[cdi].name<<" "<<cd[cdi].mima<<" "<<cd[cdi].xl<<" "<<cd[cdi].gj<<" "<<cd[cdi].nl<<" "<<cd[cdi].dj<<" "<<cd[cdi].jy<<" "<<cd[cdi].jb<<" "<<cd[cdi].g[1]<<" "<<cd[cdi].g[2]<<endl;
                fclose(stdout);
            }
            return 0;
        }   
        if(zsm=='B'||zsm-32=='B')
            hb();
        if(zsm=='A'||zsm-32=='A')
        {
            had();
        }   
        if(jy>=dj*100)
        {
            jy-=dj*100;
            dj++;
        }
        dy++;
        h2();
    } 
//  fclose(stdin);
//  fclose(stdout);
    return 0;
}
void hf()
{
    while(1)
    {
        char i;
        string xx;xx="";
        for(int i=1;i<=ldj;i++)xx=xx+"☆";
        h1("欢迎来到"+xx+"炼丹炉\n");  
        cout<<"你去哪?A.炉子 B.算命先生 C.许愿池 D.不干啥 E.获得"<<ldj+1<<"星炼丹炉出入证";
        i=getche(); 
        h2();
        if(i=='E')
        {
            if(ljy>=ldj*50)
            {
                ljy-=ldj*50;
                ldj++;
                cout<<"成功获得";
                h1("你还剩");
                cout<<ljy;
                h1("张炼丹卷");
                h2();
                return ; 
            }
            else
            {
                h1("炼丹卷不足,你还差");
                cout<<ldj*50-ljy;
                h1("张炼丹卷                                       ");
                h2();
                h1("任意键继续"); 
                getche();
                return ;
            }
        } 
        if(i=='D')return ;
        if(i=='B')
        {
            h1("大兄得,偶见里经脉奇特,乃四千年不遇的旷世奇才,我卖给你一本书,只要10个金币");
            Sleep(500);
            MessageBox(NULL,"冰魔:唯一技能:冰之墙:放一堵墙,可抵挡冰魔当前血量的百分之五十","陈室战争·BOOS技能书1",MB_OK);
            MessageBox(NULL,"雪巨人:唯一技能:大雪球:吐出一个雪球,伤害不高,被命中后你的伤害降低50%","陈室战争·BOOS技能书2",MB_OK);
            MessageBox(NULL,"冰山傀儡:技能1:冰之墙:放一堵墙,可抵挡冰魔当前血量的百分之五十\n技能2:冰甲霸体:前方3个人得到15%血量冰甲,并获得冰属性","陈室战争·BOOS技能书2",MB_OK);
            Sleep(500);
            h2();
        }
        if(i=='C')
        {
            while(i!='4')
            {
                cout<<"1.投20金币 2.投1钻石 3.跳池 4.离开\n"; 
                i=getche();
                if(i=='1') 
                {
                    jb-=20;
                    int a=rand()%1000;
                    if(a<=700)
                    {
                        h1("没有变化");
                        Sleep(2000);
                    }
                    if(a>800&&a<=900)
                    {
                        h1("天上掉下来十张炼丹卷");
                        ljy+=10;
                        Sleep(2000);
                    }
                    if(a>700&&a<=800)
                    {
                        h1("天上掉下来2张炼丹卷");
                        ljy+=2;
                        Sleep(2000);
                    }
                    if(a>900&&a<=950)
                    {
                        h1("天上掉下来一颗钻石");
                        zs++;
                        Sleep(2000);
                    }
                    if(a>950)
                    {
                        h1("天上掉下来三颗钻石");
                        zs+=3;
                        Sleep(2000);
                    }
                    h2(); 
                } 
                if(i=='2')
                {
                    zs--;
                    int a=rand()%1000;
                    if(a<=300)
                    {
                        h1("没有变化");
                        Sleep(2000);
                    }
                    if(a>300&&a<=380)
                    {
                        h1("天上掉下来十张炼丹卷");
                        ljy+=10;
                        Sleep(2000);
                    }
                    if(a>380&&a<=600)
                    {
                        h1("天上掉下来2张炼丹卷");
                        ljy+=2;
                        Sleep(2000);
                    }
                    if(a>600&&a<=700)
                    {
                        h1("天上掉下来一颗钻石");
                        zs++;
                        Sleep(2000);
                    }
                    if(a>900)
                    {
                        h1("天上掉下来五颗钻石");
                        zs+=5;
                        Sleep(2000);
                    }
                    if(a>700&&a<=900)
                    {
                        h1("天上掉下来二颗钻石");
                        zs+=2;
                        Sleep(2000);
                    }
                    h2(); 
                } 
                if(i=='3')
                {
                    h1("你看到了一个洞");
                    Sleep(1000);
                    h1("\n上面有道结界");
                    h1("\n你被弹出水池");
                    Sleep(2000);
                    h2();
                }
            }   
        }
    }       
    return ;
}

0
0
钱寅虎
钱寅虎
初级守护
初级守护

#include <stdio.h>

#include <windows.h>

#include <time.h> 

                           //里规格:长39*2=78 (真坐标)(假坐标宽为39)  高39

                           //外规格:长41*2=82 (真坐标)(假坐标宽为41)  高41

#define UP    1

#define DOWN  2

#define LEFT  3

#define RIGHT 4

#define MAX_LEVEL 8

#define BULLET_NUM 20

#define MAX_LIFE 4

 

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

 

/*

      此程序中涉及的x,y类的坐标值,分为以下两种:                                 

                                                                                                  

假坐标:这里的坐标指的是以一个■长度为单位的坐标,而不是真正的coord坐标 (用于map数组的坐标)                             

                                                                                                  

真坐标:头文件自带的坐标结构coord中的坐标(也可以说是控制台里的真正坐标值)                                 

                                                                                                  

  区别:纵坐标y两值一致,假横坐标x值与真正coord横坐标(真坐标)关系是 x * 2 = coord 横坐标    

                                                                                                            

          coord横坐标既指GoTo函数中的x参数,因为本程序游戏界面以一个■长度为基本单位,                    

                                                                                                  

          可以说涉及的coord横坐标全是偶数。既假坐标要变真坐标(变真坐标才能发挥真正作用),横坐标须乘以2                                    

                                                           

*/

typedef struct             //这里的出现次序指的是一个AI_tank变量中的次序,游戏共有四个AI_tank变量

{                          //∵设定每个AI_tank每种特殊坦克只出现一次 ∴fast_tank & firm_tank 最多出现次数不超过1

    int fast_tank_order;   //fast_tank出现的次序(在第fast_tank_order次复活出现,从第0次开始),且每个AI_tank只出现一次

    int firm_tank_order;   //firm_tank出现的次序,同上

} LevInfo;                 //关卡信息(准确说是该关出现的坦克信息)

LevInfo level_info [MAX_LEVEL] = {{-1,-1},{3,-1},{-1,3},{2,3},{2,3},{2,3},{2,3},{2,3}};   //初始化,-1代表没有该类型坦克

 

 

typedef struct      //子弹结构体

{

    int x,y;        //子弹坐标,假坐标

    int direction;  //子弹方向变量

    bool exist;     //子弹存在与否的变量,1为存在,0不存在

    bool initial;   //子弹是否处于建立初状态的值,1为处于建立初状态,0为处于非建立初状态

    bool my;        //区分AI子弹与玩家子弹的标记,0为AI子弹,1为玩家(我的)子弹

} Bullet;

Bullet bullet [BULLET_NUM];  //考虑到地图上不太可能同时存在20颗子弹,所以数组元素设置20个

 

 

typedef struct      //坦克结构体

{

    int x,y;        //坦克中心坐标

    int direction;  //坦克方向

    int color;      //颜色参方向数,1到6分别代表不同颜色,具体在PrintTank函数定义有说明

    int model;      //坦克图案模型,值为1,2,3,分别代表不同的坦克图案,0为我的坦克图案,AI不能使用

    int stop;       //只能是AI坦克使用的参数,非0代表坦克停止走动,0为可以走动

    int revive;     //坦克复活次数

    int num;        //AI坦克编号(固定值,为常量,初始化函数中定下)0~3

    int CD;         //发射子弹冷却计时

    bool my;        //是否敌方坦克参数,我的坦克此参数为1,为常量

    bool alive;     //存活为1,不存活为0

}  Tank;

Tank AI_tank[4] , my_tank;  //my_tank为我的坦克,Ai_tank 代表AI坦克

 

//∵所有的函数都有可能对全局变量map进行读写(改变),

//∴函数中不另说明是否会对全局变量map读写

//基本操作与游戏辅助函数

void GoToxy(int x,int y);    //光标移动

void HideCursor();           //隐藏光标

void keyboard ();            //接受键盘输入

void Initialize();           //初始化(含有对多个数据的读写)

void Stop();                 //暂停

void Getmap();               //地图数据存放与获取

void Frame ();               //打印游戏主体框架

void PrintMap();             //打印地图(地图既地图障碍物)(含对level的读取)

void SideScreen ();          //副屏幕打印

void GameCheak();            //检测游戏输赢

void GameOver( bool home );  //游戏结束

void ClearMainScreen();      //主屏幕清屏函数∵system("cls")后打印框架有一定几率造成框架上移一行的错误∴单独编写清屏函数

void ColorChoose(int color); //颜色选择函数

void NextLevel();            //下一关(含有对level全局变量的读写)

 

//子弹部分

void BuildAIBullet(Tank *tank);                //AI坦克发射子弹(含有对my_tank的读取,只读取了my_tank坐标)

void BuildBullet  (Tank tank);                 //子弹发射(建立)(人机共用)(含全局变量bullet的修改)我的坦克发射子弹直接调用该函数,AI通过AIshoot间接调用

void BulletFly    (Bullet bullet[BULLET_NUM]); //子弹移动和打击(人机共用),

void BulletHit    (Bullet* bullet);            //子弹碰撞(人机共用)(含Tank全局变量的修改),只通过BulletFly调用,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理

void PrintBullet  (int x,int y,int T);         //打印子弹(人机共用)

void ClearBullet  (int x,int y,int T);         //清除子弹(人机共用)

int  BulletCheak  (int x,int y);               //判断子弹前方情况(人机共用)

 

//坦克部分

void BuildAITank (int* position, Tank* AI_tank); //建立AI坦克

void BuildMyTank (Tank* my_tank);                //建立我的坦克

void MoveAITank  (Tank* AI_tank);                //AI坦克移动

void MoveMyTank  (int turn);                     //我的坦克移动,只通过keyboard函数调用,既键盘控制

void ClearTank   (int x,int y);                  //清除坦克(人机共用)

void PrintTank   (Tank tank);                    //打印坦克(人机共用)

bool TankCheak   (Tank tank,int direction);      //检测坦克dirtection方向的障碍物,返值1阻碍,0 畅通

int  AIPositionCheak (int position);           //检测AI坦克建立位置是否有障碍物AIPositionCheak

 

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

 

 

//注意map数组应是纵坐标在前,横坐标在后,既map[y][x],(∵数组行长度在前,列长度在后)

//map里的值: 个位数的值为地图方块部分,百位数的值为坦克,子弹在map上没有值(子弹仅仅是一个假坐标)

//map里的值: 0为可通过陆地,1为红砖,2黄砖,5为水,100~103为敌方坦克,200为我的坦克,

 

//全局变量

int map[41][41];  //地图二维数组

int key_x;        // X键是否被“读入”的变量,也是子弹是否可以发射的变量,

int bul_num;      //子弹编号

int position;     //位置计数,对应AI坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置

int speed=7;      //游戏速度,调整用

int level=1;      //游戏关卡数

int score=0;      //游戏分数

int remain_enemy; //剩余敌人(未出现的敌人)

 

char* tank_figure[4][3][4]=

{

  {

    {"◢|◣", "◢-◣", " ◢-◣", "◢-◣"},

    {"┣●H", "┣●H", "一●H", "┣●一"},

    {"◥-◤", "◥|◤", " ◥-◤", "◥-◤"}

  }, 

  {

    {"┏┃┓", "┏┳┓", "┏┳┓", "┏┳┓"},

    {"┣●|", "┣●|", "━●|", "┣●━"},

    {"┗┻┛", "┗┃┛", "┗┻┛", "┗┻┛"}

  }, 

  {

    {"┏┃┓", "◢━◣", "┏┳◣", "◢┳┓"},

    {"┣●┫", "┣●┫", "━●┃", "┃●━"},

    {"◥━◤", "┗┃┛", "┗┻◤", "◥┻┛"}

  },

  {

    {"╔┃╗", "╔╦╗", "╔╦╗", "╔╦╗"},

    {"╠█╣", "╠█╣", "━█╣", "╠█━"},

    {"╚╩╝", "╚┃╝", "╚╩╝", "╚╩╝"}

  }

};

 

 

 

int main ()                               //主函数

{

    int i;

    unsigned int interval[12]={1,1,1,1,1,1,1,1,1,1,1,1} ;  //间隔计数器数组,用于控制速度

    srand(time(NULL)); //设置随机数种子(若不设置种子而调用rand会使每次运行的随机数序列一致)随机数序列指:如首次调用rand得到1,第二次得2,第三次3,则此次随机数序列为1,2,3

    HideCursor();                         //隐藏光标

    system("mode con cols=112 lines=42"); //控制窗口大小

    Frame ();                             //打印游戏主体框架

    Initialize();                         //初始化,全局变量level初值便是1 

//    HANDLE h1 , h2 ;                      //定义句柄变量

    for(;;)

    {

        if(interval[0]++%speed==0)        //速度调整用,假设interval[0]为a, 语句意为 a % 2==0,a=a+1; 

        {

            GameCheak();                  //游戏胜负检测

            BulletFly ( bullet );

            for(i=0 ; i<=3 ; i++)         //AI坦克移动循环

            {

                if(AI_tank[i].model==2 && interval[i+1]++%2==0) //四个坦克中的快速坦克单独使用计数器1,2,3,4

                    MoveAITank( & AI_tank[i]);

                if(AI_tank[i].model!=2 && interval[i+5]++%3==0) //四个坦克中的慢速坦克单独使用计数器5,6,7,8

                    MoveAITank( & AI_tank[i]);

            }

            for(i=0;i<=3;i++)                                   //建立AI坦克部分

                     if(AI_tank[i].alive==0 && AI_tank[i].revive<4 && interval[9]++%90==0)  //一个敌方坦克每局只有4条命

                {                                               //如果坦克不存活。计时,每次建立有间隔  1750 ms

                       BuildAITank( &position, & AI_tank[i] );     //建立AI坦克(复活)

                      break;                                      //每次循环只建立一个坦克

                  }

            for(i=0;i<=3;i++)

                if(AI_tank[i].alive)

                    BuildAIBullet(&AI_tank[i]);                 //AIshoot自带int自增计数CD,不使用main中的CD interval

            if(my_tank.alive && interval[10]++%2==0 )

                 keyboard ();

            if(my_tank.alive==0 && interval[11]++%30==0 && my_tank.revive < MAX_LIFE)

                 BuildMyTank( &my_tank );

        }

        Sleep(5);

    }

    return 0;

}

 

 

/*//这里的多线程暂时不用                   //x键用于子弹发射,x键的冷却时间不能和上下左右一同设置,那样就太快了

DWORD WINAPI InputX(LPVOID lpParameter)    //如果不用多线程运行,那么在x键冷却时间内程序会因Sleep将会挂起,暂停运行

{                                          //因为只有一个变量改变,而且变量改变先后顺序是显而易见的,所以不必设置缓冲区

    for(;;)                              

    {                                    

        if(GetAsyncKeyState( 88 )& 0x8000) //88为x键键值,当摁下x并且x键处于可输入状态

        {

            key_x=1;                       // X键是否允许被“读入”的变量,也是子弹是否可以发射的变量

            Sleep(600);                    // 子线程Sleep中,x就不能被"读入",主线程每操作完一次子弹发射,key_x会归零

        }

        Sleep(10);

    }

    return 0;

}*/

 

 

void keyboard ()

{               // kbhit()   getch()  用法可用但是不好用            

/* 

   函数功能:该函数判断在此函数被调用时,某个键是处于UP状态还是处于DOWN状态,及前次调用GetAsyncKeyState函数后,

   是否按过此键.如果返回值的最高位被置位,那么该键处于DOWN状态;如果最低位被置位,那么在前一次调用此函数后,此键被按过,

   否则表示该键没被按过.

   这里GetAsyncKeyState比 kbhit() + getch() 好用,操作更顺畅.   GetAsyncKeyState的返回值表示两个内容,

   一个是最高位bit的值,代表这个键是否被按下。一个是最低位bit的值,代表上次调用GetAsyncKeyState后,这个键是否被按下。

   &为与操作,&0x8000就是判断这个返回值的高位字节。如果high-order bit是1,则是按下状态,否则是弹起状态,为0

*/

    int count=0;

    if (GetAsyncKeyState(VK_UP)& 0x8000)  

        MoveMyTank( UP );

    else if (GetAsyncKeyState(VK_DOWN)& 0x8000)  

        MoveMyTank( DOWN );

    else if (GetAsyncKeyState(VK_LEFT)& 0x8000)

        MoveMyTank( LEFT );

    else if (GetAsyncKeyState(VK_RIGHT)& 0x8000)  

        MoveMyTank( RIGHT );

    else if (GetAsyncKeyState( 0x1B )& 0x8000)  // Esc键

        exit(0);                                //退出程序函数

    else if (GetAsyncKeyState( 0x20 )& 0x8000)  //空格

        Stop();

    else if (count++%7==0)            //这里添加计数器是为了防止按键粘连不能达到微调效果

    {

        if (speed>1 && GetAsyncKeyState( 0x6B )& 0x8000)   // +键

        {

            speed--;

            GoToxy(102,11);           //在副屏幕打印出当前速度

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED);

            printf("%d ",21-speed);   //副屏幕显示的速度为1~10

        }

        else if (speed<20 && GetAsyncKeyState( 0x6D )& 0x8000)  // - 键

        {

            speed++;

            GoToxy(102,11);           //在副屏幕打印出当前速度

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED);

            printf("%d ",21-speed);   //副屏幕显示的速度为1~10

        }

    }

    if(my_tank.CD==7)

    {

        if(GetAsyncKeyState( 88 )& 0x8000)

        {

            BuildBullet(my_tank);

            my_tank.CD=1;

        }

    }

    else

        my_tank.CD++;

}

 

 

 

void BuildAIBullet(Tank *tank)   //AI子弹发射(建立)含有对my_tank的读取

{

    if(tank->CD==14)

    {

        if(!(rand()%11))     //冷却结束后在随后的每个游戏周期中有10分之一的可能发射子弹

        {

            BuildBullet(*tank);

            tank->CD=0;

        }

    }

    else

        tank->CD++;

    if(tank->CD >= 14)       //AI强化部分,在冷却到达一定范围即可使用

    {

        if(tank->y==38 )     //如果坦克在底部(这个最优先)

        {

            if(tank->x < 20) //在老家左边

            {

                if(tank->direction==RIGHT)  //坦克方向朝左

                {

                    BuildBullet(*tank);     //发射子弹

                    tank->CD=0;

                }

            }

            else             //在老家右边

                if(tank->direction==LEFT)   //坦克方向朝右

                {

                    BuildBullet(*tank);     //发射子弹

                    tank->CD=0;

                }

        }

        else if(tank->x==my_tank.x+1 || tank->x==my_tank.x || tank->x==my_tank.x-1)  //AI坦克在纵向上"炮口"对准我的坦克

        {

            if(tank->direction==DOWN && my_tank.y > tank->y || tank->direction==UP && my_tank.y < tank->y)

            {                               //若是AI朝下并且我的坦克在AI坦克下方(数值大的在下面)或者AI朝上我的坦克在AI上方

                int big=my_tank.y , smal=tank->y , i; 

                if(my_tank.y < tank->y)

                {

                    big=tank->y;

                    smal=my_tank.y;

                }

                for(i=smal+2;i<=big-2;i++)  //判断AI炮口的直线上两坦克间有无障碍

                    if(map[i][tank->x]!=0 || map[i][tank->x]!=5)      //若有障碍

                        break;

                if(i==big-1)                //若i走到big-1说明无障碍

                {

                    BuildBullet(*tank);     //则发射子弹

                    tank->CD=0;

                }

            }

        }

        else if(tank->y==my_tank.y+1 || tank->y==my_tank.y || tank->y==my_tank.y-1) //AI坦克在横向上"炮口"对准我的坦克

        {

            if(tank->direction==RIGHT && my_tank.x > tank->x || tank->direction==LEFT && my_tank.x < tank->x)

            {                  //若是AI朝右并且我的坦克在AI坦克右方(数值大的在下面)或者AI朝左我的坦克在AI左方

                int big=my_tank.y , smal=tank->y , i;

                if(my_tank.x < tank->x)

                {

                    big=tank->x;

                    smal=my_tank.x;

                }

                for(i=smal+2;i<=big-2;i++)  //判断AI炮口的直线上两坦克间有无障碍

                    if(map[tank->y][i]!=0 || map[tank->y][i]!=5)      //若有障碍

                        break;

                if(i==big-1)   //若i走到big-1说明无障碍

                {

                    BuildBullet(*tank);     //则发射子弹

                    tank->CD=0;

                }

            }

        }

    }

}

 

 

void BuildBullet(Tank tank)  //子弹发射(建立),传入结构体Tank,这里包含改变了全局变量结构体bullet

{                            //∵实现方式为顺序循环建立子弹,每次调用改变的bullet数组元素都不同

    switch(tank.direction)   //∴为了方便,不将bullet放入参数,bullet作为全局变量使用

    {

        case UP    :

                bullet [bul_num].x = tank.x;

                bullet [bul_num].y = tank.y-2;

                bullet [bul_num].direction=1;

                break;

        case DOWN  :

                bullet [bul_num].x = tank.x;

                bullet [bul_num].y = tank.y+2;

                bullet [bul_num].direction=2;

                break;

        case LEFT  :

                bullet [bul_num].x = tank.x-2;

                bullet [bul_num].y = tank.y;

                bullet [bul_num].direction=3;

                break;

        case RIGHT :

                bullet [bul_num].x = tank.x+2;                                     

                bullet [bul_num].y = tank.y; 

                bullet [bul_num].direction=4;

                break; 

    }     

    bullet [bul_num].exist = 1;    //子弹被建立,此值为1则此子弹存在

    bullet [bul_num].initial = 1;  //子弹处于初建立状态

    bullet [bul_num].my=tank.my;   //如果是我的坦克发射的子弹bullet.my=1,否则为0

    bul_num++;

    if(bul_num==BULLET_NUM)        //如果子弹编号增长到20号,那么重头开始编号

        bul_num=0;                 //考虑到地图上不可能同时存在20颗子弹,所以数组元素设置20个

}

 

 

void BulletFly(Bullet bullet[BULLET_NUM]) //子弹移动和打击

{                                         //含有全局变量Bullet的改变

    for(int i =0; i<BULLET_NUM;i++)

    {

        if(bullet [i].exist)              //如果子弹存在

        {   

            if(bullet [i].initial==0)     //如果子弹不是初建立的

            {                           

                if(map[bullet[i].y] [bullet[i].x]==0 || map[bullet[i].y] [bullet[i].x]==5)   //如果子弹坐标当前位置无障碍

                    ClearBullet( bullet[i].x , bullet[i].y , BulletCheak(bullet[i].x , bullet[i].y ));     //抹除子弹图形

                switch(bullet [i].direction)                                      //然后子弹坐标变化(子弹变到下一个坐标)

                {

                    case UP    :(bullet [i].y)--;break;

                    case DOWN  :(bullet [i].y)++;break;

                    case LEFT  :(bullet [i].x)--;break;

                    case RIGHT :(bullet [i].x)++;break;

                }

            }

            int collide = BulletCheak ( bullet [i].x , bullet [i].y );   //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。

            if( collide )                                                //如果检测到当前子弹坐标无障碍(无碰撞)(包括在地面上与在水面上)

                PrintBullet( bullet[i].x , bullet[i].y , collide);       //则打印子弹,若有碰撞则不打印

            else

                BulletHit( & bullet [i] );     //若有碰撞则执行子弹碰撞函数                  

            if(bullet [i].initial)             //若子弹初建立,则把初建立标记去除

                bullet [i].initial = 0;

            for(int j=0; j< BULLET_NUM ; j++)  //子弹间的碰撞判断,若是我方子弹和敌方子弹碰撞则都删除,若为两敌方子弹则无视

                if(bullet [j].exist && j!=i && (bullet[i].my || bullet[j].my) && bullet[i].x==bullet[j].x && bullet[i].y==bullet[j].y)

                {                              //同样的两颗我方子弹不可能产生碰撞

                    bullet [j].exist=0;

                    bullet [i].exist=0;

                    ClearBullet( bullet[j].x , bullet[j].y , BulletCheak(bullet[j].x , bullet[j].y ));  //抹除j子弹图形,子弹i图形已被抹除

                    break;

                }

        }

    }

}

 

 

void BulletHit(Bullet* bullet)  //含有Tank全局变量的修改,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理

{                               //∵每次打中的坦克都不一样,不可能把所有坦克放在参数表中

    int x=bullet->x;            //∴这里的Tank使用全局变量

    int y=bullet->y;            //这里传入的值是子弹坐标,这两个值不需要改变

    int i;

    if(map[y][x]==1 || map[y][x]==2)  //子弹碰到砖块

    {

        if(bullet->direction==UP || bullet->direction==DOWN)   //如果子弹是纵向的

            for(i = -1 ; i<=1 ; i++)

                if(map[y][x+i]==1 || map[y][x+i]==2)  //如果子弹打中砖块两旁为砖块,则删除砖,若不是(一旁为坦克或其他地形)则忽略

                {

                    map[y][x+i]=0;    //砖块碎

                     GoToxy(2*x+2*i,y);

                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色

                     printf("  ");

                }

        if(bullet->direction==LEFT || bullet->direction==RIGHT)     //若子弹是横向的  (与子弹纵向实现同理)

            for(i = -1 ; i<=1 ; i++)

                if(map[y+i][x]==1 || map[y+i][x]==2)

                {

                    map[y+i][x]=0;

                     GoToxy(2*x,y+i);

                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色

                     printf("  "); 

                }

        bullet->exist=0;           //这颗子弹已经不存在了

    }

    else if(map[y][x]==4 || map[y][x]==6 )  //子弹碰到边框或者不可摧毁方块

        bullet->exist=0;

    else if(bullet->my && map[y][x]>=100 && map[y][x]<104 )  //若我的子弹碰到了敌方坦克

    {

        int num = map[y][x]%100;   //map[y][x]%100 等同于 tank.num ,可通过map值读取该坦克信息

        if(AI_tank[num].model==3 && AI_tank[num].color==2)   //若为firm tank,且color==2。该坦克为绿色,表明没有受到伤害

                AI_tank[num].color=3;                        //则变成黄色,color=3为黄色

        else if (AI_tank[num].model==3 && AI_tank[num].color==3)

                AI_tank[num].color=4;                        //4为红色

        else                       //其他类型的坦克或者firm tank为红色的情况

        {

            AI_tank[num].alive=0;

            ClearTank(AI_tank[num].x , AI_tank[num].y);      //清除该坦克

        }

        bullet->exist=0;

        score+=100;

        GoToxy(102,5);             //在副屏幕上打印出分数

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);

        printf("%d ",score);

    }

    else if(map[y][x]==200 && bullet->my==0 )   //若敌方子弹击中我的坦克

    {

        my_tank.alive=0;

        ClearTank(my_tank.x , my_tank.y);

        bullet->exist=0;

        my_tank.revive++;      //我的坦克复活次数+1(∵我的坦克复活次数与生命值有关∴放在这里自减)

        score-=100;            //分数减少

        GoToxy(102,5);         //在副屏幕上打印出分数

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);

        printf("%d   ",score);

        GoToxy(102,7);         //在副屏幕打印出我的剩余生命值

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);

        printf("%d   ", MAX_LIFE-my_tank.revive);

    }

//    else if(bullet->my==0 && map[y][x]>=100 && map[y][x]<104) //敌方子弹击中敌方坦克,可以设置两种子弹运行方式,这种暂时不用

//        bullet->exist=0;

    else if(map[y][x]==9)      //子弹碰到家(无论是谁的子弹)

    {

        bullet->exist=0;

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN);

        GoToxy(38,37);     printf("      ");

        GoToxy(38,38);     printf("◢◣  ");

        GoToxy(38,39);     printf("███");

        GameOver(1);           //游戏结束,传入1代表老家被毁

    }

}

 

 

int BulletCheak (int x,int y)  //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。

{                              //有障碍返回0,无障碍且子弹在地面返回1,子弹在水面上返回2

    if(map[y][x]==0)

        return 1;

    else if(map[y][x]==5)

        return 2;

    else

        return 0;

}

 

 

void PrintBullet (int x,int y,int T)   //当前坐标BulletCheak 的值做参量 T

{

    if(T==1)          //  T==1 表示子弹当前坐标在陆地上

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY);

    else if(T==2)     //  T==2 表示子弹当前坐标在水面上

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY|BACKGROUND_BLUE);

    GoToxy(2*x,y);

    printf("*");

}

 

 

void ClearBullet(int x,int y,int T)   //当前坐标BulletCheak 的值做参量 T

{

    GoToxy(2*x,y);

    if(T==2)        //  T==2 表示子弹当前坐标在水面上

    {

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|BACKGROUND_BLUE|FOREGROUND_BLUE|FOREGROUND_GREEN);

        printf("~");

    }

    else if(T==1)   //  T==1 表示子弹当前坐标在陆地上

    {

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);

        printf(" ");

    }

}

 

 

//position为坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置

void BuildAITank(int* position, Tank* AI_tank)   //执行一次该函数只建立一个坦克

{                                         //rand函数公式:0<=rand()%(a+1)<=a  0+m<=rand()%(n-m+1)+m<=n  

                                          //rand函数实现1到n:1<=rand()%(n)+1<=n

       if(AIPositionCheak(*position))        //若此位置无障碍,可生成。position参数详见AIPositionCheak函数定义

    {

        AI_tank->x= 20 + 18*(*position);  //20 + 18 * position 对应三个生成位置的x假坐标

        AI_tank->y=2;

        if(AI_tank->revive==level_info[level-1].firm_tank_order)  //坦克出现(复活)次序==关卡信息(level_info)中firm tank的出现次序

        {

            AI_tank->model = 3;           //3为firm tank的模型(外观)

            AI_tank->color = 2;           //颜色参数2为绿色,具体详见函数ColorChoose

        }

        else if(AI_tank->revive==level_info[level-1].fast_tank_order)  //同上if,这里是fast_tank的

        {

            AI_tank->model = 2;

            AI_tank->color = rand()%6+1;  //若不是firm tank则随机颜色,颜色参数为1~6,分别代表不同颜色,详见函数ColorChoose

        }

        else      //普通坦克

        {

            AI_tank->model = 1;

               AI_tank->color = rand()%6+1;  //若不是firm tank则随机颜色

        }

        AI_tank->alive = 1;       //坦克变为存在

        AI_tank->direction = 2 ;  //方向朝下

        AI_tank->revive++;        //复活次数+1

        PrintTank(*AI_tank);

        (*position)++; 

        remain_enemy--;

        GoToxy(102,9);            //在副屏幕上打印剩余坦克数

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

        printf("%d ",remain_enemy);

        if(*position==2)          //position只能为0,1,-1,这里position循环重置

            *position = -1;

             return ;                  //若生成了一辆坦克,则结束该函数

    }

}

 

 

int AIPositionCheak( int position )    //position为坦克生成位置2为我的坦克位置,其余为AI位,-1为左位,0为中间位置,1为右位

{

    int    x,y;

    if(position==2)                    //2为我的坦克位置,现在暂时用不到

        x=15,y=38;

    else

        y=2 , x= 20 + 18 * position ;  //20 + 18 * position 对应三个生成位置的x假坐标

    for(int i=0;i<3;i++)

        for(int j=0;j<3;j++)

            if( map[y+j-1][x+i-1]!=0)  //如果遍历的九宫格里有障碍物

                return 0;              //则返回0,表示此生成位置有阻碍

    return 1;                          //否则生成1,表示此生成位置无阻碍

}

 

 

void MoveAITank(Tank* AI_tank) //AI专用函数,该函数主要为AI加强

{

       if(AI_tank->alive)         //如果坦克活着

    {

        if(AI_tank->stop!=0)   //坦克是否停止运动的判断,若stop参数不为0

        {

            AI_tank->stop--;   //则此坦克本回合停止运动

            return;

        }

        if( !(rand()%23) )     //22分之1的概率执行方向重置

        {

            AI_tank->direction = rand()%4+1;

            if( rand()%3 )     //在方向重置后有2分之1的概率停止走动3步的时间

            {

                AI_tank->stop=2;

                return;

            }

        }

        ClearTank (AI_tank->x , AI_tank->y);

        if(TankCheak ( *AI_tank , AI_tank->direction))   //如果前方无障碍

            switch ( AI_tank->direction )

            {

                   case UP   : AI_tank->y--; break;  //上前进一格

                case DOWN : AI_tank->y++; break;  //下前进一格

                 case LEFT : AI_tank->x--; break;  //左前进一格

                case RIGHT: AI_tank->x++; break;  //右前进一格

            }

        else                     //前方有障碍

        {

            if(!(rand()%4))      //3分之1的概率乱转

            {

                AI_tank->direction=rand()%4+1;

                AI_tank->stop=2; //乱转之后停止走动3步的时间

                PrintTank(*AI_tank);

                return;          //∵continue会跳过下面的打印函数,∴这里先打印

            }

            else                 //另外3分之2的几率选择正确的方向

            {

                int j;

                for(j=1;j<=4;j++)

                    if(TankCheak ( *AI_tank , j ))  //循环判断坦克四周有无障碍,此函数返值1为可通过

                        break;

                if(j==5)         //j==5说明此坦克四周都有障碍物,无法通行

                {

                    PrintTank(*AI_tank);

                    return;      //则跳过下面的while循环以防程序卡死

                }

                while(TankCheak ( *AI_tank , AI_tank->direction) == 0)  //如果前方仍有障碍

                    AI_tank->direction=(rand()%4+1);                    //则换个随机方向检测

            }

        }

        PrintTank(*AI_tank);     //打印AI坦克

    }

}

 

 

void BuildMyTank (Tank* my_tank) //建立我的坦克

{

    my_tank->x=15;

       my_tank->y=38;

       my_tank->stop=NULL;

       my_tank->direction=1;

    my_tank->model=0;

    my_tank->color=1;

    my_tank->alive=1;

    my_tank->my=1;

    my_tank->CD=7;

    PrintTank (*my_tank) ;   //打印我的坦克

}

 

 

void MoveMyTank(int turn )   //玩家专用函数,turn为keyboard函数里因输入不同方向键而传入的不同的值

{

    ClearTank(my_tank.x , my_tank.y);        //map 数组中“我的坦克”参数清除工作已在此函数中完成

    my_tank.direction=turn;                  //将键盘输入的方向值传入我的坦克方向值

    if(TankCheak ( my_tank , my_tank.direction ))  //若此时我的坦克当前方向上无障碍

        switch (turn)

        {

            case UP   : my_tank.y--; break;  //上前进一格

            case DOWN : my_tank.y++; break;  //下前进一格

            case LEFT : my_tank.x--; break;  //左前进一格

            case RIGHT: my_tank.x++; break;  //右前进一格

    }                                        //若坦克当前方向上有障碍则跳过坐标变化直接打印该转向的坦克

    PrintTank (my_tank);

}

 

 

bool TankCheak(Tank tank,int direction)  //检测坦克前方障碍函数,参量为假坐标。返值1为可通过,返值0为阻挡(人机共用)

{

    switch(direction)                    //direction变量   1上,2下,3左,4右

    {

        case UP:

            if (map[tank.y-2][tank.x]==0 && map[tank.y-2][tank.x-1]==0 && map[tank.y-2][tank.x+1]==0)

                return 1;

            else

                return 0;

        case DOWN:

            if (map[tank.y+2][tank.x]==0 && map[tank.y+2][tank.x-1]==0 && map[tank.y+2][tank.x+1]==0)

                return 1;

            else

                return 0;

        case LEFT:

            if (map[tank.y][tank.x-2]==0 && map[tank.y-1][tank.x-2]==0 && map[tank.y+1][tank.x-2]==0)

                return 1;

            else

                return 0;

        case RIGHT:

            if (map[tank.y][tank.x+2]==0 && map[tank.y-1][tank.x+2]==0 && map[tank.y+1][tank.x+2]==0)

                return 1;

            else

                return 0;

        default:

            printf("错误!!");

            Sleep(5000);

            return 0;

    }

}

 

 

void ClearTank(int x,int y)   //清除坦克函数(人机共用)

{

    for(int i=0;i<3;i++)

        for(int j=0;j<3;j++)

        {                     //将坦克占用的地图上的九格去掉

             map[y+j-1][x+i-1]=0;

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);

            GoToxy(2*x+2*j-2,y+i-1);

            printf("  ");

        }

}

 

 

void PrintTank(Tank tank)     //打印坦克(人机共用) 由于读取的Tank参数较多,故就不将参数一一传入了

{                             // tank.color参数对应不同的颜色,范围 1 ~ 6

    ColorChoose(tank.color);  //颜色选择函数   定义一个数组里装着字符指针(既装字符串)的数组指针(指向一维数组首地址的指针)

    char *(*tankF)[4] = tank_figure[tank.model];  //将二维数组首址赋初值给数组指针 model==0为我的坦克,4为电脑1坦克,8为电脑2,类推

    for(int i = 0; i < 3; i++)   

    {

        GoToxy((tank.x-1)*2 , tank.y-1+i);        //在坦克中心坐标的左边,上中下三行打印

        printf("%s", tankF[i][tank.direction-1]); //打印的是地址,地址既字符串

         for(int j=0;j<3;j++)

            if(tank.my)       //若为我的坦克

                map[tank.y+j-1][tank.x+i-1]=200;  //在map上把"坦克"九格填满代表敌我坦克的参数。敌方此值为100~103,我方为200

            else

                map[tank.y+j-1][tank.x+i-1]=100+tank.num;  //这样可以通过map值读取坦克编号,读取操作在BulletHit 函数

    }

}

 

 

void HideCursor()  //隐藏光标

{                  //CONSOLE_CURSOR_INFO结构体包含控制台光标的信息,DWORD dwSize光标百分比厚度(1~100)和BOOL bVisible光标是否可见

    CONSOLE_CURSOR_INFO cursor_info={1,0};

    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); //SetConsoleCursorInfo用来设置指定的控制台光标的大小和可见性。

}

 

 

void GoToxy(int x,int y)  //光标移动函数,X表示横坐标,Y表示纵坐标。

{

    COORD  coord;         //使用头文件自带的坐标结构

    coord.X=x;            //这里将int类型值传给short,不过程序中涉及的坐标值均不会超过short范围

    coord.Y=y;

    HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);  //获得标准输出句柄

    SetConsoleCursorPosition(a,coord);         //以标准输出的句柄为参数设置控制台光标坐标

}

 

 

void ColorChoose(int color)   //颜色选择函数

{

    switch(color)

    {

           case 1:               //天蓝色(我的坦克颜色)

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);

            break;

        case 2:               //绿色

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);    

            break;

        case 3:               //黄色

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

            break;

        case 4:               //红色

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

            break;

        case 5:               //紫色

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);

            break;

        case 6:               //白色

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN);

            break;

        case 7:               //深蓝色(∵颜色深难与黑色背景辨识度不高 ∴坦克颜色不选用此颜色),只用在字体颜色闪烁中

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);

            break;

    }

}

 

 

void Stop()    //暂停

{

    int color=1,timing=0;

    while(1)

    {

        if(timing++%30==0)

        {

            ColorChoose(color);   //颜色选择

            GoToxy(100,13);       //副屏幕打印

            printf("游戏暂停");

            GoToxy(88,17);

            printf("按回车键回到游戏");

            GoToxy(88,18);

            printf("或按 Esc键退出游戏");

            if(++color==8)

                color=1;

        }

        if (GetAsyncKeyState( 0xD )& 0x8000)      //回车键

        {

            GoToxy(100,13);       //副屏幕打印

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);

            printf("正在进行");   //覆盖掉原来的提示

            GoToxy(88,17);

            printf("                     ");

            GoToxy(88,18);

            printf("                     ");

            break;

        }

        else if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出    

            exit(0);

        Sleep(20);

    }

}

 

 

void ClearMainScreen()  //主屏幕清屏函数,因使用system("cls");再打印框架有一定几率造成框架上移一行的错误,所以单独编写清屏函数

{

    for(int i=1;i<40;i++)

    {

        GoToxy(2,i);

        printf("                                                                              ");

    }

}

 

 

void Frame ()     //打印游戏主体框架

{                 //SetConsoleTextAttribute为设置文本颜色和文本背景颜色函数

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY);

    printf("  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁  ");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); 

    printf("  ▂▂▂▂▂▂▂▂▂▂▂▂▂ \n");

    for(int i=0;i<14;i++)

    {

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);

        printf("▕                                                                              ▏");

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); 

        printf(" |                          |\n");

    }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);

    printf("▕                                                                              ▏");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); 

    printf(" |═════════════════════════ |\n");

    for(int i=0;i<24;i++)

    {

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);

        printf("▕                                                                              ▏");

        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); 

        printf(" |                          |\n");

    }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY);

    printf("  ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔  ");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_BLUE); 

    printf(" ﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊\n");

    SideScreen ();  //打印副屏幕

}

 

 

void PrintMap()     // 打印地图(地图既地图障碍物)

{

    for(int j=0;j<41;j++)

        for(int i=0;i<41;i++)

            if(map[i][j]==6)

            {

                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN

                    |FOREGROUND_RED|FOREGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);

                GoToxy(2*j,i);

                printf("■");

            }

            else if(map[i][j]==2)

            {

                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED);

                GoToxy(2*j,i);

                printf("▓");

            }

            else if(map[i][j]==1)

            {

                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED);

                GoToxy(2*j,i);

                printf("▓");

            }

            else if(map[i][j]==5)

            {                      

                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|BACKGROUND_BLUE|FOREGROUND_BLUE|FOREGROUND_GREEN);

                GoToxy(2*j,i);

                printf("~");

            }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN);

    GoToxy(38,37);     printf("  ★ ");

    GoToxy(38,38);     printf("███");    //∵无论地图怎么变,家所在位置不变,且家的字符多种,不方便用上述方式打印

    GoToxy(38,39);     printf("◢█◣");    //∴直接打印(且家的map值与符号无关)

}

 

 

void GetMap()      //地图存放函数

{                   //map里的值: 个位数的值为地图方块部分,百位数的值为坦克

    int i ,j;      //map里的值: 0为可通过陆地,1为红砖,2待定,5为水,100为敌方坦克,200为我的坦克,

    int Map[8][41][41]=

    {

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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}, 

            {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},

            {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}, 

            {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},

            {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}, 

            {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}, 

            {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},

            {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}, 

            {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},

            {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},

            {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}, 

            {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},

            {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},

            {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},

            {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},

            {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},

            {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}, 

            {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},

            {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},

            {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},

            {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}, 

            {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},

            {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},

            {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},

            {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},

            {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},

            {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}, 

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},    

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

        {

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {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},

            {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

        },

    };

        for(i=0;i<41;i++)

            for(j=0;j<41;j++)

                    map[i][j]=Map[level-1][i][j];

    PrintMap();         //打印地图

}

 

 

void GameOver(bool home)

{

    int timing=0,color=1;

    while(1)

    {

        if(timing++%30==0)         //游戏结束原因为生命值为0

        {

            ColorChoose(color);    //颜色选择

            if(home)               //游戏结束原因为老家被毁,则多打印一行字以提示玩家

            {

                GoToxy(37,19);     //主屏幕中心打印

                printf("老家被毁!");

            }

            GoToxy(37,20);         //主屏幕中心打印

            printf("游戏结束!");

            GoToxy(100,13);        //副屏幕打印

            printf("游戏结束");

            GoToxy(88,17);

            printf("请按回车键重新开始!");

            GoToxy(88,18);

            printf("或按 Esc键退出游戏!");

            if(++color==8)

                color=1;

        }

        if (GetAsyncKeyState( 0xD )& 0x8000)  //回车键

        {

//            system("cls");       //清屏,这里清屏后再次打印框架有一定几率造成框架上移一行的bug,因此选用自建清屏函数

//            Frame ();            //重新打印游戏框架

            score-=500;          //分数-500

            ClearMainScreen();   //主屏清屏函数,无需再次打印框架

            Initialize();        //从本关重新开始

            break;

        }

        else if(GetAsyncKeyState( 0x1B )& 0x8000)  //Esc键退出    

            exit(0);

        Sleep(20);

    }

}

 

 

void NextLevel()

{

    int timing=0,color=1;

    level++;

    if(level<=MAX_LEVEL)

        while(1)

        {

            if(timing++%10==0)

            {

                ColorChoose(color);   //颜色选择   

                GoToxy(37,20);        //主屏幕中心打印

                printf("恭喜过关!");

                GoToxy(100,13);       //副屏幕打印

                printf("等待下关");

                GoToxy(87,17);

                printf("请按回车键进入下一关!");

                GoToxy(88,18);

                printf("或按 Esc键退出游戏!");

                if(++color==8)    

                    color=1;

            }

            if (GetAsyncKeyState( 0xD )& 0x8000)  //回车键

            {

                GoToxy(88,17);        //抹除副屏幕中的提示

                printf("                     ");

                GoToxy(88,18);

                printf("                     ");

                ClearMainScreen();   //主屏清屏函数,无需再次打印框架

                Initialize();        //初始化从下一关开始,level已++

                break;

            }

            else if(GetAsyncKeyState( 0x1B )& 0x8000)  //Esc键退出    

                exit(0);

            Sleep(20);

        }

    else   //level>8 通关

        while(1)

        {

            if(timing++%5==0)

            {

                ColorChoose(color);

                GoToxy(33,20);        //主屏幕中心打印

                printf("恭喜通过全部关卡!");

                GoToxy(100,13);       //副屏幕打印

                printf("已通全关");

                GoToxy(88,17);

                printf("恭喜通过全部关卡!");

                GoToxy(88,19);

                printf("按 Esc键退出游戏!");

                if(++color==8)    

                    color=1;

            }

            if(GetAsyncKeyState( 0x1B )& 0x8000)  //Esc键退出    

                exit(0);

            Sleep(10);

        }

}

 

 

void GameCheak()

{                           //剩余敌人为0且四坦克全部不存活

    if(remain_enemy<=0 && !AI_tank[0].alive && !AI_tank[1].alive && !AI_tank[2].alive && !AI_tank[3].alive )

        NextLevel();        //进入下一关

    if(my_tank.revive>=MAX_LIFE)   //我的生命值(复活次数)全部用完 MAX_LIFE

        GameOver(0);        //游戏结束,传入0代表我的复活次数用光(生命值为0)。游戏结束有两种判断,另一种是老家被毁

}

 

 

void SideScreen ()  //副屏幕 行(84起,110末,若双字符宽则在108打印最后一个字)列(11上屏末,13下屏初,39下屏末。为美观最好打在38)

{                   // |         第  d  关         |   " |                          |\n"

    GoToxy(93,2);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);

    printf("第     关");

    GoToxy(92,5);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);

    printf("分  数:");

    GoToxy(92,7);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);

    printf("生  命:");

    GoToxy(86,9);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

    printf("剩余敌方坦克:");

    GoToxy(86,11);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);

    printf("当前游戏速度:  %d",21-speed);

    GoToxy(86,13);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);

    printf("当前游戏状态:");

    GoToxy(94,19);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);

    GoToxy(94,24);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);

   /* printf("帮  助");

    GoToxy(86,27);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);

    printf("方向键  ←↑→↓  移动");

    GoToxy(93,29);

    printf("x 键 射击");

    GoToxy(89,31);

    printf("+ - 调整游戏速度");

    GoToxy(90,33);

    printf("游戏速度范围1~20");

    GoToxy(90,35);

    printf("空格键 暂停游戏");

    GoToxy(90,37);

    printf("Esc键  退出游戏");*/

  printf("帮  助");     //这是第二种详细说明的样式

    GoToxy(86,21);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);

    printf("方向键  ←↑→↓  移动");

    GoToxy(93,23);

    printf("x 键 射击");

    GoToxy(89,25);

    printf("+ - 调整游戏速度");

    GoToxy(90,27);

    printf("游戏速度范围1~20");

    GoToxy(90,29);

    printf("回车键 暂停游戏");

    GoToxy(90,31);

    printf("Esc键  退出游戏");

    GoToxy(86,33);

    printf("敌方坦克全部消灭则过关");

    GoToxy(87,34);

    printf("己方坦克生命值为0 或");

    GoToxy(86,35);

    printf("正下方的老家被毁则失败");

    GoToxy(86,36);

    printf("己坦克与敌坦克子弹碰撞");

    GoToxy(87,37);

    printf("则抵消,敌坦克间子弹碰");

    GoToxy(86,38);

    printf("撞不抵消且可穿过敌坦克");

}

 

 

void Initialize()      //初始化

{

    remain_enemy=16;

    my_tank.revive=0;  //我的坦克复活次数为0

    position=0;

    bul_num=0;

    GetMap();

    BuildMyTank( &my_tank );

    for(int i=0;i<12;i++)     //子弹初始化

    {

        bullet [i].exist=0;

        bullet [i].initial=0;

    }

    for(int i=0;i<=3;i++)         //AI坦克初始化

    {

        AI_tank [i].revive=0;

        AI_tank [i].alive=0;  //初始化坦克全是不存活的,BuildAITank()会建立重新建立不存活的坦克

        AI_tank [i].stop=0;

        AI_tank [i].num=i;

        AI_tank [i].my=0;

        AI_tank [i].CD=0;

    }

    GoToxy(97,2);                        //在副屏幕上关卡数

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);

    printf("%d",level);

    GoToxy(102,5);                       //在副屏幕上打印分数

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);

    printf("%d   ",score);

    GoToxy(102,7);                       //在副屏幕打印我的剩余生命值

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);

    printf("%d", MAX_LIFE-my_tank.revive);

    GoToxy(102,9);                       //在副屏幕上打印剩余坦克数

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

    printf("%d ",remain_enemy);

    GoToxy(100,13);                      //在副屏幕上打印状态

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN);

    printf("正在游戏");

}
 

0
岳成浩
岳成浩
资深守护
资深守护

int n;
int a[10001];
void sum(int minn=10001){
    int pos=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]<=minn){
            minn=a[i];
            pos=i;
        }
    }
    cout<<pos<<" "<<minn;
}
int main()
{
    int minn=10001;
    sum(minn);
    return 0;
}

 

0
李锦昊
李锦昊
中级天翼
中级天翼
#include <iostream>
using namespace std;

int main() {
    int matrix[10][100];
    int m;
    int n;
    int l = 1, i, j, k;
    while(cin >> m >> n){
    for (i = 0; i<m; i++) {
        for (j = 0; j<n; j++) {
            cin >> matrix[i][j];
        }
    }
    k = 0;
    i = 0;
    j = 0;
    for (;;) {

        for (; j<n - i; j++) {
            cout << matrix[i][j];
            k++;
            if (k == m*n)
                break;
            else
                cout<<" ";
            if (j == n - i - 1) {
                i++;
                l = 2;
                break;
            }
        }
        if (k == m*n)
            break;

        for (; i<m - n + 1 + j; i++) {
            cout << matrix[i][j] ;
            k++;
            if (k == m*n)
                break;
            else 
                cout<<" ";
            if (i == m - n + j) {
                j--;
                l = 3;
                break;
            }
        }
        if (k == m*n)
            break;
        for (; j >= m - 1 - i; j--) {
            cout << matrix[i][j] ;
            k++;
            if (k == m*n)
                break;
            else
                cout<<" ";
            if (j == m - i-1) {
                i--;
                l = 4;
                break;
            }
        }
        if (k == m*n)
            break;
        for (; i>j; i--) {
            cout << matrix[i][j];
            k++;
            if (k == m*n)
                break;
            else
                cout<<" ";
            if (i == j + 1) {
                j++;
                l = 1;
                break;
            }
        }

        if (k == m*n)
            break;
    }
    }
    return 0;
}

 

0
0
钱寅虎
钱寅虎
初级守护
初级守护

#include<iostream>
 
#include<windows.h>
 
#include<conio.h>
 
#include<time.h>
 
#include<string>
 
using namespace std;
 
typedef struct Frame
 
{
 
    COORD position[2];
 
    int flag;
 
}Frame;
 
void SetPos(COORD a)
 
{
 
    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
 
    SetConsoleCursorPosition(out, a);
 
}
 
void SetPos(int i, int j)
 
{
 
    COORD pos={i, j};
 
    SetPos(pos);
 
}
 
void HideCursor()
 
{
 
    CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
 
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
 
}
 
 
 
//把第y行,[x1, x2) 之间的坐标填充为 ch
 
void drawRow(int y, int x1, int x2, char ch)
 
{
 
    SetPos(x1,y);
 
    for(int i = 0; i <= (x2-x1); i++) cout<<ch;
 
}
 
 
 
//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
 
void drawRow(COORD a, COORD b, char ch)
 
{
 
    if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch);
 
    else {
 
        SetPos(0, 25);
 
        cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";
 
        system("pause");
 
    }
 
}
 
 
 
//把第x列,[y1, y2] 之间的坐标填充为 ch
 
void drawCol(int x, int y1, int y2, char ch)
 
{
 
    int y=y1;
 
    while(y!=y2+1) {
 
        SetPos(x, y);
 
        cout<<ch;
 
        y++;
 
    }
 
}
 
 
 
//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
 
void drawCol(COORD a, COORD b, char ch)
 
{
 
    if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch);
 
    else {
 
        SetPos(0, 25);
 
        cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";
 
        system("pause");
 
    }
 
}
 
 
 
//左上角坐标、右下角坐标、用row填充行、用col填充列
 
void drawFrame(COORD a, COORD  b, char row, char col)
 
{
 
    drawRow(a.Y, a.X+1, b.X-1, row);
 
    drawRow(b.Y, a.X+1, b.X-1, row);
 
    drawCol(a.X, a.Y+1, b.Y-1, col);
 
    drawCol(b.X, a.Y+1, b.Y-1, col);
 
}
 
 
 
void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
 
{
 
    COORD a={x1, y1};
 
    COORD b={x2, y2};
 
    drawFrame(a, b, row, col);
 
}
 
 
 
void drawFrame(Frame frame, char row, char col)
 
{
 
    COORD a = frame.position[0];
 
    COORD b = frame.position[1];
 
    drawFrame(a, b, row, col);
 
}
 
 
 
void drawPlaying()
 
{
 
    drawFrame(0, 0, 48, 24, '=', '|');//    draw map frame;
 
    drawFrame(49, 0, 79, 4, '-', '|');//        draw output frame
 
    drawFrame(49, 4, 79, 9, '-', '|');//        draw score frame
 
    drawFrame(49, 9, 79, 20, '-', '|');//   draw operate frame
 
    drawFrame(49, 20, 79, 24, '-', '|');//  draw other message frame
 
    SetPos(52, 6);
 
    cout<<"得分:";
 
    SetPos(52, 7);
 
    cout<<"称号:";
 
    SetPos(52,10);
 
    cout<<"操作方式:";
 
    SetPos(52,12);
 
    cout<<"  a,s,d,w 控制战机移动。";
 
    SetPos(52,14);
 
    cout<<"  p 暂停游戏。";
 
    SetPos(52,16);
 
    cout<<"  e 退出游戏。";
 
}
 
 
 
//在[a, b)之间产生一个随机整数
 
int random(int a, int b)
 
{
 
    int c=(rand() % (a-b))+ a;
 
    return c;
 
}
void color(int b)         //颜色函数 
 
{
 
    HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ; 
 
    SetConsoleTextAttribute(hConsole,b) ;
 

 
 
 
 
//在两个坐标包括的矩形框内随机产生一个坐标
 
COORD random(COORD a, COORD b)
 
{
 
    int x=random(a.X, b.X);
 
    int y=random(a.Y, b.Y);
 
    COORD c={x, y};
 
    return c;
 
}
 
 
 
bool  judgeCoordInFrame(Frame frame, COORD spot)
 
{
 
    if(spot.X>=frame.position[0].X)
 
        if(spot.X<=frame.position[1].X)
 
            if(spot.Y>=frame.position[0].Y)
 
                if(spot.Y<=frame.position[0].Y)
 
                    return true;
 
    return false;
 
}
 
 
 
void printCoord(COORD a)
 
{
 
    cout    <<"( "<<a.X<<" , "<<a.Y<<" )";
 
}
 
 
 
void printFrameCoord(Frame a)
 
{
 
    printCoord(a.position[0]);
 
    cout    <<" - ";
 
    printCoord(a.position[1]);
 
}
 
 
 
int drawMenu()
 
{
 
    SetPos(30, 1);
 
    cout<<"P l a n e  W a r";
 
    drawRow(3, 0, 79, '-');
 
    drawRow(5, 0, 79, '-');
 
    SetPos(28, 4);
 
    cout<<"w 和 s 选择, k 确定";
 
    SetPos(15, 11);
 
    cout<<"1. 简单的敌人";
 
    SetPos(15, 13);
 
    cout<<"2. 冷酷的敌人";
 
    drawRow(20, 0, 79, '-');
 
    drawRow(22, 0, 79, '-');
 
    SetPos(47, 11);
 
    cout<<"简单的敌人:";
 
    SetPos(51, 13);
 
    cout<<"简单敌人有着较慢的移动速度。";
 
    int j=11;
 
    cout<<">>";
 
    while(1) {
 
        if( _kbhit() ) {    
 
            char x=_getch();
 
            switch (x) {
 
              case 'w' : {  
 
                if( j == 13) {
 
                  SetPos(12, j);
 
                  cout<<" ";
 
                  j = 11;
 
                  SetPos(12, j);
 
                  cout<<">>";
 
                  SetPos(51, 13);
 
                  cout<<"            ";
 
                  SetPos(47, 11);
 
                  cout<<"简单的敌人:";
 
                  SetPos(51, 13);
 
                  cout<<"简单敌人有着较慢的移动速度。";
 
                }
 
                break;
 
              }
 
              case 's' : {  
 
                if( j == 11 ) {
 
                  SetPos(12, j);
 
                  cout<<" ";        
 
                  j = 13;
 
                  SetPos(12, j);
 
                  cout<<">>";
 
                  SetPos(51, 13);
 
                   cout<<"              ";
 
                   SetPos(47, 11);
 
                   cout<<"冷酷的敌人:";
 
                   SetPos(51, 13);
 
                   cout<<"冷酷的敌人移动速度较快。";
 
                }
 
                break;
 
              }
 
              case 'k' : {  
 
                if (j == 8) return 1; else return 2;
 
              }
 
            }
 
        }
 
    }
 
}
 
/*================== the Game Class ==================*/
 
 
 
class Game
 
{
 
public:
 
    COORD position[10];
 
    COORD bullet[10];
 
    Frame enemy[8];
 
    int score;
 
    int rank;
 
    int rankf;
 
    string title;
 
    int flag_rank;
 
 
 
    Game ();
 
 
 
    //初始化所有
 
    void initPlane();
 
    void initBullet();
 
    void initEnemy();
 
 
 
    //初始化其中一个
 
    //void initThisBullet( COORD );
 
    //void initThisEnemy( Frame );
 
 
 
    void planeMove(char);
 
    void bulletMove();
 
    void enemyMove();
 
 
 
    //填充所有
 
    void drawPlane();
 
    void drawPlaneToNull();
 
    void drawBullet();
 
    void drawBulletToNull();
 
    void drawEnemy();
 
    void drawEnemyToNull();
 
 
 
    //填充其中一个
 
    void drawThisBulletToNull( COORD );
 
    void drawThisEnemyToNull( Frame );
 
 
 
    void Pause();
 
    void Playing();
 
    void judgePlane();
 
    void judgeEnemy();
 
 
 
    void Shoot();
 
 
 
    void GameOver();
 
    void printScore();
 
};
 
 
 
Game::Game()
 
{
 
    initPlane();
 
    initBullet();
 
    initEnemy();
 
    score = 0;
 
    rank = 25;
 
    rankf = 0;
 
    flag_rank = 0;
 
}
 
 
 
void Game::initPlane()
 
{
 
    COORD centren={39, 22};
 
    position[0].X=position[5].X=position[7].X=position[9].X=centren.X;
 
    position[1].X=centren.X-2;  
 
    position[2].X=position[6].X=centren.X-1;
 
    position[3].X=position[8].X=centren.X+1;
 
    position[4].X=centren.X+2;
 
    for(int i=0; i<=4; i++)
 
        position[i].Y=centren.Y;
 
    for(int i=6; i<=8; i++)
 
        position[i].Y=centren.Y+1;
 
    position[5].Y=centren.Y-1;
 
    position[9].Y=centren.Y-2;
 
}
 
 
 
void Game::drawPlane()
 
{
 
    for(int i=0; i<9; i++)
 
    {
 
        SetPos(position[i]);
 
        if(i!=5)
 
            cout<<"O";
 
        else if(i==5)
 
            cout<<"|";      
 
    }
 
}
 
 
 
void Game::drawPlaneToNull()
 
{
 
    for(int i=0; i<9; i++)
 
    {
 
        SetPos(position[i]);
 
        cout<<" ";
 
    }   
 
}
 
 
 
void Game::initBullet()
 
{
 
    for(int i=0; i<10; i++)
 
        bullet[i].Y = 30;
 
}
 
 
 
void Game::drawBullet()
 
{
 
    for(int i=0; i<10; i++)
 
    {
 
        if( bullet[i].Y != 30)
 
        {
 
            SetPos(bullet[i]);
 
            cout<<"Φ";  
 
        }
 
    }
 
}
 
 
 
void Game::drawBulletToNull()
 
{
 
    for(int i=0; i<10; i++)
 
        if( bullet[i].Y != 30 )
 
            {
 
                COORD pos={bullet[i].X, bullet[i].Y+1};
 
                SetPos(pos);
 
                cout<<" ";
 
            }   
 
}
 
 
 
void Game::initEnemy()
 
{
 
    COORD a={1, 1};
 
    COORD b={45, 15};
 
    for(int i=0; i<8; i++)
 
    {
 
        enemy[i].position[0] = random(a, b);
 
        enemy[i].position[1].X = enemy[i].position[0].X + 3;
 
        enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
 
    }
 
}
 
 
 
void Game::drawEnemy()
 
{
 
    for(int i=0; i<8; i++)
 
        drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
 
}
 
 
 
void Game::drawEnemyToNull()
 
{
 
    for(int i=0; i<8; i++)
 
    {
 
        drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
 
    }       
 
}
 
 
 
void Game::Pause()
 
{
 
    SetPos(61,2);
 
    cout<<"               ";
 
    SetPos(61,2);
 
    cout<<"暂停中...";
 
    char c=_getch();
 
    while(c!='p')
 
        c=_getch();
 
    SetPos(61,2);
 
    cout<<"         ";
 
}
 
 
 
void Game::planeMove(char x)
 
{
 
    if(x == 'a')
 
        if(position[1].X != 1)
 
            for(int i=0; i<=9; i++)
 
                position[i].X -= 2;
 
 
 
    if(x == 's')
 
        if(position[7].Y != 23)
 
            for(int i=0; i<=9; i++)
 
                position[i].Y += 1;
 
 
 
    if(x == 'd')
 
        if(position[4].X != 47)
 
            for(int i=0; i<=9; i++)
 
                position[i].X += 2;
 
 
 
    if(x == 'w')
 
        if(position[5].Y != 3)
 
            for(int i=0; i<=9; i++)
 
                position[i].Y -= 1;
 
}
 
 
 
void Game::bulletMove()
 
{
 
    for(int i=0; i<10; i++)
 
    {
 
        if( bullet[i].Y != 30)
 
        {
 
            bullet[i].Y -= 1;
 
            if( bullet[i].Y == 1 )
 
            {
 
                COORD pos={bullet[i].X, bullet[i].Y+1};
 
                drawThisBulletToNull( pos );
 
                bullet[i].Y=30;
 
            }
 
 
 
        }
 
    }
 
}
 
 
 
void Game::enemyMove()
 
{
 
    for(int i=0; i<8; i++)
 
    {
 
        for(int j=0; j<2; j++)
 
            enemy[i].position[j].Y++;
 
 
 
        if(24 == enemy[i].position[1].Y)
 
        {
 
            COORD a={1, 1};
 
            COORD b={45, 3};
 
            enemy[i].position[0] = random(a, b);
 
            enemy[i].position[1].X = enemy[i].position[0].X + 3;
 
            enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
 
        }
 
    }
 
}
 
 
 
void Game::judgePlane()
 
{
 
    for(int i = 0; i < 8; i++)
 
        for(int j=0; j<9; j++)
 
            if(judgeCoordInFrame(enemy[i], position[j]))
 
            {
 
                SetPos(62, 1);
 
                cout<<"坠毁";
 
                drawFrame(enemy[i], '+', '+');
 
                Sleep(1000);
 
                GameOver();
 
                break;
 
            }
 
}
 
 
 
void Game::drawThisBulletToNull( COORD c)
 
{
 
    SetPos(c);
 
    cout<<" ";
 
}
 
 
 
void Game::drawThisEnemyToNull( Frame f )
 
{
 
    drawFrame(f, ' ', ' ');
 
}
 
 
 
void Game::judgeEnemy()
 
{
 
    for(int i = 0; i < 8; i++)
 
        for(int j = 0; j < 10; j++)
 
            if( judgeCoordInFrame(enemy[i], bullet[j]) )
 
            {
 
                score += 5;
 
                drawThisEnemyToNull( enemy[i] );
 
                COORD a={1, 1};
 
                COORD b={45, 3};
 
                enemy[i].position[0] = random(a, b);
 
                enemy[i].position[1].X = enemy[i].position[0].X + 3;
 
                enemy[i].position[1].Y = enemy[i].position[0].Y + 2;                    
 
                drawThisBulletToNull( bullet[j] );
 
                bullet[j].Y = 30;
 
            }
 
}
 
 
 
void Game::Shoot()
 
{
 
    for(int i=0; i<10; i++)
 
        if(bullet[i].Y == 30)
 
        {
 
            bullet[i].X = position[5].X;
 
            bullet[i].Y = position[5].Y-1;
 
            break;
 
        }
 
}
 
 
 
void Game::printScore()
 
{
 
    if(score == 120 && flag_rank == 0)
 
    {
 
        rank -= 3;
 
        flag_rank = 1;
 
    }
 
 
 
    else if( score == 360 && flag_rank == 1)
 
    {
 
        rank -= 5;
 
        flag_rank = 2;
 
    }
 
    else if( score == 480 && flag_rank == 2)
 
    {
 
        rank -= 5;
 
        flag_rank = 3;
 
    }
 
    int x=rank/5;
 
    SetPos(60, 6);
 
    cout<<score;
 
 
 
    if( rank!=rankf )
 
    {
 
        SetPos(60, 7);
 
        if( x == 5)
 
            title="新手守护";
 
        else if( x == 4)
 
            title="资深守护";
 
        else if( x == 3)
 
            title="缔造者守护";
 
        else if( x == 2 )
 
            title="战狼守护";
            else if(x==1)
            title="绝地武士守护";
            else if(x=0)
            title="缔造者之神守护"; 
 
        cout<<title;
 
    }
 
    rankf = rank;
 
}
 
 
 
void Game::Playing()
 
{
 
 
 
 
    drawEnemy();
 
    drawPlane();
 
 
 
    int flag_bullet = 0;
 
    int flag_enemy = 0;
 
 
 
    while(1)
 
    {
 
        Sleep(8);
 
        if(_kbhit())
 
        {
 
            char x = _getch();
 
            if ('a' == x || 's' == x || 'd' == x || 'w' == x)
 
            {
 
                drawPlaneToNull();
 
                planeMove(x);
 
                drawPlane();
 
                judgePlane();
 
            }           
 
            else if ('p' == x)
 
                Pause();
 
            else if( 'k' == x)
 
                Shoot();
 
            else if( 'e' == x)
 
            {
 
                //CloseHandle(MFUN);
 
                GameOver();
 
                break;
 
            }
 
 
 
        }
 
        /* 处理子弹 */
 
        if( 0 == flag_bullet )
 
        {
 
            bulletMove();
 
            drawBulletToNull();
 
            drawBullet();
 
            judgeEnemy();
 
        }           
 
        flag_bullet++;
 
        if( 5 == flag_bullet )
 
            flag_bullet = 0;
 
 
 
        /* 处理敌人 */
 
        if( 0 == flag_enemy )
 
        {
 
            drawEnemyToNull();
 
            enemyMove();            
 
            drawEnemy();
 
            judgePlane();
 
        }
 
        flag_enemy++;
 
        if( flag_enemy >= rank )
 
            flag_enemy = 0;
 
 
 
        /* 输出得分 */
 
        printScore();
 
    }
 
}
 
 
 
void Game::GameOver()
 
{
 
    system("cls");              
 
    COORD p1={28,9};
 
    COORD p2={53,15};
 
    drawFrame(p1, p2, '=', '|');
 
    SetPos(36,12);
 
    string str="Game Over!";
 
    for(int i=0; i<str.size(); i++)
 
    {
 
        Sleep(80);
 
        cout<<str[i];
 
    }
 
    Sleep(1000);
 
    system("cls");
 
    drawFrame(p1, p2, '=', '|');
 
    SetPos(31, 11);
 
    cout<<"击落敌机:"<<score/5<<" 架";
 
    SetPos(31, 12);
 
    cout<<"得  分:"<<score<<" 分";
 
    SetPos(31, 13);
 
    cout<<"获得称号:"<<title;
 
    SetPos(30, 16);
 
    Sleep(1000);
 
    cout<<"继续? 是(y)| 否(n)";
 
as:
 
    char x=_getch();
 
    if (x == 'n')
 
        exit(0);
 
    else if (x == 'y')
 
    {
 
        system("cls");
 
        Game game;
 
        int a = drawMenu();
 
        if(a == 2)
 
            game.rank = 20;
 
        system("cls");
 
        drawPlaying();
 
        game.Playing();
 
    }
 
    else goto as;
 
}
 
 
 
/*================== the main function ==================*/
 
int main()
 
{
 
    //游戏准备
 
    srand((int)time(0));    //随机种子
 
    HideCursor();   //隐藏光标
 
 
 
    Game game;
 
    int a = drawMenu();
 
    if(a == 2)
 
        game.rank = 20;
 
    system("cls");
 
    drawPlaying();
 
    game.Playing();
 
}

0
钱寅虎
钱寅虎
初级守护
初级守护

#include <iostream>
 
#include <list>
 
#include <cstdio>
 
#include <string>
 
#include <vector>
 
#include <ctime>
 
#include <algorithm>
 
#include <conio.h>
 
#include <windows.h>
 
using namespace std;
 
 
 
class Node { 
 
public:
 
    int x, y;
 
    Node(int x1, int y1); 
 
};
 
 
 
class UserData { 
 
public:
 
    string name;
 
    long long score;
 
    int gt;
 
    int gr; 
 
    UserData(string s, long long sc,int gametime,int grade); 
 
    friend bool operator < (UserData a, UserData b); 
 
};
 
 
 
#define RIGHT 0x4d
 
#define LEFT 0x4b  
 
#define UP 0x48  
 
#define DOWN 0x50 
 
#define YELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
 
#define CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
 
#define ORANGE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
 
#define PURPLE FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY
 
#define RED  FOREGROUND_RED | FOREGROUND_INTENSITY
 
const int STARTX = 8; 
 
const int STARTY = 4; 
 
const int RANGEX = 60; 
 
const int RANGEY = 20;
 
int point=10; 
 
const int ENDX = STARTX + RANGEX; 
 
const int ENDY = STARTY + RANGEY; 
 
bool isSnake[RANGEY + 10 ][RANGEX + 10];
 
int speed; 
 
int sysj;
 
int gametime;
 
list<Node> snake;
 
int curDiraction; //蛇的当前前进方向, 1上, 2下, 3左, 4右
 
int score; //当前分数
 
int grade;
 
int snakeLen; //蛇的长度
 
int foodx, foody; //食物坐标
 
int gox, goy; //蛇头坐标
 
int mj;
 
void GoTo(short x, short y); //定位光标
 
void DrawBoard(); //绘制边框
 
void ShowInformation(); //展示游戏信息
 
void Init(); //初始化游戏
 
void RunSnake(int x, int y); //绘制蛇身
 
void Try(int& x, int& y); //试走
 
bool IsGoodCoord(int x, int y); //前进坐标是否合法
 
void AddFood(); //增加食物
 
void EartFood(); //吃食物
 
void InitSnake(); //初始化蛇身
 
bool EndGame(); //结束游戏
 
bool StartGame(); //启动游戏
 
bool GameMenu(); //游戏菜单
 
void ShowRanking(); //排行榜
 
void ShowAbout(); //相关信息
 
void InputData(); //输入玩家名字
 
 
 
int main() {
 
    system("title 贪吃蛇小游戏 by 李凯昱");
 
    while (true) {
 
        if (!GameMenu()) return 0;
 
    }
 
    return 0;
 
}
 
 
 
Node::Node(int x1, int y1) { //构造Node对象
 
    x = x1; y = y1; 
 
}
 
 
 
bool operator < (UserData a, UserData b) { //重载运算符,按分数由大到小排列
 
    if(a.score != b.score)
 
    return a.score > b.score;
 
    if(a.gt !=b.gt)
 
    return a.gt > b.gt;
 
    else
 
    return a.gr > b.gr;
 
}
 
UserData::UserData(string s, long long sc,int gametime_,int _grade) { //构造UserData对象
 
    name = s; score = sc; gt=gametime_; gr=_grade;
 
}
 
 
 
void color(WORD A)
 
{
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), A);
 

 
 
 
void Color(int score_)
 
{
 
    if(score_%4==1)
 
    {
 
        color(PURPLE);
 
    }
 
    else if(score_%4==2)
 
    {
 
        color(RED);
 
    }
 
    else if(score_%4==3)
 
    {
 
        color(YELLOW);
 
    }
 
    else if(score_%4==0) 
 
    {
 
        color(CYAN);
 
    }
 
}
 
 
 
void GoTo(short x, short y) { //定位光标
 
    COORD coord = { x, y };
 
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
 
}
 
 
 
void ShowInformation() { //输出游戏信息
 
    color(YELLOW);
 
    GoTo(78, 5);
 
    printf("贪吃蛇游戏");
 
    GoTo(78,18);
 
    gametime=(clock()-mj)/1000;
 
    grade=snakeLen-3; 
 
    printf("生存时间:%3d 秒",(clock()-mj)/1000);
 
    GoTo(78, 8);
 
    printf("游戏规则:");
 
    GoTo(78, 10);
 
    printf("请按 ↑ ↓ ← →  来控制您的蛇吃东西");
 
    GoTo(78, 12);
 
    printf("吃的越多,蛇就越长,您的等级也将越高");
 
    GoTo(78, 14);
 
    printf("当蛇吃到自己或撞上墙时,游戏结束。");
 
    GoTo(78,16);
 
    printf("自动前进时间:%3dms",speed);
 
    GoTo(78, 20);
 
    printf("当前等级: %8d", snakeLen-3);
 
    GoTo(78, 23);
 
    printf("您的分数: %d", score);
 
    color(CYAN);
 
    printf("+%d=%d",score/3,score*3/2);
 
    color(YELLOW);
 
    GoTo(78,25);
 
    printf("剩余时间:%d秒",10+(snakeLen-3)*4-gametime);
 
    sysj=10+(snakeLen-3)*4-gametime; 
 
}
 
 
 
void DrawBoard() { //绘制墙体
 
 
 
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得输出句柄
 
 
 
    CONSOLE_CURSOR_INFO cursor_info = { 1, 0 }; //光标信息
 
    SetConsoleCursorInfo(hOut, &cursor_info); //隐藏光标
 
 
 
    COORD size = { 120, 30 };
 
    SetConsoleScreenBufferSize(hOut, size); //重设缓冲区大小
 
 
 
    SMALL_RECT rc = { 0 , 0, 120, 30 };
 
    SetConsoleWindowInfo(hOut, true, &rc); //重设窗口大小
 
 
 
    SetConsoleTextAttribute(hOut, CYAN);
 
 
 
    for (int i = STARTX - 2; i <= ENDX + 2; i += 2) { //横向墙体
 
        GoTo(i, STARTY - 1);
 
        printf("■");
 
        GoTo(i, ENDY + 1);
 
        printf("■");
 
    }
 
    for (int i = STARTY - 1; i <= ENDY + 1; ++i) { //竖向墙体
 
        GoTo(STARTX - 2, i);
 
        printf("■");
 
        GoTo(ENDX + 2, i);
 
        printf("■");
 
    }
 
}
 
void draw()
 
{
 
    char m=snakeLen+62;
 
    Color(score);
 
    cout<<"■";
 
 } 
 
void Init() { //初始化游戏
 
    system("cls");
 
    memset(isSnake, 0, sizeof(isSnake));
 
    speed = 200;
 
    curDiraction = 4;
 
    score = 0;
 
    DrawBoard();
 
    InitSnake();
 
    ShowInformation();
 
    AddFood();
 
    mj=clock();
 
    point=10;
 
    sysj=10;
 
}
 
 
 
void RunSnake(int x, int y) { //绘制蛇身
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
 
    score += snakeLen + 1;
 
    if (x == foodx && y == foody) {
 
        EartFood();
 
        AddFood();
 
        return;
 
    }
 
    snake.push_front(Node(x, y));
 
    isSnake[y][x] = true;
 
    GoTo(x, y);
 
    draw();
 
    Node back = snake.back();
 
    snake.pop_back();
 
    isSnake[back.y][back.x] = false;
 
    GoTo(back.x, back.y);
 
    printf(" ");
 
}
 
 
 
void Try(int& x, int& y) { //试走
 
    int key, cnt = 100;
 
    while (cnt--) { //多次检测键盘状态
 
        if (_kbhit()) {
 
            key = getch();
 
            switch (key) {
 
            case UP: 
 
                if (curDiraction == 1 || curDiraction == 2) break;
 
                --y; curDiraction = 1; return;
 
            case DOWN: 
 
                if (curDiraction == 1 || curDiraction == 2) break;
 
                ++y; curDiraction = 2; return;
 
            case LEFT: 
 
                if (curDiraction == 3 || curDiraction == 4) break;
 
                x -= 2; curDiraction = 3; return;
 
            case RIGHT: 
 
                if (curDiraction == 3 || curDiraction == 4) break;
 
                x += 2; curDiraction = 4; return;
 
            }
 
        }
 
    }
 
    if (curDiraction == 1) --y; //用户没有输入时
 
    else if (curDiraction == 2) ++y;
 
    else if (curDiraction == 3) x -= 2;
 
    else x += 2;
 
}
 
 
 
bool IsGoodCoord(int x, int y) { //判断光标是否合法
 
    if (x <= ENDX && y <= ENDY && x >= STARTX && y >= STARTY)
 
        return true;
 
    else
 
        return false;
 
}
 
 
 
void AddFood() { //增加食物
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), PURPLE);
 
    srand((unsigned)time(NULL));
 
    while (true) {
 
        foodx = (rand()%ENDX) + 1;
 
        foody = (rand()%ENDY) + 1;
 
        if (foodx&1) foodx++;
 
        if (!isSnake[foody][foodx] && IsGoodCoord(foodx, foody)) break;
 
    }
 
    GoTo(foodx, foody);
 
    int a=rand()%5;
 
    if(a>=4) 
 
    printf("★");
 
    else if(a<=1) 
 
    printf("○");
 
    else
 
    printf("▲");
 
}
 
 
 
void EartFood() { //吃东西
 
    point+=4;
 
    int sb=gametime=(clock()-mj)/1000;
 
    sysj=point-sb;
 
    score+=score/2;
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
 
    snake.push_front(Node(foodx, foody));
 
    isSnake[foody][foodx] = true;
 
    ++snakeLen;
 
    if (speed >= 55) speed -= 5;
 
 
 
    GoTo(foodx, foody);
 
    draw();
 
    AddFood(); 
 
}
 
 
 
void InitSnake() { //初始化蛇身
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
 
    snakeLen = 3, gox = 18, goy = 14;
 
    snake.clear();
 
    snake.push_front(Node(12, 14));
 
    snake.push_front(Node(14, 14));
 
    snake.push_front(Node(16, 14));
 
    for (int i = 12; i <= 16; i += 2) {
 
        GoTo(i, 14);
 
        draw();
 
        isSnake[14][i] = true;
 
    }
 
}
 
bool EndGame() { //结束游戏
 
    system("cls");
 
    DrawBoard();
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
 
    GoTo(28, 10);
 
    printf("您的本局游戏得分: %d分", score);
 
    GoTo(32, 18);
 
    printf("....你挂了....");
 
    GoTo(27, 20);
 
    printf("是否继续游戏: 是(1), 否(0)");
 
    GoTo(27, 22);
 
    char key = getch();
 
    while (true) {
 
        if (key == '1') return false;
 
        else if (key == '0') 
 
        {GoTo(ENDX+1,ENDY+2);
 
        exit(0);return true;
 
        }
 
        else key = getch();
 
    }
 
}
 
 
 
bool StartGame() { //启动游戏
 
 
 
    Init();
 
 
 
    while (IsGoodCoord(gox, goy) && !isSnake[goy][gox]&&sysj>0) { //当试走合法时
 
        RunSnake(gox, goy);
 
        ShowInformation();
 
        Try(gox, goy);
 
        Sleep(speed);
 
    }
 
    InputData(); 
 
    return true;
 
}
 
 
 
bool GameMenu() { //游戏菜单
 
    system("cls");
 
    DrawBoard();
 
    GoTo(STARTX + 22, STARTY + 4);
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
 
    printf("欢迎进入贪吃蛇游戏!");
 
    GoTo(STARTX + 24, STARTY + 10);
 
    printf("1: 新游戏");
 
    GoTo(STARTX + 24, STARTY + 12);
 
    printf("2: 排行榜");
 
    GoTo(STARTX + 24, STARTY + 14);
 
    printf("3: 关于游戏");
 
    GoTo(STARTX + 24, STARTY + 16);
 
    printf("4: 退出游戏");
 
 
 
    while (true) {
 
        if (_kbhit()) {
 
            char key = getch();
 
            switch (key) {
 
            case '1':
 
                if (!StartGame()) return false; 
 
                else return true;
 
            case '2':
 
                ShowRanking(); return true;
 
            case '3':
 
                ShowAbout(); return true;
 
            case '4':
 
                GoTo(1,ENDY+2);
 
                return false;
 
            default:
 
                return true;
 
            }
 
        }
 
    }
 
}
 
 
 
void ShowRanking() { //展示排行榜
 
    vector<UserData> vu;
 
    FILE *fp = fopen("GameData.txt", "r");
 
    if (fp == NULL) fp = fopen("GameData.txt", "w+");
 
    char name[20];
 
    int len = 0;
 
    while (fscanf(fp, "%s", name) != EOF) {
 
        ++len;
 
        int score,g=grade;
 
        fscanf(fp, "%d%d%d%*c", &score,&gametime,&g);
 
        vu.push_back(UserData(string(name), score,gametime,grade));
 
    }
 
    fclose(fp);
 
    sort(vu.begin(), vu.end()); //对得分进行排名
 
    system("cls");
 
    DrawBoard();
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN);
 
    GoTo(STARTX + 8, STARTY + 2);
 
    printf("用户");
 
    GoTo(STARTX + 20, STARTY + 2);
 
    printf("分数");
 
    GoTo(STARTX + 32, STARTY + 2);
 
    printf("生存时间");
 
    GoTo(STARTX + 44, STARTY + 2);
 
    printf("排行");
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
 
 
 
    for (int i = 0; i < len && i < 10; ++i) { //打印前十名用户数据
 
        char const *p = vu[i].name.c_str();
 
        Color(vu[i].score);
 
        GoTo(STARTX + 8, STARTY + 4 + i);
 
        printf("%s", p);
 
        GoTo(STARTX + 20, STARTY + 4 + i);
 
        printf("%d分", vu[i].score);
 
        GoTo(STARTX + 32, STARTY + 4 + i);
 
        printf("%d秒", vu[i].gt);
 
        GoTo(STARTX + 44, STARTY + 4 + i);
 
        printf(" %d", i + 1);
 
    }
 
 
 
    GoTo(STARTX + 4, ENDY - 2);
 
    printf("-----------------  按'1'返回游戏菜单  ---------------");
 
    while (true) {
 
        if (_kbhit()) {
 
            char key = getch();
 
            if (key == '1') break;
 
        }
 
    }
 
}
 
 
 
void ShowAbout() { //展示游戏相关
 
    system("cls");
 
    DrawBoard();
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
 
 
 
    GoTo(STARTX + 4, STARTY + 2);
 
    printf("-------------------  贪吃蛇游戏  -------------------");
 
    GoTo(STARTX + 10, STARTY + 4);
 
    printf("制作人: ");
 
    GoTo(STARTX + 10, STARTY + 6);
 
    printf("李凯昱");
 
    GoTo(STARTX + 10,STARTY + 8);
 
    printf("贪吃蛇游戏");
 
    GoTo(STARTX + 10,STARTY + 10);
 
    printf("游戏规则:");
 
    GoTo(STARTX + 10,STARTY + 12);
 
    printf("请按 ↑ ↓ ← →  来控制您的蛇吃东西");
 
    GoTo(STARTX + 10,STARTY + 14);
 
    printf("吃的越多,蛇就越长,您的等级也将越高");
 
    GoTo(STARTX + 10,STARTY + 16);
 
    printf("当蛇吃到自己或撞上墙时,游戏结束。");
 
 
 
    GoTo(STARTX + 4, ENDY - 2);
 
    printf("-----------------  按'1'返回游戏菜单  ---------------");
 
    while (true) {
 
        if (_kbhit()) {
 
            char key = getch();
 
            if (key == '1') break;
 
        }
 
    }
 
}
 
 
 
void InputData() { //用户输入名字
 
    char name[20];
 
    if(score>=1000)
 
    {
 
    GoTo(STARTX + 10, STARTY + 10);
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), RED);
 
    printf("请输入你的名字: ");
 
    COORD coord = { STARTX + 10, STARTY + 12 };
 
    SetConsoleCursorPosition(GetStdHandle(STD_INPUT_HANDLE), coord);
 
    while (true) { //忽略非法字符
 
        scanf("%s", name);
 
        if (name[0] != 0 && name[0] != ' ') break; 
 
    }FILE *fp = fopen("Gamedata.txt", "a");
 
    if (fp == NULL) fp = fopen("GameData.txt", "w+");
 
    fprintf(fp, "%s %d %d \n", name, score,gametime);
 
    fclose(fp);
 
    }
 
    else 
 
    {
 
        GoTo(STARTX + 20, STARTY + 10);
 
        cout<<"哟!这分数也能上榜??"<<endl; 
 
        Sleep(1000);
 
     }  
 
    EndGame(); 
 
 
 
}

0
钱寅虎
钱寅虎
初级守护
初级守护

#include <iostream>
#include <cstdio>
#include <windows.h>
#include <vector>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")
using namespace std;

#define GameW 10
#define GameH 20
const int CtrlLeft = GameW*2+4 + 3;

void out(int x){
    cout<<"游戏方式:"<<endl;
    cout<<"← 左移     → 右移"<<endl;
    cout<<"↓ 加速     ↑ 旋转"<<endl;
    cout<<"游戏规则:"<<endl;
    cout<<"连续消去1行得1分、2行得3分、3行得5分、4行得7分。"<<endl;
    cout<<"积分达到一定程度,会有换命的活动,命最多6条。"<<endl;
    cout<<"难度会随积分的上升逐渐上升,最多到6的难度。"<<endl<<"下面游戏正式开始";
    return;
}
struct Point {
    Point(){}
    Point(int x, int y) {_x = x, _y = y;}
    int _x, _y;
};

HANDLE g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE g_hInput  = GetStdHandle(STD_INPUT_HANDLE);

Point g_ptCursor(0,0);
BOOL isChecking = FALSE;
BOOL g_bGameOver = FALSE;
int g_nGameBack[GameH][GameW], Case;
int nowKeyInfo = -1;
int g_nDiff = 1;
int g_nLife = 2;
int g_nScore = 0;

void SetCursor(COORD cd) {
    SetConsoleCursorPosition(g_hOutput, cd);
}
void SetCursor(int x, int y){
    COORD cd = {x, y};
    SetCursor(cd);
}
void SetBlockCursor(int x, int y){
    COORD cd = {2*x + 2, y + 1};
    SetCursor(cd);
}

void SetBack(int x, int y, BOOL bk) {
    SetBlockCursor(x, y);
    if (bk) 
        printf("%s", "■");
    else
        printf(" ");
}

bool Out(int x, int y) {
    return x < 0 || y < 0 || x >= GameW || y >= GameH; 
}

struct xBlock {
public:
    int len;
    int nowRotateID;
    BOOL mask[4][4][4];
    static vector <xBlock> List;

    xBlock() { len = 0; }
    xBlock(int l, char *str) {
        int i, j, k;
        len = l;
        memset(mask, FALSE, sizeof(mask));
        for(i = 0; i < l; i++) {
            for(j = 0; j < l; j++) {
                mask[0][i][j] = str[i*l + j] - '0';
            }
        }
        for(k = 1; k < 4; k++) {
            for(i = 0; i < len; i++) {
                for(j = 0; j < len; j++) {
                    mask[k][i][j] = mask[k-1][j][len-1-i];
                }
            }
        }
        nowRotateID = rand() % 4;
    }

    void rotate() {
        nowRotateID ++;
        if (nowRotateID >= 4)
            nowRotateID = 0;
    }

    BOOL getUnit(int x, int y, int roID) {
        if (roID == -1) {
            roID = nowRotateID;
        }
        return mask[roID][y][x];
    }
};

vector <xBlock> xBlock::List;

class Block {
public:
    int x, y;
    int ID;
    xBlock bk;

    void reset(xBlock *pbk) {
        bk = *pbk;

        x = 4, y = 0;
        ID = ++ Case;

        if(collide(0,0)) {
            lifeDown();
        }
        draw();
        
        *pbk = xBlock::List[rand() % xBlock::List.size()];
    }
    
    void lifeDown() {
        int i, j;
        for(i = 0; i < GameH; i++) {
            for(j = 0; j < GameW; j++) {
                SetBack(j, i, TRUE);
                Sleep(10);
            }
        }
        if(g_nLife) {
            g_nLife --;
            for(i = g_nLife; i < 6; i++) {
                SetCursor(CtrlLeft + i, 15);
                printf("%c", ' ');
            }
            for(i = GameH-1; i >= 0; i--) {
                for(j = GameW-1; j >= 0; j--) {
                    SetBack(j, i, FALSE);
                    Sleep(10);
                    g_nGameBack[i][j] = 0;
                }
            }
        }else {
            g_bGameOver = TRUE;
        }
    }

    void erase() {
        int i, j;
        for(i = 0; i < bk.len; i++) {
            for(j = 0; j < bk.len; j++) {
                if (bk.getUnit(j, i, -1)) {
                    if(!Out(j+x, i+y) && g_nGameBack[i+y][j+x]) {
                        SetBack(j+x, i+y, FALSE);
                        g_nGameBack[i+y][j+x] = 0;
                    }
                }
            }
        }
    }
    void draw() {
        int i, j;
        for(i = 0; i < bk.len; i++) {
            for(j = 0; j < bk.len; j++) {
                if (bk.getUnit(j, i, -1)) {
                    if(!Out(j+x, i+y) && !g_nGameBack[i+y][j+x]) {
                        SetBack(j+x, i+y, TRUE);
                        g_nGameBack[i+y][j+x]  = ID;
                    }
                }
            }
        }
    }
    void draw(int x, int y) {
        int i, j;
        for(i = 0; i < 4; i++) {
            for(j = 0; j < 4; j++) {
                SetCursor(x + 2*j, y + i);
                if (bk.getUnit(j, i, -1)) {    
                    printf("%s", "■");
                }else 
                    printf(" ");
            }
        }
    }
    bool collide(int dx, int dy, int roID = -1) {
        int i, j;
        for(i = 0; i < bk.len; i++) {
            for(j = 0; j < bk.len; j++) {
                if (bk.getUnit(j, i, roID)) {
                    Point ptPos(j + x + dx, i + y + dy);
                    if(Out(ptPos._x, ptPos._y)
                    || g_nGameBack[ptPos._y][ptPos._x] && ID != g_nGameBack[ptPos._y][ptPos._x]) {
                        return TRUE;
                    }
                }
            }
        }
        return FALSE;
    }

    void rotate(int nTimes = 1) {
        int nextro = (bk.nowRotateID + nTimes) % 4;
        if(collide(0, 0, nextro)) {
            return ;
        }
        Beep(12000, 50);
        erase();
        bk.nowRotateID = nextro;
        draw();
    }

    BOOL changepos(int dx, int dy) {
        if(collide(dx, dy)) {
            return FALSE;
        }
        erase();
        x += dx;
        y += dy;
        draw();
        return TRUE;
    }
};

void GameInit() {
    CONSOLE_CURSOR_INFO cursor_info;
    cursor_info.bVisible = FALSE;
    cursor_info.dwSize   = 100;
    SetConsoleCursorInfo(g_hOutput, &cursor_info);
    xBlock::List.push_back(xBlock(3, "010111000"));
    xBlock::List.push_back(xBlock(3, "110110000"));
    xBlock::List.push_back(xBlock(3, "111001000"));
    xBlock::List.push_back(xBlock(3, "111100000"));
    xBlock::List.push_back(xBlock(3, "110011000"));
    xBlock::List.push_back(xBlock(3, "011110000"));
    xBlock::List.push_back(xBlock(4, "1000100010001000"));
}

void DrawFrame(int x, int y, int nWidth, int nHeight) {
    int i;
    for(i = 0; i < nWidth; i++) {
        SetCursor(x + 2*i + 2, y);
        printf("%s", "一");
        SetCursor(x + 2*i + 2, y + nHeight+1);
        printf("%s", "┄");
    }
    for(i = 0; i < nHeight; i++) {
        SetCursor(x, y + i + 1);
        printf("%s", "┆");
        SetCursor(x + nWidth*2+2, y + i + 1);
        printf("%s", "┆");
    }        
    SetCursor(x, y);
    printf("%s", "┌");    
    SetCursor(x, y + nHeight+1);
    printf("%s", "└");
    SetCursor(x + nWidth*2+2, y);
    printf("%s", "┐");    
    SetCursor(x + nWidth*2+2, y + nHeight+1);
    printf("%s", "┘");
}

void MissionInit() {
    memset(g_nGameBack, FALSE, sizeof(g_nGameBack));
    Case = 1;
    int i;
    DrawFrame(0, 0, GameW, GameH);
    DrawFrame(GameW*2+4, 0, 4, GameH);
    SetCursor(CtrlLeft, 2);
    printf("Next");
    
    SetCursor(CtrlLeft, 8);
    printf("Speed");
    for(i = 0; i < g_nDiff; i++) {
        SetCursor(CtrlLeft + i, 9);
        printf("%c", 1);
    }

    SetCursor(CtrlLeft, 11);
    printf("Score");
    SetCursor(CtrlLeft, 12);
    printf("%d", g_nScore);

    SetCursor(CtrlLeft, 14);
    printf("Life");
    for(i = 0; i < g_nLife; i++) {
        SetCursor(CtrlLeft + i, 15);
        printf("%c", 3);
    }

    SetCursor(CtrlLeft-1, 19);
    printf("by Zty");
    SetCursor(CtrlLeft-1, 20);
    printf("Baidu A*");
}

void Check() {
    isChecking = TRUE;
    int i, j, k;
    vector <int> line;
    for(i = 0; i < GameH; i++) {
        for(j = 0; j < GameW; j++) {
            if(!g_nGameBack[i][j])
                break;
        }
        if(j == GameW) {
            line.push_back(i);
        }
    }
    if(line.size()) {
        int nCount = 7;
        while(nCount --) {
            for(i = 0; i < line.size(); i++) {
                for(j = 0; j < GameW; j++) {
                    SetBack(j, line[i], nCount&1);
                }
            }
            Sleep(70);
        }
        for(i = 0; i < line.size(); i++) {
            for(j = 0; j < GameW; j++) {
                g_nGameBack[line[i]][j] = 0;
            }
        }

        for(i = 0; i < GameW; i++) {
            int next = GameH-1;
            for(j = GameH-1; j >= 0; j--) {
                for(k = next; k >= 0; k--) {
                    if(g_nGameBack[k][i]) 
                        break;
                }
                next = k - 1;
                BOOL is = (k >= 0);
                SetBack(i, j, is);
                g_nGameBack[j][i] = is;
            }
        }

        g_nScore += 2*line.size()-1;
        SetCursor(CtrlLeft, 12);
        printf("%d", g_nScore);

        if( g_nScore >= g_nDiff * g_nDiff * 10) {
            if(g_nDiff <= 6)
                g_nDiff ++;
        }
        if( g_nScore >= 50 * (g_nLife+1)) {
            if(g_nLife <= 6)
                g_nLife ++;
        }
    }

    isChecking = FALSE;
}
int main() { 
    Block* obj = new Block();
    Block* buf = new Block();
    

    BOOL bCreateNew = FALSE;
    int nTimer = GetTickCount();
    int LastKeyDownTime = GetTickCount();


    GameInit();
    MissionInit();
    
    buf->bk = xBlock::List[rand() % xBlock::List.size()];
    while(1) {
        if(!bCreateNew) {
            bCreateNew = TRUE;
            obj->reset(&buf->bk);
            if(g_bGameOver)
                break;
            buf->draw(CtrlLeft - 1, 4);
        }
        if (GetTickCount() - nTimer >= 1000 / g_nDiff) {
            nTimer = GetTickCount();
            if (!obj->collide(0, 1))
                obj->changepos(0, 1);
            else {
                Check();
                bCreateNew = FALSE;
            }
        }
        if (GetTickCount() - LastKeyDownTime >= 100) {
            if(FALSE == isChecking) {
                LastKeyDownTime = GetTickCount();
                if (GetAsyncKeyState(VK_UP)) {
                    obj->rotate();
                }
                if (GetAsyncKeyState(VK_LEFT)) {
                    obj->changepos(-1, 0);
                }
                if (GetAsyncKeyState(VK_RIGHT)) {
                    obj->changepos(1, 0);
                }
                if (GetAsyncKeyState(VK_DOWN)) {
                    if( FALSE == obj->changepos(0, 2) )
                        obj->changepos(0, 1);
                }
            }
        }
    }
    SetCursor(8, 10);
    printf("Game Over");

    SetCursor(0, GameH+3);
    printf("按ESC键退出游戏");

    while(1) {
        if (GetAsyncKeyState(VK_ESCAPE))
            break;
    }
    return 0;
}

0
钱寅虎
钱寅虎
初级守护
初级守护
  • #include<iostream>
  • #include<cstdio>
  • using namespace std;
  • int n,m,a[1005][1005],f[1005][1005];
  • int main(){
  • cin>>n>>m;
  • for(int i=1;i<=n;i++){
  • for(int j=1;j<=m;j++){
  • cin>>a[i][j];
  • }
  • }
  • for(int i=1;i<=n;i++){
  • for(int j=1;j<=m;j++){
  • f[i][j]=f[i][j-1]+f[i-1][j]-f[i-1][j-1]+a[i][j];
  • }
  • }
  • for(int i=1;i<=n;i++){
  • for(int j=1;j<=m;j++){
  • cout<<f[i][j]<<" ";
  • }
  • cout<<endl;
  • }
  • return 0;
  • }
0
钱寅虎
钱寅虎
初级守护
初级守护
  • #include<iostream>
  • #include<cstring>
  • using namespace std;
  • string a;
  • bool f=true;
  • int b[300];
  • int main(){
  • getline(cin,a);
  • for(int i=0;i<=a.size()-1;i++){
  • b[a[i]]++;
  • }
  • for(int i=0;i<=a.size()-1;i++){
  • if(b[a[i]]==1){
  • cout<<a[i];
  • f=false;
  • break;
  • }
  • }
  • if(f){
  • cout<<"No";
  • }
  • return 0;
  • }
0
张百川
张百川
新手光能
新手光能

 

  • using namespace std;
  • int f(int a,int b,int c)
  • {
  • return max(a,max(b,c));
  • }
  • int main()
  • {
  • int n;
  • double sum=0;
  • cin>>n;
  • int a,b,c;
  • for(int i=1;i<=n;i++)
  • {
  • cin>>a>>b>>c;
  • sum=double(f(a+b,b,c)*f(a,b,b+c))/f(a,b,c);
  • printf("%.2f\n",sum);
  • }
  • return 0;
  • }
0
李锦昊
李锦昊
中级天翼
中级天翼

#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
using namespace std;
int main(){
    double r;
    cin>>r;
    double s,c,pi=3.14;
    s=pi*r*r;
    c=2*pi*r;
    printf("%.2f",s);
    cout<<endl;
    printf("%.1f",c);
    return 0;
}

李锦昊在2020-12-19 13:27:56追加了内容

    double r;

    cin>>r;

    double s,c,pi=3.14;

    s=pi*r*r;

    c=2*pi*r;

    printf("%.2f",(int)(s*100+0.5)/100.0);

    cout<<endl;

    printf("%.1f",(int)(c*10+0.5)/10.0);

    return 0;

李锦昊在2020-12-19 13:34:50追加了内容
  • #include<iostream>
  • #include<algorithm>
  • #include<string>
  • #include<cstdio>
  • using namespace std;
  • int main(){
  • double a,b;
  • cin>>a>>b;
  • printf("%.1f",(int)(b/a*10+0.5)/10.0);
  • return 0;
  • }
李锦昊在2021-09-11 16:07:26追加了内容
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string a[105];
int n,m;
bool cmp(string a,string b) {
	if(a.size()!=b.size())
		return a.size()<b.size();
	return a<b;
}
bool cmp1(string a,string b){
	return a+b<b+a;
}
int main( ) {
	cin>>n>>m;
	for( int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+n+1,cmp);
	sort(a+1,a+m+1,cmp1);
	for(int i=1;i<=m;i++){
		cout<<a[i];
	}
	return 0;
}

 

0
钱寅虎
钱寅虎
初级守护
初级守护

#include<bits/stdc++.h>

using namespace std;

int main(){

    for(int i=10;i<=97;i++){

for(int j=i;j<=97;j++){

for(int k=j;k<=97;k++){

if(10+i+j+k==97&&10+k-i-j==7){

cout<<10<<" "<<i<<" "<<j<<" "<<k<<endl;

}

}

}

}

    return 0;

}

0
李锦昊
李锦昊
中级天翼
中级天翼

#include <iostream>
#include <cstdio> 
#include <conio.h>//函数_getch()所需头文件 
#include <windows.h>
#include <iomanip>//输入输出流控制符setw()所在头文件,设置字段宽度为n位
using namespace std; 
#define R 10//行 
#define C 10//列
/*二维数组地图
1.表示墙体
3.表示目的地
4.表示箱子
5.表示人
0.表示空地
*/
//存储当前使用的地图
int map[R][C] = { 0 };
//地图 1(关卡1)
int map1[10][10]={
    { 0,0,0,0,1,1,1,0,0,0 },
    { 0,0,0,0,1,5,1,0,0,0 },
    { 0,0,0,0,1,4,1,0,0,0 },
    { 0,0,0,0,1,0,1,0,0,0 },
    { 0,0,0,0,1,0,1,0,0,0 },
    { 0,0,0,0,1,3,1,0,0,0 },
    { 0,0,0,0,1,1,1,0,0,0 },
};
//地图 2(关卡2)
int map2[R][C]={
    { 0,0,0,1,1,1,1,0,0,0 },
    { 0,0,0,1,0,5,1,0,0,0 },
    { 0,0,0,1,0,4,1,0,0,0 },
    { 0,0,0,1,0,0,1,0,0,0 },
    { 0,0,0,1,0,0,1,1,1,1 },
    { 0,0,0,1,0,0,0,0,3,1 },
    { 0,0,0,1,1,1,1,1,1,1 },
};
//地图 3(关卡3)
int map3[R][C] = {
    { 0,0,1,1,1,0,0,0 },
    { 0,0,1,3,1,0,0,0 },
    { 0,0,1,0,1,1,1,1 },
    { 1,1,1,0,0,4,3,1 },
    { 1,3,4,4,0,1,1,1 },
    { 1,1,1,5,4,1,0,0 },
    { 0,0,0,1,3,1,0,0 },
    { 0,0,0,1,1,1,0,0 }
};
int map4[R][C]={
    {1,1,1,1,1,0,0,0,0,0},
    {1,5,0,0,1,0,0,0,0,0},
    {1,0,4,4,1,0,1,1,1,0},
    {1,0,4,0,1,0,1,3,1,0},
    {1,1,1,0,1,1,1,3,1,0},
    {0,1,1,0,0,0,0,3,1,0},
    {0,1,0,0,0,1,0,0,1,0},
    {0,1,0,0,0,1,1,1,1,0},
    {0,1,1,1,1,1,0,0,0,0}
};
int map5[R][C]={
    { 0,0,0,1,1,1,1,1,1,1 },
    { 0,0,1,1,0,0,1,0,5,1 },
    { 0,0,1,0,0,0,1,0,0,1 },
    { 0,0,1,4,0,4,0,4,0,1 },
    { 0,0,1,0,4,1,1,0,0,1 },
    { 1,1,1,0,4,0,1,0,1,1 },
    { 1,3,3,3,3,3,0,0,1,0 },
    { 1,1,1,1,1,1,1,1,1,0 },
}; 
//函数声明
void Game_Menu();               /*初始化模块,显示游戏开始菜单*/
void Game_description();        /*初始化模块,显示游戏操作说明*/
int DrawMap();                  /*画图模块,绘制地图*/
void Move();                    /*移动模块,操作人物和箱子的移动*/
int finish();                   /*判断游戏是否挑战成功*/
void setmap(int n);             /*游戏关卡设置 */
void color(int m);              /*设置文本显示时的颜色*/
BOOL flag = true;               /*定义布尔值的标记,方便在游戏时直接退出*/ 
 
int pass=1;//初始关卡值 
 
int main(){
    char c;//用户输入S或Q 
    Game_Menu();
    c = getch();
    setmap(pass);//首先设置第一关 
    switch(c){
        case 'Q':
        case 'q':
        return 0;
        case 'S':
        case 's':
        while (flag){  /*游戏主体*/
            system("cls");
            Game_description();
            DrawMap();
            Move();//调用该函数时会有等待键盘输入的中断 
            if(finish()){
                system("cls");
                DrawMap();
                printf("游戏胜利!\n");
                system("pause"); 
                pass++;
                setmap(pass);
            }
        }
        break;
    }
    return 0;
}
void Move(){
    int r,c;
    for(int i=0;i<R;i++){ 
        for(int j=0;j<C;j++){
            if(map[i][j]==5||map[i][j]==8){
                r=i;
                c=j;
            }
        }
    }
    cout<<"您当前的坐标为:("<<r<<","<<c<<")"<<endl;
    int ch; 
    ch=_getch();
    switch(ch){
        case 'W':
        case 'w':
        case 72:
        if(map[r-1][c]==0||map[r-1][c]==3){ 
            map[r-1][c]+=5;
            map[r][c]-=5;
        } 
        else if(map[r-1][c]==4||map[r-1][c]==7){
            if(map[r-2][c]==0||map[r-2][c]==3){
                map[r-2][c]+=4;
                map[r-1][c]+=1;
                map[r][c]-=5;
            }
        }
        break;
        case 'S':
        case 's':
        case 80:
        if(map[r+1][c]==0||map[r+1][c]==3){
            map[r+1][c]+=5;
            map[r][c]-=5;
        }
        else if(map[r+1][c]==4||map[r+1][c]==7){
            if(map[r+2][c]==0||map[r+2][c]==3){
                map[r+2][c]+=4;
                map[r+1][c]+=1;
                map[r][c]-=5;
            }
        }
        break;
        case 'A':
        case 'a':
        case 75:
        if(map[r][c-1]==0||map[r][c-1]==3){
            map[r][c-1]+=5;
            map[r][c]-=5;
        }
        else if(map[r][c-1]==4||map[r][c-1]==7){
            if(map[r][c-2]==0||map[r][c-2]==3){
                map[r][c-2]+=4;
                map[r][c-1]+=1;
                map[r][c]-=5; 
            }
        }
        break;
        case 'D':
        case 'd':
        case 77:
        if(map[r][c+1]==0||map[r][c+1]==3){
            map[r][c+1]+=5;
            map[r][c]-=5;
        }
        else if(map[r][c+1]==4||map[r][c+1]==7){
            if(map[r][c+2]==0||map[r][c+2]==3){
                map[r][c+2]+=4;
                map[r][c+1]+=1;
                map[r][c]-=5;
            }
        }
        break; 
        case 'Q':
        case 'q':
        flag=false;
        default:
        break;
    }
    return ;
}
int finish(){           /*判断游戏是否挑战成功*/
    for (int i=0;i<R;i++){
        for (int j=0;j<C;j++){
            if (map[i][j] == 4){ 
                return 0;
            } 
        }
    }
    return 1;/*当整个二维数组没有4(箱子) ,表明箱子都到位,返回1  */

void Game_Menu(){   //游戏菜单,初始化模块,显示游戏开始菜单
    system("cls");
    cout << "/************************************\\\n";
    cout << "*                                    *\n";
    cout << "*            经 典 小 游 戏          *\n";
    cout << "*               推 箱 子             *\n";
    cout << "*         1.按 S 或 s 键 开 始       *\n";
    cout << "*         2.按 Q 或 q 键 退 出       *\n";
    cout << "*                                    *\n";
    cout << "\\***********************************/\n";
    _getch();
}
void Game_description(){/*初始化模块,显示游戏操作说明*/
    cout << "/************************************\\\n";
    cout << "*                                    *\n";
    cout << "*              操 作 提 示           *\n";
    cout << "*        操作上移:  W   w   ↑      *\n";
    cout << "*        操作下移:  S   s   ↓      *\n";
    cout << "*        操作左移:  A   a   ←      *\n";
    cout << "*        操作右移:  D   d   →      *\n";
    cout << "*                                    *\n";
    cout << "*        退    出:  Q   q           *\n";
    cout << "*                                    *\n";
    cout << "*                                    *\n";
    cout << "\\***********************************/\n";
}
int DrawMap(){  //画图模块,绘制地图
    cout<<"关卡:"<<pass<<endl; 
    for (int i = 0; i < R; i++){
        for (int j = 0; j < C; j++){
            switch (map[i][j]){
                case 0:
                    color(0xF);
                    cout << "  ";  //空地
                    break;
                case 1:
                    color(8);
                    cout << "■";//墙体
                    break;
                case 3:
                    color(0xE);
                    cout << "☆";//目的地
                    break;
                case 4:
                    color(4);
                    cout << "□";//箱子 
                    break;
                case 5:
                    color(3);
                    cout << "♀"; //人
                    break;
                case 7:     //4+3   箱子到达目的地
                    color(6);   
                    cout << "★";
                    break;
                case 8:     //5+3  人与目的地重合
                    color(3);
                    cout << "♀";
                    break;
                default:
                break;
            }
        }
    cout <<endl;
    }
    return 0;
}
void setmap(int n){
    if (n == 1) {
        memcpy(map, map1, sizeof(map1));/* memcpy 将数组map1复制给map */
    }
    if (n == 2) {
        memcpy(map, map2, sizeof(map2));
    }
    if (n == 3) {
        memcpy(map, map3, sizeof(map3));
    }
    if (n == 4) {
        memcpy(map, map4, sizeof(map4));
    }
    if (n == 5) {
        memcpy(map, map5, sizeof(map5));
    }
    return ;
}
void color(int m) {         /*设置文本显示时的颜色*/
    HANDLE consolehend;
    consolehend = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台缓冲区句柄
    SetConsoleTextAttribute(consolehend, m);//参数一为控制台缓冲区句柄,参数二为要设置的颜色
    return ; 
}

0
李锦昊
李锦昊
中级天翼
中级天翼

#include <iostream>
#include <cstdio> 
#include <conio.h>//函数_getch()所需头文件 
#include <windows.h>
#include <iomanip>//输入输出流控制符setw()所在头文件,设置字段宽度为n位
using namespace std; 
#define R 10//行 
#define C 10//列
/*二维数组地图
1.表示墙体
3.表示目的地
4.表示箱子
5.表示人
0.表示空地
*/
//存储当前使用的地图
int map[R][C] = { 0 };
//地图 1(关卡1)
int map1[10][10]={
    { 0,0,0,0,1,1,1,0,0,0 },
    { 0,0,0,0,1,5,1,0,0,0 },
    { 0,0,0,0,1,4,1,0,0,0 },
    { 0,0,0,0,1,0,1,0,0,0 },
    { 0,0,0,0,1,0,1,0,0,0 },
    { 0,0,0,0,1,3,1,0,0,0 },
    { 0,0,0,0,1,1,1,0,0,0 },
};
//地图 2(关卡2)
int map2[R][C]={
    { 0,0,0,1,1,1,1,0,0,0 },
    { 0,0,0,1,0,5,1,0,0,0 },
    { 0,0,0,1,0,4,1,0,0,0 },
    { 0,0,0,1,0,0,1,0,0,0 },
    { 0,0,0,1,0,0,1,1,1,1 },
    { 0,0,0,1,0,0,0,0,3,1 },
    { 0,0,0,1,1,1,1,1,1,1 },
};
//地图 3(关卡3)
int map3[R][C] = {
    { 0,0,1,1,1,0,0,0 },
    { 0,0,1,3,1,0,0,0 },
    { 0,0,1,0,1,1,1,1 },
    { 1,1,1,0,0,4,3,1 },
    { 1,3,4,4,0,1,1,1 },
    { 1,1,1,5,4,1,0,0 },
    { 0,0,0,1,3,1,0,0 },
    { 0,0,0,1,1,1,0,0 }
};
int map4[R][C]={
    {1,1,1,1,1,0,0,0,0,0},
    {1,5,0,0,1,0,0,0,0,0},
    {1,0,4,4,1,0,1,1,1,0},
    {1,0,4,0,1,0,1,3,1,0},
    {1,1,1,0,1,1,1,3,1,0},
    {0,1,1,0,0,0,0,3,1,0},
    {0,1,0,0,0,1,0,0,1,0},
    {0,1,0,0,0,1,1,1,1,0},
    {0,1,1,1,1,1,0,0,0,0}
};
int map5[R][C]={
    { 0,0,0,1,1,1,1,1,1,1 },
    { 0,0,1,1,0,0,1,0,5,1 },
    { 0,0,1,0,0,0,1,0,0,1 },
    { 0,0,1,4,0,4,0,4,0,1 },
    { 0,0,1,0,4,1,1,0,0,1 },
    { 1,1,1,0,4,0,1,0,1,1 },
    { 1,3,3,3,3,3,0,0,1,0 },
    { 1,1,1,1,1,1,1,1,1,0 },
}; 
//函数声明
void Game_Menu();               /*初始化模块,显示游戏开始菜单*/
void Game_description();        /*初始化模块,显示游戏操作说明*/
int DrawMap();                  /*画图模块,绘制地图*/
void Move();                    /*移动模块,操作人物和箱子的移动*/
int finish();                   /*判断游戏是否挑战成功*/
void setmap(int n);             /*游戏关卡设置 */
void color(int m);              /*设置文本显示时的颜色*/
BOOL flag = true;               /*定义布尔值的标记,方便在游戏时直接退出*/ 
 
int pass=1;//初始关卡值 
 
int main(){
    char c;//用户输入S或Q 
    Game_Menu();
    c = getch();
    setmap(pass);//首先设置第一关 
    switch(c){
        case 'Q':
        case 'q':
        return 0;
        case 'S':
        case 's':
        while (flag){  /*游戏主体*/
            system("cls");
            Game_description();
            DrawMap();
            Move();//调用该函数时会有等待键盘输入的中断 
            if(finish()){
                system("cls");
                DrawMap();
                printf("游戏胜利!\n");
                system("pause"); 
                pass++;
                setmap(pass);
            }
        }
        break;
    }
    return 0;
}
void Move(){
    int r,c;
    for(int i=0;i<R;i++){ 
        for(int j=0;j<C;j++){
            if(map[i][j]==5||map[i][j]==8){
                r=i;
                c=j;
            }
        }
    }
    cout<<"您当前的坐标为:("<<r<<","<<c<<")"<<endl;
    int ch; 
    ch=_getch();
    switch(ch){
        case 'W':
        case 'w':
        case 72:
        if(map[r-1][c]==0||map[r-1][c]==3){ 
            map[r-1][c]+=5;
            map[r][c]-=5;
        } 
        else if(map[r-1][c]==4||map[r-1][c]==7){
            if(map[r-2][c]==0||map[r-2][c]==3){
                map[r-2][c]+=4;
                map[r-1][c]+=1;
                map[r][c]-=5;
            }
        }
        break;
        case 'S':
        case 's':
        case 80:
        if(map[r+1][c]==0||map[r+1][c]==3){
            map[r+1][c]+=5;
            map[r][c]-=5;
        }
        else if(map[r+1][c]==4||map[r+1][c]==7){
            if(map[r+2][c]==0||map[r+2][c]==3){
                map[r+2][c]+=4;
                map[r+1][c]+=1;
                map[r][c]-=5;
            }
        }
        break;
        case 'A':
        case 'a':
        case 75:
        if(map[r][c-1]==0||map[r][c-1]==3){
            map[r][c-1]+=5;
            map[r][c]-=5;
        }
        else if(map[r][c-1]==4||map[r][c-1]==7){
            if(map[r][c-2]==0||map[r][c-2]==3){
                map[r][c-2]+=4;
                map[r][c-1]+=1;
                map[r][c]-=5; 
            }
        }
        break;
        case 'D':
        case 'd':
        case 77:
        if(map[r][c+1]==0||map[r][c+1]==3){
            map[r][c+1]+=5;
            map[r][c]-=5;
        }
        else if(map[r][c+1]==4||map[r][c+1]==7){
            if(map[r][c+2]==0||map[r][c+2]==3){
                map[r][c+2]+=4;
                map[r][c+1]+=1;
                map[r][c]-=5;
            }
        }
        break; 
        case 'Q':
        case 'q':
        flag=false;
        default:
        break;
    }
    return ;
}
int finish(){           /*判断游戏是否挑战成功*/
    for (int i=0;i<R;i++){
        for (int j=0;j<C;j++){
            if (map[i][j] == 4){ 
                return 0;
            } 
        }
    }
    return 1;/*当整个二维数组没有4(箱子) ,表明箱子都到位,返回1  */

void Game_Menu(){   //游戏菜单,初始化模块,显示游戏开始菜单
    system("cls");
    cout << "/************************************\\\n";
    cout << "*                                    *\n";
    cout << "*            经 典 小 游 戏          *\n";
    cout << "*               推 箱 子             *\n";
    cout << "*         1.按 S 或 s 键 开 始       *\n";
    cout << "*         2.按 Q 或 q 键 退 出       *\n";
    cout << "*                                    *\n";
    cout << "\\***********************************/\n";
    _getch();
}
void Game_description(){/*初始化模块,显示游戏操作说明*/
    cout << "/************************************\\\n";
    cout << "*                                    *\n";
    cout << "*              操 作 提 示           *\n";
    cout << "*        操作上移:  W   w   ↑      *\n";
    cout << "*        操作下移:  S   s   ↓      *\n";
    cout << "*        操作左移:  A   a   ←      *\n";
    cout << "*        操作右移:  D   d   →      *\n";
    cout << "*                                    *\n";
    cout << "*        退    出:  Q   q           *\n";
    cout << "*                                    *\n";
    cout << "*                                    *\n";
    cout << "\\***********************************/\n";
}
int DrawMap(){  //画图模块,绘制地图
    cout<<"关卡:"<<pass<<endl; 
    for (int i = 0; i < R; i++){
        for (int j = 0; j < C; j++){
            switch (map[i][j]){
                case 0:
                    color(0xF);
                    cout << "  ";  //空地
                    break;
                case 1:
                    color(8);
                    cout << "■";//墙体
                    break;
                case 3:
                    color(0xE);
                    cout << "☆";//目的地
                    break;
                case 4:
                    color(4);
                    cout << "□";//箱子 
                    break;
                case 5:
                    color(3);
                    cout << "♀"; //人
                    break;
                case 7:     //4+3   箱子到达目的地
                    color(6);   
                    cout << "★";
                    break;
                case 8:     //5+3  人与目的地重合
                    color(3);
                    cout << "♀";
                    break;
                default:
                break;
            }
        }
    cout <<endl;
    }
    return 0;
}
void setmap(int n){
    if (n == 1) {
        memcpy(map, map1, sizeof(map1));/* memcpy 将数组map1复制给map */
    }
    if (n == 2) {
        memcpy(map, map2, sizeof(map2));
    }
    if (n == 3) {
        memcpy(map, map3, sizeof(map3));
    }
    if (n == 4) {
        memcpy(map, map4, sizeof(map4));
    }
    if (n == 5) {
        memcpy(map, map5, sizeof(map5));
    }
    return ;
}
void color(int m) {         /*设置文本显示时的颜色*/
    HANDLE consolehend;
    consolehend = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台缓冲区句柄
    SetConsoleTextAttribute(consolehend, m);//参数一为控制台缓冲区句柄,参数二为要设置的颜色
    return ; 
}

0
张百川
张百川
新手光能
新手光能

#include<bits/stdc++.h> using namespace std; struct jxj{ int ch,ma,en,id; int sum() { return ch+ma+en; } }a[305]; bool cmp(jxj a,jxj b) { if(a.sum()!=b.sum()) { return a.sum()>b.sum(); } if(a.ch!=b.ch) { return a.ch>b.ch; } return a.id<b.id; } int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i].ch>>a[i].ma>>a[i].en; a[i].id=i; } sort(a+1,a+n+1,cmp); for(int i=1;i<=5;i++) { cout<<a[i].id<<" "<<a[i].sum()<<endl; } return 0; }

0
钱寅虎
钱寅虎
初级守护
初级守护

#include<bits/stdc++.h>

using namespace std;

int main(){

    for(int i=10;i<=97;i++){

for(int j=i;j<=97;j++){

for(int k=j;k<=97;k++){

if(10+i+j+k==97&&10+k-i-j==7){

cout<<10<<" "<<i<<" "<<j<<" "<<k<<endl;

}

}

}

}

    return 0;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0
钱寅虎
钱寅虎
初级守护
初级守护
  • #include<bits/stdc++.h>
  • using namespace std;
  • int a[100001];
  • int main(){
  • int n,t,v=0;
  • cin>>n;
  • for(int i=1;i<=n;i++){
  • cin>>t;
  • if(a[t]==1){
  • v++;
  • }
  • a[t]=1;
  • }
  • cout<<n-v<<endl;
  • for(int i=1;i<=100001;i++){
  • while(a[i]>0){
  • cout<<i<<" ";
  • a[i]--;
  • }
  • }
  • return 0;
  • }
0
钱寅虎
钱寅虎
初级守护
初级守护

#include<iostream>
 
#include<windows.h>
 
#include<conio.h>
 
#include<time.h>
 
#include<string>
 
using namespace std;
 
typedef struct Frame
 
{
 
    COORD position[2];
 
    int flag;
 
}Frame;
 
void SetPos(COORD a)
 
{
 
    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
 
    SetConsoleCursorPosition(out, a);
 
}
 
void SetPos(int i, int j)
 
{
 
    COORD pos={i, j};
 
    SetPos(pos);
 
}
 
void HideCursor()
 
{
 
    CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
 
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
 
}
 
 
 
//把第y行,[x1, x2) 之间的坐标填充为 ch
 
void drawRow(int y, int x1, int x2, char ch)
 
{
 
    SetPos(x1,y);
 
    for(int i = 0; i <= (x2-x1); i++) cout<<ch;
 
}
 
 
 
//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
 
void drawRow(COORD a, COORD b, char ch)
 
{
 
    if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch);
 
    else {
 
        SetPos(0, 25);
 
        cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";
 
        system("pause");
 
    }
 
}
 
 
 
//把第x列,[y1, y2] 之间的坐标填充为 ch
 
void drawCol(int x, int y1, int y2, char ch)
 
{
 
    int y=y1;
 
    while(y!=y2+1) {
 
        SetPos(x, y);
 
        cout<<ch;
 
        y++;
 
    }
 
}
 
 
 
//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
 
void drawCol(COORD a, COORD b, char ch)
 
{
 
    if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch);
 
    else {
 
        SetPos(0, 25);
 
        cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";
 
        system("pause");
 
    }
 
}
 
 
 
//左上角坐标、右下角坐标、用row填充行、用col填充列
 
void drawFrame(COORD a, COORD  b, char row, char col)
 
{
 
    drawRow(a.Y, a.X+1, b.X-1, row);
 
    drawRow(b.Y, a.X+1, b.X-1, row);
 
    drawCol(a.X, a.Y+1, b.Y-1, col);
 
    drawCol(b.X, a.Y+1, b.Y-1, col);
 
}
 
 
 
void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
 
{
 
    COORD a={x1, y1};
 
    COORD b={x2, y2};
 
    drawFrame(a, b, row, col);
 
}
 
 
 
void drawFrame(Frame frame, char row, char col)
 
{
 
    COORD a = frame.position[0];
 
    COORD b = frame.position[1];
 
    drawFrame(a, b, row, col);
 
}
 
 
 
void drawPlaying()
 
{
 
    drawFrame(0, 0, 48, 24, '=', '|');//    draw map frame;
 
    drawFrame(49, 0, 79, 4, '-', '|');//        draw output frame
 
    drawFrame(49, 4, 79, 9, '-', '|');//        draw score frame
 
    drawFrame(49, 9, 79, 20, '-', '|');//   draw operate frame
 
    drawFrame(49, 20, 79, 24, '-', '|');//  draw other message frame
 
    SetPos(52, 6);
 
    cout<<"得分:";
 
    SetPos(52, 7);
 
    cout<<"称号:";
 
    SetPos(52,10);
 
    cout<<"操作方式:";
 
    SetPos(52,12);
 
    cout<<"  a,s,d,w 控制战机移动。";
 
    SetPos(52,14);
 
    cout<<"  p 暂停游戏。";
 
    SetPos(52,16);
 
    cout<<"  e 退出游戏。";
 
}
 
 
 
//在[a, b)之间产生一个随机整数
 
int random(int a, int b)
 
{
 
    int c=(rand() % (a-b))+ a;
 
    return c;
 
}
void color(int b)         //颜色函数 
 
{
 
    HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ; 
 
    SetConsoleTextAttribute(hConsole,b) ;
 

 
 
 
 
//在两个坐标包括的矩形框内随机产生一个坐标
 
COORD random(COORD a, COORD b)
 
{
 
    int x=random(a.X, b.X);
 
    int y=random(a.Y, b.Y);
 
    COORD c={x, y};
 
    return c;
 
}
 
 
 
bool  judgeCoordInFrame(Frame frame, COORD spot)
 
{
 
    if(spot.X>=frame.position[0].X)
 
        if(spot.X<=frame.position[1].X)
 
            if(spot.Y>=frame.position[0].Y)
 
                if(spot.Y<=frame.position[0].Y)
 
                    return true;
 
    return false;
 
}
 
 
 
void printCoord(COORD a)
 
{
 
    cout    <<"( "<<a.X<<" , "<<a.Y<<" )";
 
}
 
 
 
void printFrameCoord(Frame a)
 
{
 
    printCoord(a.position[0]);
 
    cout    <<" - ";
 
    printCoord(a.position[1]);
 
}
 
 
 
int drawMenu()
 
{
 
    SetPos(30, 1);
 
    cout<<"P l a n e  W a r";
 
    drawRow(3, 0, 79, '-');
 
    drawRow(5, 0, 79, '-');
 
    SetPos(28, 4);
 
    cout<<"w 和 s 选择, k 确定";
 
    SetPos(15, 11);
 
    cout<<"1. 简单的敌人";
 
    SetPos(15, 13);
 
    cout<<"2. 冷酷的敌人";
 
    drawRow(20, 0, 79, '-');
 
    drawRow(22, 0, 79, '-');
 
    SetPos(47, 11);
 
    cout<<"简单的敌人:";
 
    SetPos(51, 13);
 
    cout<<"简单敌人有着较慢的移动速度。";
 
    int j=11;
 
    cout<<">>";
 
    while(1) {
 
        if( _kbhit() ) {    
 
            char x=_getch();
 
            switch (x) {
 
              case 'w' : {  
 
                if( j == 13) {
 
                  SetPos(12, j);
 
                  cout<<" ";
 
                  j = 11;
 
                  SetPos(12, j);
 
                  cout<<">>";
 
                  SetPos(51, 13);
 
                  cout<<"            ";
 
                  SetPos(47, 11);
 
                  cout<<"简单的敌人:";
 
                  SetPos(51, 13);
 
                  cout<<"简单敌人有着较慢的移动速度。";
 
                }
 
                break;
 
              }
 
              case 's' : {  
 
                if( j == 11 ) {
 
                  SetPos(12, j);
 
                  cout<<" ";        
 
                  j = 13;
 
                  SetPos(12, j);
 
                  cout<<">>";
 
                  SetPos(51, 13);
 
                   cout<<"              ";
 
                   SetPos(47, 11);
 
                   cout<<"冷酷的敌人:";
 
                   SetPos(51, 13);
 
                   cout<<"冷酷的敌人移动速度较快。";
 
                }
 
                break;
 
              }
 
              case 'k' : {  
 
                if (j == 8) return 1; else return 2;
 
              }
 
            }
 
        }
 
    }
 
}
 
/*================== the Game Class ==================*/
 
 
 
class Game
 
{
 
public:
 
    COORD position[10];
 
    COORD bullet[10];
 
    Frame enemy[8];
 
    int score;
 
    int rank;
 
    int rankf;
 
    string title;
 
    int flag_rank;
 
 
 
    Game ();
 
 
 
    //初始化所有
 
    void initPlane();
 
    void initBullet();
 
    void initEnemy();
 
 
 
    //初始化其中一个
 
    //void initThisBullet( COORD );
 
    //void initThisEnemy( Frame );
 
 
 
    void planeMove(char);
 
    void bulletMove();
 
    void enemyMove();
 
 
 
    //填充所有
 
    void drawPlane();
 
    void drawPlaneToNull();
 
    void drawBullet();
 
    void drawBulletToNull();
 
    void drawEnemy();
 
    void drawEnemyToNull();
 
 
 
    //填充其中一个
 
    void drawThisBulletToNull( COORD );
 
    void drawThisEnemyToNull( Frame );
 
 
 
    void Pause();
 
    void Playing();
 
    void judgePlane();
 
    void judgeEnemy();
 
 
 
    void Shoot();
 
 
 
    void GameOver();
 
    void printScore();
 
};
 
 
 
Game::Game()
 
{
 
    initPlane();
 
    initBullet();
 
    initEnemy();
 
    score = 0;
 
    rank = 25;
 
    rankf = 0;
 
    flag_rank = 0;
 
}
 
 
 
void Game::initPlane()
 
{
 
    COORD centren={39, 22};
 
    position[0].X=position[5].X=position[7].X=position[9].X=centren.X;
 
    position[1].X=centren.X-2;  
 
    position[2].X=position[6].X=centren.X-1;
 
    position[3].X=position[8].X=centren.X+1;
 
    position[4].X=centren.X+2;
 
    for(int i=0; i<=4; i++)
 
        position[i].Y=centren.Y;
 
    for(int i=6; i<=8; i++)
 
        position[i].Y=centren.Y+1;
 
    position[5].Y=centren.Y-1;
 
    position[9].Y=centren.Y-2;
 
}
 
 
 
void Game::drawPlane()
 
{
 
    for(int i=0; i<9; i++)
 
    {
 
        SetPos(position[i]);
 
        if(i!=5)
 
            cout<<"O";
 
        else if(i==5)
 
            cout<<"|";      
 
    }
 
}
 
 
 
void Game::drawPlaneToNull()
 
{
 
    for(int i=0; i<9; i++)
 
    {
 
        SetPos(position[i]);
 
        cout<<" ";
 
    }   
 
}
 
 
 
void Game::initBullet()
 
{
 
    for(int i=0; i<10; i++)
 
        bullet[i].Y = 30;
 
}
 
 
 
void Game::drawBullet()
 
{
 
    for(int i=0; i<10; i++)
 
    {
 
        if( bullet[i].Y != 30)
 
        {
 
            SetPos(bullet[i]);
 
            cout<<"Φ";  
 
        }
 
    }
 
}
 
 
 
void Game::drawBulletToNull()
 
{
 
    for(int i=0; i<10; i++)
 
        if( bullet[i].Y != 30 )
 
            {
 
                COORD pos={bullet[i].X, bullet[i].Y+1};
 
                SetPos(pos);
 
                cout<<" ";
 
            }   
 
}
 
 
 
void Game::initEnemy()
 
{
 
    COORD a={1, 1};
 
    COORD b={45, 15};
 
    for(int i=0; i<8; i++)
 
    {
 
        enemy[i].position[0] = random(a, b);
 
        enemy[i].position[1].X = enemy[i].position[0].X + 3;
 
        enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
 
    }
 
}
 
 
 
void Game::drawEnemy()
 
{
 
    for(int i=0; i<8; i++)
 
        drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
 
}
 
 
 
void Game::drawEnemyToNull()
 
{
 
    for(int i=0; i<8; i++)
 
    {
 
        drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
 
    }       
 
}
 
 
 
void Game::Pause()
 
{
 
    SetPos(61,2);
 
    cout<<"               ";
 
    SetPos(61,2);
 
    cout<<"暂停中...";
 
    char c=_getch();
 
    while(c!='p')
 
        c=_getch();
 
    SetPos(61,2);
 
    cout<<"         ";
 
}
 
 
 
void Game::planeMove(char x)
 
{
 
    if(x == 'a')
 
        if(position[1].X != 1)
 
            for(int i=0; i<=9; i++)
 
                position[i].X -= 2;
 
 
 
    if(x == 's')
 
        if(position[7].Y != 23)
 
            for(int i=0; i<=9; i++)
 
                position[i].Y += 1;
 
 
 
    if(x == 'd')
 
        if(position[4].X != 47)
 
            for(int i=0; i<=9; i++)
 
                position[i].X += 2;
 
 
 
    if(x == 'w')
 
        if(position[5].Y != 3)
 
            for(int i=0; i<=9; i++)
 
                position[i].Y -= 1;
 
}
 
 
 
void Game::bulletMove()
 
{
 
    for(int i=0; i<10; i++)
 
    {
 
        if( bullet[i].Y != 30)
 
        {
 
            bullet[i].Y -= 1;
 
            if( bullet[i].Y == 1 )
 
            {
 
                COORD pos={bullet[i].X, bullet[i].Y+1};
 
                drawThisBulletToNull( pos );
 
                bullet[i].Y=30;
 
            }
 
 
 
        }
 
    }
 
}
 
 
 
void Game::enemyMove()
 
{
 
    for(int i=0; i<8; i++)
 
    {
 
        for(int j=0; j<2; j++)
 
            enemy[i].position[j].Y++;
 
 
 
        if(24 == enemy[i].position[1].Y)
 
        {
 
            COORD a={1, 1};
 
            COORD b={45, 3};
 
            enemy[i].position[0] = random(a, b);
 
            enemy[i].position[1].X = enemy[i].position[0].X + 3;
 
            enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
 
        }
 
    }
 
}
 
 
 
void Game::judgePlane()
 
{
 
    for(int i = 0; i < 8; i++)
 
        for(int j=0; j<9; j++)
 
            if(judgeCoordInFrame(enemy[i], position[j]))
 
            {
 
                SetPos(62, 1);
 
                cout<<"坠毁";
 
                drawFrame(enemy[i], '+', '+');
 
                Sleep(1000);
 
                GameOver();
 
                break;
 
            }
 
}
 
 
 
void Game::drawThisBulletToNull( COORD c)
 
{
 
    SetPos(c);
 
    cout<<" ";
 
}
 
 
 
void Game::drawThisEnemyToNull( Frame f )
 
{
 
    drawFrame(f, ' ', ' ');
 
}
 
 
 
void Game::judgeEnemy()
 
{
 
    for(int i = 0; i < 8; i++)
 
        for(int j = 0; j < 10; j++)
 
            if( judgeCoordInFrame(enemy[i], bullet[j]) )
 
            {
 
                score += 5;
 
                drawThisEnemyToNull( enemy[i] );
 
                COORD a={1, 1};
 
                COORD b={45, 3};
 
                enemy[i].position[0] = random(a, b);
 
                enemy[i].position[1].X = enemy[i].position[0].X + 3;
 
                enemy[i].position[1].Y = enemy[i].position[0].Y + 2;                    
 
                drawThisBulletToNull( bullet[j] );
 
                bullet[j].Y = 30;
 
            }
 
}
 
 
 
void Game::Shoot()
 
{
 
    for(int i=0; i<10; i++)
 
        if(bullet[i].Y == 30)
 
        {
 
            bullet[i].X = position[5].X;
 
            bullet[i].Y = position[5].Y-1;
 
            break;
 
        }
 
}
 
 
 
void Game::printScore()
 
{
 
    if(score == 120 && flag_rank == 0)
 
    {
 
        rank -= 3;
 
        flag_rank = 1;
 
    }
 
 
 
    else if( score == 360 && flag_rank == 1)
 
    {
 
        rank -= 5;
 
        flag_rank = 2;
 
    }
 
    else if( score == 480 && flag_rank == 2)
 
    {
 
        rank -= 5;
 
        flag_rank = 3;
 
    }
 
    int x=rank/5;
 
    SetPos(60, 6);
 
    cout<<score;
 
 
 
    if( rank!=rankf )
 
    {
 
        SetPos(60, 7);
 
        if( x == 5)
 
            title="新手守护";
 
        else if( x == 4)
 
            title="资深守护";
 
        else if( x == 3)
 
            title="缔造者守护";
 
        else if( x == 2 )
 
            title="战狼守护";
            else if(x==1)
            title="绝地武士守护";
            else if(x=0)
            title="缔造者之神守护"; 
 
        cout<<title;
 
    }
 
    rankf = rank;
 
}
 
 
 
void Game::Playing()
 
{
 
 
 
 
    drawEnemy();
 
    drawPlane();
 
 
 
    int flag_bullet = 0;
 
    int flag_enemy = 0;
 
 
 
    while(1)
 
    {
 
        Sleep(8);
 
        if(_kbhit())
 
        {
 
            char x = _getch();
 
            if ('a' == x || 's' == x || 'd' == x || 'w' == x)
 
            {
 
                drawPlaneToNull();
 
                planeMove(x);
 
                drawPlane();
 
                judgePlane();
 
            }           
 
            else if ('p' == x)
 
                Pause();
 
            else if( 'k' == x)
 
                Shoot();
 
            else if( 'e' == x)
 
            {
 
                //CloseHandle(MFUN);
 
                GameOver();
 
                break;
 
            }
 
 
 
        }
 
        /* 处理子弹 */
 
        if( 0 == flag_bullet )
 
        {
 
            bulletMove();
 
            drawBulletToNull();
 
            drawBullet();
 
            judgeEnemy();
 
        }           
 
        flag_bullet++;
 
        if( 5 == flag_bullet )
 
            flag_bullet = 0;
 
 
 
        /* 处理敌人 */
 
        if( 0 == flag_enemy )
 
        {
 
            drawEnemyToNull();
 
            enemyMove();            
 
            drawEnemy();
 
            judgePlane();
 
        }
 
        flag_enemy++;
 
        if( flag_enemy >= rank )
 
            flag_enemy = 0;
 
 
 
        /* 输出得分 */
 
        printScore();
 
    }
 
}
 
 
 
void Game::GameOver()
 
{
 
    system("cls");              
 
    COORD p1={28,9};
 
    COORD p2={53,15};
 
    drawFrame(p1, p2, '=', '|');
 
    SetPos(36,12);
 
    string str="Game Over!";
 
    for(int i=0; i<str.size(); i++)
 
    {
 
        Sleep(80);
 
        cout<<str[i];
 
    }
 
    Sleep(1000);
 
    system("cls");
 
    drawFrame(p1, p2, '=', '|');
 
    SetPos(31, 11);
 
    cout<<"击落敌机:"<<score/5<<" 架";
 
    SetPos(31, 12);
 
    cout<<"得  分:"<<score<<" 分";
 
    SetPos(31, 13);
 
    cout<<"获得称号:"<<title;
 
    SetPos(30, 16);
 
    Sleep(1000);
 
    cout<<"继续? 是(y)| 否(n)";
 
as:
 
    char x=_getch();
 
    if (x == 'n')
 
        exit(0);
 
    else if (x == 'y')
 
    {
 
        system("cls");
 
        Game game;
 
        int a = drawMenu();
 
        if(a == 2)
 
            game.rank = 20;
 
        system("cls");
 
        drawPlaying();
 
        game.Playing();
 
    }
 
    else goto as;
 
}
 
 
 
/*================== the main function ==================*/
 
int main()
 
{
 
    //游戏准备
 
    srand((int)time(0));    //随机种子
 
    HideCursor();   //隐藏光标
 
 
 
    Game game;
 
    int a = drawMenu();
 
    if(a == 2)
 
        game.rank = 20;
 
    system("cls");
 
    drawPlaying();
 
    game.Playing();
 
}

0
岳成浩
岳成浩
资深守护
资深守护

#include<iostream>

#include<cstdio>

#include<cmath>

#include<cstring>

#include<string>

#include<algorithm>

using namespace std;

int m;

void zs(){

    cin>>m;

    bool f=1;

    if(m==1){

        cout<<1;

        f=0;

    }

    for(int i=2;i<=sqrt(m);i++){

        if(m%i==0){

            cout<<m/i;

            f=0;

            break;

        }

    }

    if(f==1) {

        cout<<"YES";

    }

}

int main(){

    zs();

    return 0;

}

0
0
钱寅虎
钱寅虎
初级守护
初级守护
  • #include <iostream>
  • #include <string>
  • #include <algorithm>
  • using namespace std;
  • int main(){
  • string s;
  • getline(cin,s);
  • for(int i=0;i<s.size();i++){
  • if(s[i]>='a'&&s[i]<='z')
  • s[i]-=32;
  • else if(s[i]>='A'&&s[i]<='Z')
  • s[i]+=32;
  • }
  • for(int i=0;i<=s.size()-1;i++){
  • if(s[i]>='C'&&s[i]<='Z'||s[i]>='c'&&s[i]<='z')
  • s[i]-=2;
  • else{
  • s[i]+=24;
  • }
  • }
  • for(int i=s.size()-1;i>=0;i--){
  • cout<<s[i];
  • }
  • return 0
  • }
0
李锦昊
李锦昊
中级天翼
中级天翼
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string a[105];
int n,m;
bool cmp(string a,string b) {
    if(a.size()!=b.size())
        return a.size()<b.size();
    return a<b;
}
bool cmp1(string a,string b){
    return a+b<b+a;
}
int main( ) {
    cin>>n;
    for( int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1,cmp);
    sort(a+1,a+n+1,cmp1);
    for(int i=1;i<=n;i++){
        cout<<a[i];
    }
    return 0;
}

 

0
钱寅虎
钱寅虎
初级守护
初级守护
  • #include<bits/stdc++.h>
  • using namespace std;
  • int s(int x,int y){
  • int sum=0,k=1,k1=1;
  • for(int i=1;i<=x;i++)
  • {
  • k*=i;
  • }
  • for(int j=1;j<=y;j++)
  • {
  • k1*=j;
  • }
  • sum=k+k1;
  • return sum;
  • }
  • int main(){
  • int i,j;
  • cin>>i>>j;
  • cout<<s(i,j);
  • return 0;
  • }
0
钱寅虎
钱寅虎
初级守护
初级守护

#include <iostream>
#include <cstdio> 
#include <conio.h>//函数_getch()所需头文件 
#include <windows.h>
#include <iomanip>//输入输出流控制符setw()所在头文件,设置字段宽度为n位
using namespace std; 
#define R 10//行 
#define C 10//列
/*二维数组地图
1.表示墙体
3.表示目的地
4.表示箱子
5.表示人
0.表示空地
*/
//存储当前使用的地图
int map[R][C] = { 0 };
//地图 1(关卡1)
int map1[10][10]={
    { 0,0,0,0,1,1,1,0,0,0 },
    { 0,0,0,0,1,5,1,0,0,0 },
    { 0,0,0,0,1,4,1,0,0,0 },
    { 0,0,0,0,1,0,1,0,0,0 },
    { 0,0,0,0,1,0,1,0,0,0 },
    { 0,0,0,0,1,3,1,0,0,0 },
    { 0,0,0,0,1,1,1,0,0,0 },
};
//地图 2(关卡2)
int map2[R][C]={
    { 0,0,0,1,1,1,1,0,0,0 },
    { 0,0,0,1,0,5,1,0,0,0 },
    { 0,0,0,1,0,4,1,0,0,0 },
    { 0,0,0,1,0,0,1,0,0,0 },
    { 0,0,0,1,0,0,1,1,1,1 },
    { 0,0,0,1,0,0,0,0,3,1 },
    { 0,0,0,1,1,1,1,1,1,1 },
};
//地图 3(关卡3)
int map3[R][C] = {
    { 0,0,1,1,1,0,0,0 },
    { 0,0,1,3,1,0,0,0 },
    { 0,0,1,0,1,1,1,1 },
    { 1,1,1,0,0,4,3,1 },
    { 1,3,4,4,0,1,1,1 },
    { 1,1,1,5,4,1,0,0 },
    { 0,0,0,1,3,1,0,0 },
    { 0,0,0,1,1,1,0,0 }
};
int map4[R][C]={
    {1,1,1,1,1,0,0,0,0,0},
    {1,5,0,0,1,0,0,0,0,0},
    {1,0,4,4,1,0,1,1,1,0},
    {1,0,4,0,1,0,1,3,1,0},
    {1,1,1,0,1,1,1,3,1,0},
    {0,1,1,0,0,0,0,3,1,0},
    {0,1,0,0,0,1,0,0,1,0},
    {0,1,0,0,0,1,1,1,1,0},
    {0,1,1,1,1,1,0,0,0,0}
};
int map5[R][C]={
    { 0,0,0,1,1,1,1,1,1,1 },
    { 0,0,1,1,0,0,1,0,5,1 },
    { 0,0,1,0,0,0,1,0,0,1 },
    { 0,0,1,4,0,4,0,4,0,1 },
    { 0,0,1,0,4,1,1,0,0,1 },
    { 1,1,1,0,4,0,1,0,1,1 },
    { 1,3,3,3,3,3,0,0,1,0 },
    { 1,1,1,1,1,1,1,1,1,0 },
}; 
//函数声明
void Game_Menu();               /*初始化模块,显示游戏开始菜单*/
void Game_description();           /*初始化模块,显示游戏操作说明*/
int DrawMap();                  /*画图模块,绘制地图*/
void Move();                    /*移动模块,操作人物和箱子的移动*/
int finish();                    /*判断游戏是否挑战成功*/
void setmap(int n);               /*游戏关卡设置 */
void color(int m);               /*设置文本显示时的颜色*/
BOOL flag = true;                /*定义布尔值的标记,方便在游戏时直接退出*/ 
 
int pass=1;//初始关卡值 
 
int main(){
     char c;//用户输入S或Q 
     Game_Menu();
     c = getch();
     setmap(pass);//首先设置第一关 
     switch(c){
          case 'Q':
          case 'q':
           return 0;
          case 'S':
          case 's':
           while (flag){  /*游戏主体*/
            system("cls");
            Game_description();
            DrawMap();
            Move();//调用该函数时会有等待键盘输入的中断 
            if(finish()){
                 system("cls");
                 DrawMap();
                 printf("游戏胜利!\n");
                 system("pause"); 
                 pass++;
                 setmap(pass);
            }
           }
           break;
     }
     return 0;
}
void Move(){
     int r,c;
     for(int i=0;i<R;i++){ 
          for(int j=0;j<C;j++){
               if(map[i][j]==5||map[i][j]==8){
                r=i;
                c=j;
               }
          }
     }
     cout<<"您当前的坐标为:("<<r<<","<<c<<")"<<endl;
     int ch; 
     ch=_getch();
     switch(ch){
          case 'W':
          case 'w':
          case 72:
           if(map[r-1][c]==0||map[r-1][c]==3){ 
            map[r-1][c]+=5;
            map[r][c]-=5;
           } 
           else if(map[r-1][c]==4||map[r-1][c]==7){
            if(map[r-2][c]==0||map[r-2][c]==3){
                 map[r-2][c]+=4;
                 map[r-1][c]+=1;
                 map[r][c]-=5;
            }
           }
           break;
          case 'S':
          case 's':
          case 80:
           if(map[r+1][c]==0||map[r+1][c]==3){
            map[r+1][c]+=5;
            map[r][c]-=5;
           }
           else if(map[r+1][c]==4||map[r+1][c]==7){
            if(map[r+2][c]==0||map[r+2][c]==3){
                 map[r+2][c]+=4;
                 map[r+1][c]+=1;
                 map[r][c]-=5;
            }
           }
           break;
          case 'A':
          case 'a':
          case 75:
           if(map[r][c-1]==0||map[r][c-1]==3){
            map[r][c-1]+=5;
            map[r][c]-=5;
           }
           else if(map[r][c-1]==4||map[r][c-1]==7){
            if(map[r][c-2]==0||map[r][c-2]==3){
                 map[r][c-2]+=4;
                 map[r][c-1]+=1;
                 map[r][c]-=5; 
            }
           }
           break;
          case 'D':
          case 'd':
          case 77:
           if(map[r][c+1]==0||map[r][c+1]==3){
            map[r][c+1]+=5;
            map[r][c]-=5;
           }
           else if(map[r][c+1]==4||map[r][c+1]==7){
            if(map[r][c+2]==0||map[r][c+2]==3){
                 map[r][c+2]+=4;
                 map[r][c+1]+=1;
                 map[r][c]-=5;
            }
           }
           break; 
          case 'Q':
          case 'q':
           flag=false;
          default:
           break;
     }
     return ;
}
int finish(){            /*判断游戏是否挑战成功*/
     for (int i=0;i<R;i++){
          for (int j=0;j<C;j++){
               if (map[i][j] == 4){ 
                return 0;
               } 
          }
     }
     return 1;/*当整个二维数组没有4(箱子) ,表明箱子都到位,返回1    */

void Game_Menu(){   //游戏菜单,初始化模块,显示游戏开始菜单
     system("cls");
     cout << "/************************************\\\n";
     cout << "*                                    *\n";
     cout << "*            经 典 小 游 戏          *\n";
     cout << "*               推 箱 子             *\n";
     cout << "*         1.按 S 或 s 键 开 始       *\n";
     cout << "*         2.按 Q 或 q 键 退 出       *\n";
     cout << "*                                    *\n";
     cout << "\\***********************************/\n";
     _getch();
}
void Game_description(){/*初始化模块,显示游戏操作说明*/
     cout << "/************************************\\\n";
     cout << "*                                    *\n";
     cout << "*              操 作 提 示           *\n";
     cout << "*        操作上移:  W   w   ↑      *\n";
     cout << "*        操作下移:  S   s   ↓      *\n";
     cout << "*        操作左移:  A   a   ←      *\n";
     cout << "*        操作右移:  D   d   →      *\n";
     cout << "*                                    *\n";
     cout << "*        退    出:  Q   q           *\n";
     cout << "*                                    *\n";
     cout << "*                                    *\n";
     cout << "\\***********************************/\n";
}
int DrawMap(){  //画图模块,绘制地图
     cout<<"关卡:"<<pass<<endl; 
     for (int i = 0; i < R; i++){
          for (int j = 0; j < C; j++){
               switch (map[i][j]){
                   case 0:
                    color(0xF);
                    cout << "  ";  //空地
                    break;
                   case 1:
                    color(8);
                    cout << "■";//墙体
                    break;
                   case 3:
                    color(0xE);
                    cout << "☆";//目的地
                    break;
                   case 4:
                    color(4);
                    cout << "□";//箱子 
                    break;
                   case 5:
                    color(3);
                    cout << "♀"; //人
                    break;
                   case 7:     //4+3   箱子到达目的地
                    color(6);   
                    cout << "★";
                    break;
                   case 8:     //5+3  人与目的地重合
                    color(3);
                    cout << "♀";
                    break;
                   default:
                break;
               }
          }
      cout <<endl;
     }
     return 0;
}
void setmap(int n){
     if (n == 1) {
          memcpy(map, map1, sizeof(map1));/* memcpy 将数组map1复制给map */
     }
     if (n == 2) {
          memcpy(map, map2, sizeof(map2));
     }
     if (n == 3) {
          memcpy(map, map3, sizeof(map3));
     }
     if (n == 4) {
          memcpy(map, map4, sizeof(map4));
     }
     if (n == 5) {
          memcpy(map, map5, sizeof(map5));
     }
     return ;
}
void color(int m) {            /*设置文本显示时的颜色*/
     HANDLE consolehend;
     consolehend = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台缓冲区句柄
     SetConsoleTextAttribute(consolehend, m);//参数一为控制台缓冲区句柄,参数二为要设置的颜色
     return ; 
}
 

0
钱寅虎
钱寅虎
初级守护
初级守护

#include<bits/stdc++.h>
using namespace std;
struct xx{
string name;
int q1,q2,q3,q4;
double pj(){
return (q1+q2+q3+q4)/3.0;
}
}a[65];
int main(){
int n,pos;
double minn=0x3f3f3f3f;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].name>>a[i].q1>>a[i].q2>>a[i].q3;
if(a[i].pj()<minn&&a[i].q1!=0&&a[i].q2!=0&&a[i].q3!=0){
minn=a[i].pj();
pos=i;
}
}
cout<<a[pos].name<<" "<<a[pos].q1<<" "<<a[pos].q2<<" "<<a[pos].q3;
return 0;
}

0
李锦昊
李锦昊
中级天翼
中级天翼
if(a[i]+a[j]<=w){
            i++;
            j--;
            cnt++; 
        }
        else{
            j--;
            cnt++;
        }

 

0
陈家傲
陈家傲
新手光能
新手光能

@酷町侠 快来看呀!!!要打起来了·~~~​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

0
李锦昊
李锦昊
中级天翼
中级天翼
#include<bits/stdc++.h>
using namespace std;
int n,w,cnt; 
int a[305];
int main(){
    cin>>w>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    int i=1,j=n;
    while(i<=j){
        if(a[i]+a[j]<=w){
            i++;
            j--;
            cnt++; 
        }
        else{
            j--;
            cnt++;
        }
    }
    cout<<cnt;
    return 0;
}

 

0
0
岳成浩
岳成浩
资深守护
资深守护

using namespace std;
int a,cnt;
bool zs(int m){
    if(m==1){
        return false;
    }
    for(int i=2;i<=sqrt(m);i++){
        if(m%i==0){
            return false;
        }
    }
    return true;
}
int main(){
    cin>>a;
    for(int i=1;i<=sqrt(a);i++){
        if(a%i==0&&a/i!=i){
            cnt+=i;
            cnt+=a/i;
        }
        else if(a%i==0&&a/i==i){
            cnt+=i;
        }
    }
    cout<<cnt;
}

 

0
钱寅虎
钱寅虎
初级守护
初级守护
  • string a,b;
  • int m,x,y;
  • cin>>a>>b>>m>>x>>y;
  • if(m>a.size())
  • {
  • a.insert(a.size(),b);
  • }
  • else
  • {
  • a.insert(m-1,b);
  • }
  • a.erase(x-1,y);
  • cout<<a;
0
钱寅虎
钱寅虎
初级守护
初级守护
  • string s1,s2;
  • cin>>s1>>s2;
  • if(s1.find(s2,0)!=-1)
  • cout<<s2<<" is included in "<<s1;
  • else if(s2.find(s1,0)!=-1)
  • cout<<s1<<" is included in "<<s2;
  • else cout<<"No including";
0
李锦昊
李锦昊
中级天翼
中级天翼

头文件没有

int zhi(int x){
    int cnt=0;
    for(int i=2;i<=x;i++){
        if(x%i==0){
            cnt++;
            while(x%i==0){
                x/=i;
            }
        }
    }
    return cnt;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(maxn<zhi(a[i])){
            maxn=zhi(a[i]);
            pos=a[i];
        }
    }
    cout<<pos;
    return 0;
}

 

0
李锦昊
李锦昊
中级天翼
中级天翼
#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005],n,maxn,cnt;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[a[i]]=1;
		maxn=max(maxn,a[i]);
	}
	for(int i=1;i<=n;i++){
		for(int j=2*a[i];j<=maxn;j+=a[i]){
			if(b[j]){
				cnt++;
				break;
			}
		}
	}
	cout<<cnt;
	return 0;
}

 

李锦昊在2021-06-12 13:32:04追加了内容
#include<bits/stdc++.h>
using namespace std;
int a,pos,cnt,b[10000002],maxn; 
int main(){
	int n;
	cin>>n;
	for(int i=2;i<=n;i++){
		if(b[i]==0){
			for(int j=i*2;j<=n;j+=i){
				b[j]++;
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(b[i]>maxn){
			maxn=b[i];
			pos=i;
		}
	}
	cout<<pos<<" "<<maxn;
	return 0;
}

 

0
钱寅虎
钱寅虎
初级守护
初级守护
  • #include<bits/stdc++.h>
  • using namespace std;
  • int a[1010][1010],b[1000010];
  • void work(int n,int m){
  • int i,j,x=0,y=1;
  • for(i=1;i<=n/2;i++){
  • for(j=i;j<=m-i;j++) b[++x]=a[i][j];
  • for(j=i;j<=n-i;j++) b[++x]=a[j][m-i+1];
  • for(j=m-i+1;j>=i+1;j--) b[++x]=a[n-i+1][j];
  • for(j=n-i+1;j>=i+1;j--) b[++x]=a[j][i];
  • }
  • if(n%2){
  • for(int j=n/2+1;j<=m-(n/2+1)+1;j++){
  • b[++x]=a[n/2+1][j];
  • }
  • }
  •  
  • }
  • int main(){
  • int n,m,i,j;
  • cin>>n>>m;
  • for(i=1;i<=n;i++){
  • for(j=1;j<=m;j++){
  • cin>>a[i][j];
  • }
  • }
  • work(n,m);
  • for(int i=1;i<=n*m;i++){
  • cout<<b[i]<<" ";
  • if(i%m==0)
  • cout<<endl;
  • }
  • return 0;
  • }
0
钱寅虎
钱寅虎
初级守护
初级守护

#include<bits/stdc++.h>
using namespace std;
struct xx{
int id,age;
}a[1010];
bool cmp(xx x,xx y){
if(x.age>=60&&y.age>=60){
if(x.age==y.age){
return x.id<y.id;
}else{
return x.age>y.age; } }else if(x.age<60&&y.age<60){
return x.id<y.id;
}else{
return x.age>y.age;
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].id>>a[i].age;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
cout<<a[i].id<<endl;
}
return 0;
}

0
张百川
张百川
新手光能
新手光能

#include<bits/stdc++.h>
using namespace std;
struct xs{
    char x;
    string m;
    int id;
}a[105];
bool cmp(xs a,xs b)
{
    if(a.x!=b.x)
    return a.x<b.x;
    if(a.m!=b.m)
    return a.m<b.m;
    return a.id>b.id;
    
}
int main()
{
    int n;
    cin>>n;
    getchar();
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].x;
        cin>>a[i].m;
        cin>>a[i].id;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++)
    {
        cout<<a[i].x<<" "<<a[i].m<<" "<<a[i].id<<endl;
    }
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
struct cj{
    int id;
    double v;
}a[10005];
bool cmp(cj a,cj b)
{
    if(a.v!=b.v)
    return a.v>b.v;
    return a.id<b.id; 
}
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].id>>a[i].v;
    }
    sort(a+1,a+n+1,cmp);
    cout<<a[m].id<<" ";
    printf("%.1f",a[m].v);
    return 0;
}
 

0
钱寅虎
钱寅虎
初级守护
初级守护

#include<bits/stdc++.h>

using namespace std;

long long sum;

struct xx{

    string name;

    int qm,py;

    char stu,xb;

    int sci;

    int num;

    int id;

}a[105];

bool cmp(xx x,xx y){

    if(x.num!=y.num){

        return x.num>y.num;

    }

    return x.id<y.id;

}

int main(){

    int n;

    cin>>n;

    for(int i=1;i<=n;i++){

        cin>>a[i].name>>a[i].qm>>a[i].py>>a[i].stu>>a[i].xb>>a[i].sci;

        a[i].id=i;

        if(a[i].qm>80&&a[i].sci>=1){

            a[i].num+=8000;

        }

        if(a[i].qm>85&&a[i].py>80){

            a[i].num+=4000;

        }

        if(a[i].qm>90){

            a[i].num+=2000;

        }

        if(a[i].qm>85&&a[i].xb=='Y'){

            a[i].num+=1000;

        }

        if(a[i].py>80&&a[i].stu=='Y'){

            a[i].num+=850;

        }

        sum+=a[i].num;

    }

    sort(a+1,a+n+1,cmp);

    cout<<a[1].name<<endl<<a[1].num<<endl<<sum;

    return 0;

}

 

0
岳成浩
岳成浩
资深守护
资深守护
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int wssum(int x){
    int sum=0;
    while(x!=0){    
        sum+=x%10;
        x/=10;
    }
    return sum;
}
int main()
{
    string a;
    int sum=0;
    cin>>a;
    for(int i=0;i<=a.length()-1;i++){
        sum+=(int)a[i]-48;
     }
     cout<<sum;
    return 0;
}

 

0
岳成浩
岳成浩
资深守护
资深守护

void f(int m){
    int a,sum=0,cnt=0;
    for(int i=1;i<=m;i++){
        cin>>a;
        cnt++;
        sum+=a;
    }
    printf("%.1f",sum*1.0/cnt);
    cout<<endl;
}
int main(){
    int m,n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>m;
        f(m);
    }
    return 0;
}
0
李锦昊
李锦昊
中级天翼
中级天翼
using namespace std;
int a[10005],b[205],c[205],n,m,ans,ans1,j,jl;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++){
        if(i%2==1){
            b[++j]=a[i];
        } 
        if(i%2==0){
            c[++jl]=a[i];
        } 
    }
    for(int i=1;i<=j;i++){
        ans+=b[i]*(j-i+1);
//      cout<<b[i]<<" ";
    }
//  cout<<endl;
    for(int i=1;i<=jl;i++){
        ans1+=c[i]*(jl-i+1);
//      cout<<c[i]<<" ";
    }
    cout<<ans+ans1;
    return 0;
}

 

0
李锦昊
李锦昊
中级天翼
中级天翼
#include<bits/stdc++.h>
using namespace std;
int n,w,cnt; 
int a[30005];
int main(){
    cin>>n>>w;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    int i=1,j=n;
    while(i<=j){
        if(a[i]+a[j]<=w){
            i++;
            j--;
            cnt++; 
        }
        else{
            j--;
            cnt++;
        }
        // cout<<i<<' '<<j<<endl;
    }
    cout<<cnt;
    return 0;
}

 

0
李锦昊
李锦昊
中级天翼
中级天翼
int main(){
    for(int i=1;i<=10005;i++){
        cin>>a[i];
        if(a[i]==0){
            break;
        }
        n++;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

 

0
李锦昊
李锦昊
中级天翼
中级天翼
struct su{
    string name;
    int p;
}a[25];
string s;
bool cmp(su x,su y){
    if(x.p!=y.p){
        return x.p>y.p;
    }
    return x.name<y.name;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].name;
        a[i].p=0;
    }
    for(int i=1;i<=n;i++){
        cin>>s;
        for(int j=1;j<=n;j++){
            if(s==a[j].name){
                a[j].p++;
            }
        }
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<a[i].name<<" "<<a[i].p<<endl;
    }

 

0
李锦昊
李锦昊
中级天翼
中级天翼
#include<stdio.h>
#include<windows.h>
int main(){
    while(1)
    {
        if(GetAsyncKeyState(VK_SPACE))
        {
            while(1){
                mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,0,0,0,0);//当前位置点击一次鼠标
                Sleep(20);
                if(GetAsyncKeyState(VK_ESCAPE))return 0; //按esc退出
            }
        }
    }
    return 0;
}

 

0
李锦昊
李锦昊
中级天翼
中级天翼
#include<bits/stdc++.h>
string a[105];
int n,m;
bool cmp(string a,string b){
    if(a.size()!=b.size())
        return a.size()<b.size();
    return a<b;
}
bool cmp1(string a,string b){

}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1,cmp);
    sort(a+1,a+m+1,cmp1);
    return 0;
}

 

0
李锦昊
李锦昊
中级天翼
中级天翼
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string a[105];
int n,m;
bool cmp(string a,string b) {
    if(a.size()!=b.size())
        return a.size()<b.size();
    return a<b;
}
bool cmp1(string a,string b){
    return a+b<b+a;
}
int main( ) {
    cin>>n>>m;
    for( int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1,cmp);
    sort(a+1,a+m+1,cmp1);
    for(int i=1;i<=m;i++){
        cout<<a[i];
    }
    return 0;
}

 

我要回答