问题标题: 酷町堂:大家有没有一些游戏代码,我要参考参考

3
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("正在游戏");

}


2
已采纳
刘欣然
刘欣然
高级光能
高级光能

在CSDN博客里搜C++游戏源代码可得游戏源码

推荐(我把代码复制进下面的网址)

21点

俄罗斯方块

夏洛的鸟(下落的鸟)

没了

以上摘自CSDN博客

刘欣然在2020-04-21 20:46:40追加了内容
刘欣然在1876-01-09 10:22:38追加了内容
刘欣然在2020-04-21 20:46:48追加了内容
刘欣然在1876-01-09 10:22:38追加了内容
刘欣然在2020-04-21 20:50:29追加了内容

DEV自带游戏

打开DEVC++-文件-项目-Console-Jackpot

(只不过是全英文的,也挺好玩)

0
沈峻宇
沈峻宇
资深天翼
资深天翼
#include<bits/stdc++.h>
#include<windows.h>
#include<ctime>
using namespace std;
int main(){
	MessageBox(NULL,"欢迎使用由沈大师制作的史上最囧游戏1.5版本~祝您游戏愉快","最囧游戏",MB_OK);
		int minn=1,maxn=10,ans;
	srand((int)time(NULL));
	ans=minn+rand()%(maxn-minn+1);
	cout<<"游戏启动中,正在载入游戏,请稍等"<<endl;
	Sleep(1000);
	for(int i=1;i<=100;i++){
		cout<<"已完成%"<<i;
		Sleep(100);
		system("cls");
	}
	cout<<"\n游戏加载完成"<<endl;
	Sleep(1000);
	system("cls");
	cout<<"输入你的名字"<<endl; 
	string a;
	cin>>a;
	cout<<a<<"是猪"<<endl;
	cout<<"哈哈哈哈哈"<<endl;
	cout<<"你有啥想说的"<<endl;
	string b;
	cin>>b;
	cout<<"你再说一遍!"<<endl;
	string c;
	cin>>c;
	if(c==b){
		cout<<"真乖狗狗!"; 
	}
	else{
		cout<<"不敢?胆小!惩罚!关机!";
		Sleep(1100);
		cout<<"吓你玩的!"; 
	}
	Sleep(1100);
	system("cls");
	cout<<"好吧,说正事"<<endl<<"从二十六个字母中选一个字母输入(大写)"<<endl;
	char d;
	cin>>d; 
	cout<<"嗯,如果你是女的,你很肥美。如果你是男的,你是个渣男!"<<endl;
	cout<<"哈哈哈哈哈哈";
	Sleep(1000);
	system("cls");
	cout<<endl<<"你要投诉这个程序吗(要/不要)(首字母大写)?"<<endl;
	string e;
	cin>>d;
	if(d=='Y'){
		cout<<"正在起诉中!请稍后………………";
		cout<<endl<<"起诉成功!";
		cout<<endl<<"正在核实……"<<endl<<"非法起诉!!!可恶!!!你被诬陷罪名关机!" ;
		Sleep(1100);
		cout<<"吓你玩的!"; 
	}
	else if(d=='B'){
		cout<<"谢谢,但是这程序貌似出现了一些诡异的情况…………"<<endl;
		cout<<"好了,太恐怖了。"; 
	} 
	else{
		cout<<"弄啥来?想死?"; 
	}
	Sleep(1100);
	system("cls");
	cout<<endl<<"你也被我坑了不少回了,想接着运行下去吗?(想/不想)(首字母大写)"<<endl;
	char f;
	cin>>f;
	if(f=='X'){
		cout<<"你真美!你真帅,前面说的都是狗屁!"<<endl;
		cout<<"那我们接着玩吧!"<<endl;
		cout<<"将十三除以二,加上100,减去89,减去200000.87567=?"<<endl;
		int h;
		cin>>h;
		cout<<"我也爱你哦!";
		cout<<endl<<"我说,你是男的女的?(N(男)/V(女)(大写))"<<endl;
		Sleep(2000);
		char i;
		cin>>i;
		if(i=='N'){
			cout<<"不错……"<<endl<<"你有喜欢的女生吗?(有/没有)(首字母大写)"<<endl;
			char j;
			cin>>j;
			if(j=='Y'){
				cout<<"哦…………这里明明什么都没,但是某种东西增加了!";
			}
			if(j=='M'){
				cout<<"哦…………祝你找到女朋友!"; 
			} 
		}
		if(i=='V'){
			cout<<"不错……"<<endl<<"你有喜欢的男生吗?(有/没有)(首字母大写)"<<endl;
			char j;
			cin>>j;
			if(j=='Y'){
				cout<<"哦…………这里明明什么都没,但是某种东西增加了!";
			}
			if(j=='M'){
				cout<<"哦…………祝你找到男朋友!"; 
			} 
		}
		Sleep(1000);
		cout<<endl<<"滋滋滋滋滋滋,不不不不不不都员工服阿萨德衣服噶偶有人管阿贵歌容易和担保法尔AV发生的不不vfhv26587263487956"<<endl;
		cout<<"电脑出现了一些故障,你要帮他吗?(要/不要)(首字母大写)"; 
		Sleep(1111);
		char k;
		cin>>k;
		if(k=='Y'){
			cout<<"谢谢,电脑好了!mua~mua~mua~";
			cout<<"好的,请问这游戏满分十分,你觉得能打多少分?";
			int g;
			cin>>g;
			if(g==10){
			cout<<"谢谢好评,你的鼓励,我记住了。"; 
			}
			if(g<=5){
			cout<<"好吧,我在努力……呜呜呜";
			}
			if(g>=5&&g<10){
			cout<<"谢谢";
			} 
	}
		else{
		
		}
	if(k=='B'){ 	
			cout<<"好的,请问这游戏满分十分,你觉得能打多少分?";
			int g;
			cin>>g;
			if(g==10){
			cout<<"谢谢好评,你的鼓励,我记住了。"; 
			}
			if(g<=5){
			cout<<"好吧,我在努力……呜呜呜";
			}
			if(g>=5&&g<10){
			cout<<"谢谢";
			} 
		}
		else{
		
		}
	}
	else if(f=='B'){
		cout<<"好的,请问这游戏满分十分,你觉得能打多少分?";
		int g;
		cin>>g;
		if(g==10){
			cout<<"谢谢好评,你的鼓励,我记住了。"; 
		}
		if(g<=5){
			cout<<"好吧,我在努力……呜呜呜";
		}
		if(g>=5&&g<10){
			cout<<"谢谢";
		} 
	}
	else{
		
	}
	return 0;	 
}

我的原创,望采纳!

https://wenda.codingtang.com/questions/7800/

沈峻宇在2020-04-22 12:02:13追加了内容

楼主的游戏也不错诶!赞赞!

沈峻宇在2020-04-22 12:06:45追加了内容

上面那是1.5版本

这是最新版本!

#include<bits/stdc++.h>
#include<windows.h>
#include<ctime>
using namespace std;
int main(){
	MessageBox(NULL,"欢迎使用由沈大师制作的史上最囧游戏1.5版本~祝您游戏愉快","最囧游戏",MB_OK);
		int minn=1,maxn=10,ans;
	srand((int)time(NULL));
	ans=minn+rand()%(maxn-minn+1);
	cout<<"游戏启动中,正在载入游戏,请稍等"<<endl;
	Sleep(1000);
	system("cls");
	for(int i=1;i<=100;i++){
		cout<<"已完成%"<<i;
		Sleep(100);
		system("cls");
	}
	cout<<"\n游戏加载完成"<<endl;
	Sleep(1000);
	system("cls");
	cout<<"输入你的名字"<<endl; 
	string a;
	cin>>a;
	if(a=="沈峻宇"){
		cout<<"滚!"<<endl;
	}
	else{
		cout<<a<<"是猪"<<endl;
	    cout<<"哈哈哈哈哈"<<endl;
	} 
	cout<<"你有啥想说的"<<endl;
	string b;
	cin>>b;
	cout<<"你再说一遍!"<<endl;
	string c;
	cin>>c;
	if(c==b){
		cout<<"真乖狗狗!"; 
	}
	else{
		cout<<"不敢?胆小!惩罚!关机!";
		Sleep(1100);
		cout<<"吓你玩的!"; 
	}
	Sleep(1100);
	system("cls");
	cout<<"好吧,说正事"<<endl<<"从二十六个字母中选一个字母输入(大写)"<<endl;
	char d;
	cin>>d; 
	cout<<"嗯,如果你是女的,你很肥美。如果你是男的,你是个渣男!"<<endl;
	cout<<"哈哈哈哈哈哈";
	Sleep(1000);
	system("cls");
	cout<<endl<<"你要投诉这个程序吗(要/不要)(首字母大写)?"<<endl;
	string e;
	cin>>d;
	if(d=='Y'){
		cout<<"正在起诉中!请稍后………………";
		cout<<endl<<"起诉成功!";
		cout<<endl<<"正在核实……"<<endl<<"非法起诉!!!可恶!!!你被诬陷罪名关机!" ;
		Sleep(1100);
		cout<<"吓你玩的!"; 
	}
	else if(d=='B'){
		cout<<"谢谢,但是这程序貌似出现了一些诡异的情况…………"<<endl;
		cout<<"好了,太恐怖了。"; 
	} 
	else{
		cout<<"弄啥来?想死?"; 
	}
	Sleep(1100);
	system("cls");
	cout<<endl<<"你也被我坑了不少回了,想接着运行下去吗?(想/不想)(首字母大写)"<<endl;
	char f;
	cin>>f;
	if(f=='X'){
		cout<<"你真美!你真帅,前面说的都是狗屁!"<<endl;
		cout<<"那我们接着玩吧!"<<endl;
		cout<<"将十三除以二,加上100,减去89,减去200000.87567=?"<<endl;
		int h;
		cin>>h;
		cout<<"我也爱你哦!";
		cout<<endl<<"我说,你是男的女的?(N(男)/V(女)(大写))"<<endl;
		Sleep(2000);
		char i;
		cin>>i;
		if(i=='N'){
			cout<<"不错……"<<endl<<"你有喜欢的女生吗?(有/没有)(首字母大写)"<<endl;
			char j;
			cin>>j;
			if(j=='Y'){
				cout<<"哦…………这里明明什么都没,但是某种东西增加了!";
			}
			if(j=='M'){
				cout<<"哦…………祝你找到女朋友!"; 
			} 
		}
		if(i=='V'){
			cout<<"不错……"<<endl<<"你有喜欢的男生吗?(有/没有)(首字母大写)"<<endl;
			char j;
			cin>>j;
			if(j=='Y'){
				cout<<"哦…………这里明明什么都没,但是某种东西增加了!";
			}
			if(j=='M'){
				cout<<"哦…………祝你找到男朋友!"; 
			} 
		}
		Sleep(1000);
		cout<<endl<<"滋滋滋滋滋滋,不不不不不不都员工服阿萨德衣服噶偶有人管阿贵歌容易和担保法尔AV发生的不不vfhv26587263487956"<<endl;
		cout<<"电脑出现了一些故障,你要帮他吗?(要/不要)(首字母大写)"; 
		Sleep(1111);
		char k;
		cin>>k;
		if(k=='Y'){
			cout<<"谢谢,电脑好了!mua~mua~mua~";
			cout<<"好的,请问这游戏满分十分,你觉得能打多少分?";
			int g;
			cin>>g;
			if(g==10){
			cout<<"谢谢好评,你的鼓励,我记住了。"; 
			}
			if(g<=5){
			cout<<"好吧,我在努力……呜呜呜";
			}
			if(g>=5&&g<10){
			cout<<"谢谢";
			} 
	}
		else{
		
		}
	if(k=='B'){ 	
			cout<<"好的,请问这游戏满分十分,你觉得能打多少分?";
			int g;
			cin>>g;
			if(g==10){
			cout<<"谢谢好评,你的鼓励,我记住了。"; 
			}
			if(g<=5){
			cout<<"好吧,我在努力……呜呜呜";
			}
			if(g>=5&&g<10){
			cout<<"谢谢";
			} 
		}
		else{
		
		}
	}
	else if(f=='B'){
		cout<<"好的,请问这游戏满分十分,你觉得能打多少分?"<<endl;
		int g;
		cin>>g;
		if(g==10){
			cout<<"谢谢好评,你的鼓励,我记住了。"; 
		}
		if(g<=5){
			cout<<"好吧,我在努力……呜呜呜";
		}
		if(g>=5&&g<10){
			cout<<"谢谢";
		} 
	}
	else{
		
	}
	return 0;	 
}

 

0
被禁言 何冯成
何冯成
中级光能
中级光能
#include <iostream>
#include <cstdio> 
#include <conio.h>
#include <windows.h>
#include <iomanip>
using namespace std;
#define R 10 
#define C 10
int map[R][C] = { 0 };
int map1[10][10] = {
    { 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 map2[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 map3[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 },
};
int map4[R][C]={
    { 0,1,1,0,1,0,0,0,1,1 },
    { 0,0,0,0,0,0,0,0,0,0 },
    { 1,1,1,1,1,0,1,1,1,1 },
    { 0,0,0,0,5,1,1,1,1,0 },
    { 0,0,0,0,0,0,0,0,0,0 },
    { 1,0,1,0,1,0,1,0,1,0 },
    { 0,0,1,0,0,0,1,0,0,0 },
    { 0,4,0,0,1,1,0,0,0,0 },
    { 0,1,0,4,1,0,0,1,0,0 },
    { 1,0,3,3,1,0,0,0,1,0 },
    };
int map5[R][C]={
    { 1,1,1,1,1,1,1,1,1,1},
    { 1,5,0,0,0,1,0,0,1,1},
    { 1,0,4,0,0,0,0,0,0,1},
    { 1,0,0,0,1,1,4,0,0,1},
    { 1,0,0,1,0,1,1,0,0,1},
    { 1,0,0,0,0,1,0,0,0,1},
    { 1,1,1,0,0,1,0,0,0,1},
    { 1,0,1,0,1,0,1,0,1,1},
    { 1,0,0,0,0,0,0,0,0,1},
    { 3,0,0,0,0,0,3,0,1,1},
    } ;
/*  1.表示墙体
3.表示目的地
4.表示箱子
5.表示人
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=5; 
int main(){
char c; 
    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 Game_Menu(){ 
    cout<<"欢迎进入游戏"<<endl; 
    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:    
                    color(6);   
                    cout << "★";
                    break;
                case 8:    
                    color(3);
                    cout << "♀";
                    break;
                default:
                break;
            }
        }
    cout <<endl;
    }
    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;
} 
void setmap(int n){
    if (n == 1) {
        memcpy(map, map1, sizeof(map1));
    }
    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<stdio.h>
#include <windows.h>
#include<conio.h>
#include<time.h>

void gotoxy(int x,int y);//控制光标。X表示横坐标,Y表示纵坐标
void my_print();//设置界面
void print_thing();//打印物品
void print_home();//打印老家
void refresh_map();//刷新地图
void stop();//暂停

void print_my_tank();//打印我的坦克
void print_tank_1();//打印坦克1号
void print_tank_2();//打印坦克2号
void print_tank_3();//打印坦克3号

void clear_my_tank();//清除我的坦克,用于坦克移动后
void clear_tank_1();//清除坦克1号
void clear_tank_2();//清除坦克2号
void clear_tank_3();//清除坦克3号

void turn_up(int a[][3]);//我的坦克上转
void turn_down(int a[][3]);//我的坦克下转
void turn_left(int a[][3]);//我的坦克左转
void turn_right(int a[][3]);//我的坦克右转

void turn_up_1(int a[][3]);//坦克1号上转
void turn_down_1(int a[][3]);//坦克1号下转
void turn_left_1(int a[][3]);//坦克1号左转
void turn_right_1(int a[][3]);//坦克1号右转

void turn_up_2(int a[][3]);//坦克2号上转
void turn_down_2(int a[][3]);//坦克2号下转
void turn_left_2(int a[][3]);//坦克2号左转
void turn_right_2(int a[][3]);//坦克2号右转

void turn_up_3(int a[][3]);//坦克3号上转
void turn_down_3(int a[][3]);//坦克3号下转
void turn_left_3(int a[][3]);//坦克3号左转
void turn_right_3(int a[][3]);//坦克3号右转

void my_move();//我的坦克移动
void move_1();//坦克1号移动
void move_2();//坦克2号移动
void move_3();//坦克3号移动

void print_bullet(int x,int y);//打印敌方坦克的子弹
void print_my_bullet(int x,int y);//打印我的子弹
void clear_bullet(int x,int y);//清楚子弹
int  check_bullet(int x,int y);//检查子弹是否碰撞,没碰返回1,碰到返回0
void shoot();//计算我的坦克子弹的坐标
void shoot_1();//计算坦克1号子弹的坐标
void shoot_2();//计算坦克2号子弹的坐标
void shoot_3();//计算坦克3号子弹的坐标

void change_thing();//记录物品的变化
void change_home();//记录老家的变化
void change_bullet();//纪录子弹的变化
void change_star();//记录星星的变化
void change_tank();//记录我的坦克的变化
void change_tank_1();//记录坦克1号的变化
void change_tank_2();//记录坦克2号的变化
void change_tank_3();//记录坦克3号的变化

void switch_weapons();//切换武器
void switch_skin();//切换皮肤
void help();//帮助
void check_game();//检查游戏胜负
void check_lv();//检查等级
void next_level();//下一关
void get_map();//获得每一关的地图
void initial();//将所有量初始化
void gameover();//游戏结束

void console();//控制窗口
void screen_1();//屏幕1
void screen_2(char *p,int color);//屏幕2
void screen_3();//屏幕3
void produce_star();//产生一个星星
void print_star();//打印星星
void check_star();//检查星星的数量
void clear_star();//清除星星

int my_abs(int x);//绝对值函数,用系统的会有问题
int judge(int x,int y,int state);//判断我的坦克能否前进
int judge2(int x,int y,int state);// 辅助电脑判断能否前进

int check1(int x,int y);//辅助电脑判断的函数
int check2(int x,int y);//辅助电脑判断的函数
int check3(int x,int y);//辅助电脑判断的函数


int life=3;//生命
int enemy=13;//敌人数量
int level=1;//关卡
int weapons=1;//武器
int skin=1;//皮肤
int star=1;//星星
int s=0,t=0;//星星坐标
int score=0;//分数
int lv=1;//等级
int speed=10;//速度
char *info[5]={" "," "," "," "," ",};//通知

int map[30][30]={0};//记录整个屏幕上的物体
int thing[28][28]={0};//障碍物,不包括边界
int home[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//老家,3行4列

int my_tank[3][3]={0};//我的坦克
int tank_1[3][3]={0};//敌人的坦克1号
int tank_2[3][3]={0};//敌人的坦克2号
int tank_3[3][3]={0};//敌人的坦克3号

int x  , y ;//我的坦克中心坐标
int x1 , y1;//坦克1号中心坐标
int x2 , y2;//坦克2号中心坐标
int x3 , y3;//坦克3号中心坐标

int m=0  , n=0 ;//我的坦克子弹的坐标
int m1=0 , n1=0;//坦克1号子弹的坐标
int m2=0 , n2=0;//坦克2号子弹的坐标
int m3=0 , n3=0;//坦克3号子弹的坐标

int state=0; //我的坦克方向(1上,2下,3左,4右)
int state_1=0;//坦克1号方向
int state_2=0;//坦克2号方向
int state_3=0;//坦克3号方向

int direction=0;//我的坦克子弹射向
int direction_1=0;//坦克1号子弹射向
int direction_2=0;//坦克2号子弹射向
int direction_3=0;//坦克3号子弹射向

int cp1=2;//辅助电脑判断的变量
int cp2=2;//辅助电脑判断的变量
int cp3=2;//辅助电脑判断的变量

int main()//主函数
{
    srand(time(NULL));//设置随机数种子
    console();//设置窗口
    my_print();//打印边框
    initial();//所有量初始化
    while(1)
    {
        int i1,i2,i3,i4,i5,i6,i7;
        my_move();//控制我的坦克移动
        if(i1++%30==0) //控制敌人坦克速度
            move_1();
        if(i2++%30==0) 
            move_2();
        if(i3++%30==0) 
            move_3();
        if(i4++%speed==0)   //控制子弹速度
            shoot();
        if(i5++%speed==0)
            shoot_1();
        if(i6++%speed==0)
            shoot_2();
        if(i7++%speed==0)
            shoot_3();
        screen_1();//刷新屏幕
        Sleep(30);
    }
    return 0;
}

//设置光标输出的位置函数
void gotoxy(int x,int y)//X表示横坐标,Y表示纵坐标。
{
    HANDLE app;
    COORD  pos;
    pos.X=x;
    pos.Y=y;
    app=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(app,pos);
}

//控制窗口
void console()
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  
    CONSOLE_SCREEN_BUFFER_INFO bInfo; 
    GetConsoleScreenBufferInfo(hOut, &bInfo );  
    SetConsoleTitle("坦克大战"); // 设置窗口的标题
    COORD size = {90, 32};//设置窗口大小
    SetConsoleScreenBufferSize(hOut,size);  
    SMALL_RECT rc = {0,0, 63, 31};
    SetConsoleWindowInfo(hOut,true ,&rc);
}

//打印边界
void my_print()
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE |FOREGROUND_INTENSITY);//蓝色
    printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ |﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊|\n");
    for(int i=0;i<13;i++)
    printf("■                                                        ■ |                          |\n");
    printf("■                                                        ■ |--------------------------|\n");
    for(int j=14;j<28;j++)
    printf("■                                                        ■ |                          |\n");
    printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ |﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍|\n");
}


//打印与清除坦克
void print_my_tank()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            if(my_tank[i][j]==1)
            {
                switch(skin)
                {
                case 1 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);//淡蓝色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 2 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//绿色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 3 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);//黄色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 4 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);//白色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 5 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);//紫色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 6 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//红色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 7 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);//蓝色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;

                }

            }
}
void clear_my_tank()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            {
                gotoxy(2*x+2*j-2,y+i-1);
                printf("  ");
            }
}
void print_tank_1()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            if(tank_1[i][j]==1)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
                gotoxy(2*x1+2*j-2,y1+i-1);
                printf("■");
            }
}
void clear_tank_1()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            {
                gotoxy(2*x1+2*j-2,y1+i-1);
                printf("  ");
            }
}
void print_tank_2()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            if(tank_2[i][j]==1)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
                gotoxy(2*x2+2*j-2,y2+i-1);
                printf("■");
            }
}
void clear_tank_2()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            {
                gotoxy(2*x2+2*j-2,y2+i-1);
                printf("  ");
            }
}
void print_tank_3()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            if(tank_3[i][j]==1)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
                gotoxy(2*x3+2*j-2,y3+i-1);
                printf("■");
            }
}
void clear_tank_3()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            {
                gotoxy(2*x3+2*j-2,y3+i-1);
                printf("  ");
            }
}

void print_thing()                // 打印物品
{
    for(int j=0;j<28;j++)         // 从坐标(1,1)点开始打印
        for(int i=0;i<28;i++)
            if(thing[i][j]==1)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
                gotoxy(2+2*j,1+i);
                printf("■");
            }
            else if(thing[i][j]==2)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
                gotoxy(2+2*j,1+i);
                printf("■");
            }
            else if(thing[i][j]==3)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
                gotoxy(2+2*j,1+i);
                printf("■");
            }
            else if(thing[i][j]==4)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
                gotoxy(2+2*j,1+i);
                printf("■");
            }
}

void print_home()                 //打印老家
{


    for(int i=0;i<3;i++)          //打印老家外墙       
        for(int j=0;j<4;j++)
            if(home[i][j]==1)
                {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
                    gotoxy(26+2*j,26+i);
                    printf("■");
                }
            else if(home[i][j]==2)
                {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
                    gotoxy(26+2*j,26+i);
                    printf("■");
                }
            else if(home[i][j]==3)
                {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
                    gotoxy(26+2*j,26+i);
                    printf("■");
                }


    {
    for(int i=1;i<3;i++)          //打印老家内部
        for(int j=1;j<3;j++)
                {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
                    gotoxy(26+2*j,26+i);
                    printf("■");
                }
    }

}


void print_bullet(int x,int y)    //打印敌方坦克的子弹子弹
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
    gotoxy(2*x,y);
    printf("⊕");
}

void print_my_bullet(int x,int y)    //打印我的子弹
{
    switch(weapons)
    {
    case 1 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
            gotoxy(2*x,y);
            printf("⊕");
        }break;
    case 2 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
            gotoxy(2*x,y);
            printf("∷");
        }break;
    case 3 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
            gotoxy(2*x,y);
            printf("◎");
        }break;
    case 4 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
            gotoxy(2*x,y);
            printf("※");
        }break;
    case 5 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
            gotoxy(2*x,y);
            printf("●");
        }break;
    }

}

void clear_bullet(int x,int y)
{
    gotoxy(2*x,y);
    printf("  ");
}


void screen_1()
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
    gotoxy(62,2);
    printf("          第 %d 关         ",level);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
    gotoxy(62,4);
    printf("分数: %d",score);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED);
    gotoxy(80,4);
    printf("LV: %d ",lv);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
    gotoxy(62,6);
    printf("生命:     坦克×%d         ",life-1);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
    gotoxy(62,8);
    printf("敌方:     坦克×%d        ",enemy);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
    gotoxy(62,11);
    printf("当前武器:                 ");
    switch(weapons)
    {
    case 1 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
            gotoxy(62,13);
            printf("         普通子弹 ⊕      ");
        }break;
    case 2 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
            gotoxy(62,13);
            printf("           散弹   ∷      ");
        }break;
    case 3 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
            gotoxy(62,13);
            printf("          气泡弹  ◎      ");
        }break;
    case 4 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
            gotoxy(62,13);
            printf("          雪花弹  ※      ");
        }break;
    case 5 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
            gotoxy(62,13);
            printf("         超级炮弹 ●      ");
        }break;
    }


}

void screen_2(char *p,int color)
{

    for(int i=15;i<27;i++)//先清屏
    {
        gotoxy(62,i);
        printf("                          ");
    }

    info[0]=info[1];//内容上移
    info[1]=info[2];
    info[2]=info[3];
    info[3]=info[4];
    info[4]=p;

    for(int j=15;j<22;j=j+2)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
        gotoxy(62,j);
        printf("%s",info[(j+1)/2-8]);
    }
    switch(color)
    {
    case 1 :
        {
             SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//绿
             gotoxy(62,23);
             printf("%s",info[4]);
        }break;
    case 2 :
        {
             SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);//淡蓝
             gotoxy(62,23);
             printf("%s",info[4]);
        }break;
    case 3 :
        {
             SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);//黄
             gotoxy(62,23);
             printf("%s",info[4]);
        }break;
    case 4 :
        {
             SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//红
             gotoxy(62,23);
             printf("%s",info[4]);
        }break;
    }
}

void screen_3()
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
    gotoxy(62,27);
    printf("          h键帮助  Esc退出");
    gotoxy(62,28);
    printf("                          ");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
    if(star<=13)
    for(int i=1;i<=star;i++)
    {
        gotoxy(60+2*i,28);
        printf("★");
    }
}


void produce_star()
{
    int a=0;
    for(int i=4;i<26;i++)
    {
        for(int j=1;j<29;j++)
            if(map[i][j]==0 && rand()%300==0)
            {
                s=j,t=i;
                print_star();
                a=1;
                break;
            }
        if(a)
            break;
    }

}

void print_star()
{
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
        gotoxy(2*s,t);
        printf("★");
}

void change_star()
{
    if(s==x&&t==(y-1) || s==x&&t==(y+1) || s==(x-1)&&t==y || s==(x+1)&&t==y)
    {
        clear_star();
        s=0,t=0;
        star++;
        screen_2("恭喜你获得一颗星星",2);
        printf("\7");
        check_star();
        print_my_tank();
    }
    if(s==x1&&t==(y1-1) || s==x1&&t==(y1+1) || s==(x1-1)&&t==y1 || s==(x1+1)&&t==y1)
    {
        clear_star();
        s=0,t=0;
        screen_2("很遗憾星星被抢走了",4);
        printf("\7");
        print_tank_1();
    }
    if(s==x2&&t==(y2-1) || s==x2&&t==(y2+1) || s==(x2-1)&&t==y2 || s==(x2+1)&&t==y2)
    {
        clear_star();
        s=0,t=0;
        screen_2("很遗憾星星被抢走了",4);
        printf("\7");
        print_tank_2();
    }

    if(s==x3&&t==(y3-1) || s==x3&&t==(y3+1) || s==(x3-1)&&t==y3 || s==(x3+1)&&t==y3)
    {
        clear_star();
        s=0,t=0;
        screen_2("很遗憾星星被抢走了",4);
        printf("\7");
        print_tank_3();
    }

}

void clear_star()
{
    gotoxy(2*s,t);
    printf("  ");
}

void check_star()
{
    switch(star)
    {
    case 2 :screen_2("解锁新武器:  散弹",4),screen_3();break;
    case 3 :screen_2("成功解锁  绿色皮肤",2),screen_3();break;
    case 4 :screen_2("解锁新武器:  气泡弹",2),screen_3();break;
    case 5 :screen_2("成功解锁  黄色皮肤",3),screen_3();break;
    case 6 :screen_2("解锁新武器:  雪花弹",1),screen_3();break;
    case 7 :screen_2("成功解锁  白色皮肤",1),screen_3();break;
    case 8 :screen_2("解锁新武器:  超级炮弹",4),screen_3();break;
    case 9 :screen_2("成功解锁  紫色皮肤",1),screen_3();break;
    case 10 :screen_2("您已拥有10颗星啦",3),screen_3();break;
    case 11 :screen_2("成功解锁  红色皮肤",4),screen_3();break;
    case 12 :screen_2("您已拥有12颗星啦",3),screen_3();break;
    case 13 :screen_2("成功解锁 蓝色皮肤",1),screen_3();break;
    }

}

void switch_weapons()
{
    weapons++;
    if(weapons>star/2+1)
        weapons=1;
    if(star==1)
        screen_2("当前星星数不足,赶快收集吧",1);
    else
    {
        switch(weapons)
        {
        case 1 :screen_2("切换到普通子弹",1);break;
        case 2 :screen_2("切换到散弹",1);break;
        case 3 :screen_2("切换到气泡弹",1);break;
        case 4 :screen_2("切换到雪花弹",1);break;
        case 5 :screen_2("切换到超级炮弹弹",1);break;
        }
    }

}

void switch_skin()
{
    skin++;
    if(skin>(star-1)/2+1)
        skin=1;
    if(star==1 || star==2)
        screen_2("当前星星数不足,赶快收集吧",1);
    else
    {
        switch(skin)
        {
        case 1 :screen_2("切换到淡蓝色皮肤",1);break;
        case 2 :screen_2("切换到绿色皮肤",1);break;
        case 3 :screen_2("切换到黄色皮肤",1);break;
        case 4 :screen_2("切换到白色皮肤",1);break;
        case 5 :screen_2("切换到紫色皮肤",1);break;
        case 6 :screen_2("切换到红色皮肤",1);break;
        case 7 :screen_2("切换到蓝色皮肤",1);break;
        }
    }


}

void shoot()
{

    if(m!=0 || n!=0)
        if(map[n][m]==0)//如果子弹还留在地图上,就清除掉       
            clear_bullet(m,n);
    if(m==0 && n==0)//代表现在场上没有我的坦克的子弹,则重新发射子弹
    {
        switch(state)
        {
            case 1 :
                {
                    m=x;
                    n=y-2;
                    direction=1;
                }break;
            case 2 :
                {
                    m=x;
                    n=y+2;
                    direction=2;
                }break;
            case 3 :
                {
                    m=x-2;
                    n=y;
                    direction=3;
                }break;
            case 4 :
                {
                    m=x+2;
                    n=y;
                    direction=4;
                }break;
        }
    }
    else
    {
        switch(direction)
        {
            case 1 :n--;break;
            case 2 :n++;break;
            case 3 :m--;break;
            case 4 :m++;break;
        }
    }
    change_thing();//检查是否击中障碍物
    change_home();//检查是否击中老家
    change_bullet();//检查是否击中子弹
    change_tank_1();//检查是否击中坦克1号
    change_tank_2();//检查是否击中坦克2号
    change_tank_3();//检查是否击中坦克3号
    if(check_bullet(m,n))   
        print_my_bullet(m,n);
    else
        m=0,n=0;
}

void shoot_1()
{

    if(m1!=0 || n1!=0)
        if(map[n1][m1]==0)//如果子弹还留在地图上,就清除掉     
            clear_bullet(m1,n1);
    if(m1==0 && n1==0)//代表现在场上没有坦克1号的子弹,则重新发射子弹
    {
        switch(state_1)
        {
            case 1 :
                {
                    m1=x1;
                    n1=y1-2;
                    direction_1=1;
                }break;
            case 2 :
                {
                    m1=x1;
                    n1=y1+2;
                    direction_1=2;
                }break;
            case 3 :
                {
                    m1=x1-2;
                    n1=y1;
                    direction_1=3;
                }break;
            case 4 :
                {
                    m1=x1+2;
                    n1=y1;
                    direction_1=4;
                }break;
        }
    }
    else
    {
        switch(direction_1)
        {
            case 1 :n1--;break;
            case 2 :n1++;break;
            case 3 :m1--;break;
            case 4 :m1++;break;
        }
    }
    change_thing();//检查是否击中障碍物
    change_home();//检查是否击中老家
    change_bullet();//检查是否击中子弹
    change_tank();//检查是否击中我的坦克
    if(check_bullet(m1,n1)) 
        print_bullet(m1,n1);
    else
        m1=0,n1=0;
}

void shoot_2()
{

    if(m2!=0 || n2!=0)
        if(map[n2][m2]==0)//如果子弹还留在地图上,就清除掉     
            clear_bullet(m2,n2);
    if(m2==0 && n2==0)//代表现在场上没有坦克2号的子弹,则重新发射子弹
    {
        switch(state_2)
        {
            case 1 :
                {
                    m2=x2;
                    n2=y2-2;
                    direction_2=1;
                }break;
            case 2 :
                {
                    m2=x2;
                    n2=y2+2;
                    direction_2=2;
                }break;
            case 3 :
                {
                    m2=x2-2;
                    n2=y2;
                    direction_2=3;
                }break;
            case 4 :
                {
                    m2=x2+2;
                    n2=y2;
                    direction_2=4;
                }break;
        }
    }
    else
    {
        switch(direction_2)
        {
            case 1 :n2--;break;
            case 2 :n2++;break;
            case 3 :m2--;break;
            case 4 :m2++;break;
        }
    }
    change_thing();//检查是否击中障碍物
    change_home();//检查是否击中老家
    change_bullet();//检查是否击中子弹
    change_tank();//检查是否击中我的坦克
    if(check_bullet(m2,n2)) 
        print_bullet(m2,n2);
    else
        m2=0,n2=0;
}


void shoot_3()
{

    if(m3!=0 || n3!=0)
        if(map[n3][m3]==0)//如果子弹还留在地图上,就清除掉     
            clear_bullet(m3,n3);
    if(m3==0 && n3==0)//代表现在场上没有坦克3号的子弹,则重新发射子弹
    {
        switch(state_3)
        {
            case 1 :
                {
                    m3=x3;
                    n3=y3-2;
                    direction_3=1;
                }break;
            case 2 :
                {
                    m3=x3;
                    n3=y3+2;
                    direction_3=2;
                }break;
            case 3 :
                {
                    m3=x3-2;
                    n3=y3;
                    direction_3=3;
                }break;
            case 4 :
                {
                    m3=x3+2;
                    n3=y3;
                    direction_3=4;
                }break;
        }
    }
    else
    {
        switch(direction_3)
        {
            case 1 :n3--;break;
            case 2 :n3++;break;
            case 3 :m3--;break;
            case 4 :m3++;break;
        }
    }
    change_thing();//检查是否击中障碍物
    change_home();//检查是否击中老家
    change_bullet();//检查是否击中子弹
    change_tank();//检查是否击中我的坦克
    if(check_bullet(m3,n3))
        print_bullet(m3,n3);
    else
        m3=0,n3=0;
}

void turn_up(int a[][3])
{
    int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
    if(state==1)
    {
        if(judge(x,y,state))
        {
            clear_my_tank();
            y--;
            print_my_tank();
            refresh_map();
        }
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_up[i][j];
        clear_my_tank();
        print_my_tank();
        state=1;
        refresh_map();

    }
    change_star();
}


void turn_down(int a[][3])
{
    int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
    if(state==2)
    {
        if(judge(x,y,state))
        {
            clear_my_tank();
            y++;
            print_my_tank();
            refresh_map();
        }
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_down[i][j];
        clear_my_tank();
        print_my_tank();
        state=2;
        refresh_map();
    }
    change_star();

}

void turn_left(int a[][3])
{
    int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
    if(state==3)
    {
        if(judge(x,y,state))
        {
            clear_my_tank();
            x--;
            print_my_tank();
            refresh_map();
        }
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_left[i][j];
        clear_my_tank();
        print_my_tank();
        state=3;
        refresh_map();
    }
    change_star();

}

void turn_right(int a[][3])
{
    int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
    if(state==4)
    {
        if(judge(x,y,state))
        {
            clear_my_tank();
            x++;
            print_my_tank();
            refresh_map();
        }
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_right[i][j];
        clear_my_tank();
        print_my_tank();
        state=4;
        refresh_map();
    }
    change_star();

}

void turn_up_1(int a[][3])
{
    int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
    if(state_1==1)
    {
        clear_tank_1();
        y1--;
        print_tank_1();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_up[i][j];
        clear_tank_1();
        print_tank_1();
        state_1=1;
        refresh_map();
    }
}

void turn_down_1(int a[][3])
{
    int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
    if(state_1==2)
    {
        clear_tank_1();
        y1++;
        print_tank_1();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_down[i][j];
        clear_tank_1();
        print_tank_1();
        state_1=2;
        refresh_map();
    }
}

void turn_left_1(int a[][3])
{
    int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
    if(state_1==3)
    {
        clear_tank_1();
        x1--;
        print_tank_1();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_left[i][j];
        clear_tank_1();
        print_tank_1();
        state_1=3;
        refresh_map();
    }
}

void turn_right_1(int a[][3])
{
    int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
    if(state_1==4)
    {
        clear_tank_1();
        x1++;
        print_tank_1();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_right[i][j];
        clear_tank_1();
        print_tank_1();
        state_1=4;
        refresh_map();
    }
}

void turn_up_2(int a[][3])
{
    int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
    if(state_2==1)
    {
        clear_tank_2();
        y2--;
        print_tank_2();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_up[i][j];
        clear_tank_2();
        print_tank_2();
        state_2=1;
        refresh_map();
    }
}

void turn_down_2(int a[][3])
{
    int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
    if(state_2==2)
    {
        clear_tank_2();
        y2++;
        print_tank_2();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_down[i][j];
        clear_tank_2();
        print_tank_2();
        state_2=2;
        refresh_map();
    }
}

void turn_left_2(int a[][3])
{
    int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
    if(state_2==3)
    {
        clear_tank_2();
        x2--;
        print_tank_2();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_left[i][j];
        clear_tank_2();
        print_tank_2();
        state_2=3;
        refresh_map();
    }
}

void turn_right_2(int a[][3])
{
    int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
    if(state_2==4)
    {
        clear_tank_2();
        x2++;
        print_tank_2();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_right[i][j];
        clear_tank_2();
        print_tank_2();
        state_2=4;
        refresh_map();
    }
}

void turn_up_3(int a[][3])
{
    int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
    if(state_3==1)
    {
        clear_tank_3();
        y3--;
        print_tank_3();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_up[i][j];
        clear_tank_3();
        print_tank_3();
        state_3=1;
        refresh_map();
    }
}

void turn_down_3(int a[][3])
{
    int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
    if(state_3==2)
    {
        clear_tank_3();
        y3++;
        print_tank_3();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_down[i][j];
        clear_tank_3();
        print_tank_3();
        state_3=2;
        refresh_map();
    }
}

void turn_left_3(int a[][3])
{
    int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
    if(state_3==3)
    {
        clear_tank_3();
        x3--;
        print_tank_3();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_left[i][j];
        clear_tank_3();
        print_tank_3();
        state_3=3;
        refresh_map();
    }
}

void turn_right_3(int a[][3])
{
    int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
    if(state_3==4)
    {
        clear_tank_3();
        x3++;
        print_tank_3();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_right[i][j];
        clear_tank_3();
        print_tank_3();
        state_3=4;
        refresh_map();
    }
}

int judge(int x,int y,int state)//x,y坦克当前坐标,state坦克当前方向
{
    switch(state)
    {
    case 1 :if(map[y-2][x]==0 && map[y-1][x-1]==0 && map[y-1][x+1]==0 && map[y-2][x-1]==0 && map[y-2][x+1]==0)
                return 1;
            else
                return 0;
    case 2 :if(map[y+2][x]==0 && map[y+1][x-1]==0 && map[y+1][x+1]==0 && map[y+2][x-1]==0 && map[y+2][x+1]==0)
                return 1;
            else
                return 0;
    case 3 :if(map[y][x-2]==0 && map[y-1][x-1]==0 && map[y+1][x-1]==0 && map[y-1][x-2]==0 && map[y+1][x-2]==0)
                return 1;
            else
                return 0;
    case 4 :if(map[y][x+2]==0 && map[y-1][x+1]==0 && map[y+1][x+1]==0 && map[y-1][x+2]==0 && map[y+1][x+2]==0)
                return 1;
            else
                return 0;
    }
}

int judge2(int x,int y,int state)//x,y坦克当前坐标,state坦克当前方向
{
    switch(state)
    {
    case 1 :if(map[y-2][x]==0 && map[y-2][x-1]==0 && map[y-2][x+1]==0)
                return 1;
            else
                return 0;
    case 2 :if(map[y+2][x]==0 && map[y+2][x-1]==0 && map[y+2][x+1]==0)
                return 1;
            else
                return 0;
    case 3 :if(map[y][x-2]==0 && map[y-1][x-2]==0 && map[y+1][x-2]==0)
                return 1;
            else
                return 0;
    case 4 :if(map[y][x+2]==0 && map[y-1][x+2]==0 && map[y+1][x+2]==0)
                return 1;
            else
                return 0;
    }
}

void refresh_map()               //i代表行,即纵坐标;j代表列,即横坐标
{
    {
        for(int i=0;i<30;i++)          //首先地图清零
            for(int j=0;j<30;j++)
                map[i][j]=0;
    }

    {
        for(int i=0;i<30;i++)    //地图第一部分:围墙(完全不动)
        {
            map[i][0]=1;
            map[i][29]=1;
        }
        for(int j=0;j<30;j++) 
        {
            map[0][j]=1;
            map[29][j]=1;
        }
    }

    {
        for(int i=0;i<3;i++)   //地图第二部分:老家(几乎不动)
            for(int j=0;j<4;j++)
                map[i+26][j+13]=home[i][j];
    }

    {
        for(int i=0;i<28;i++)  //地图第三部分:障碍物(有时改变)
            for(int j=0;j<28;j++)
                map[i+1][j+1]=thing[i][j];
    }

    {
        switch(state)          //地图第四部分:坦克(总是改变)
        {
        case 1 :
            {
                map[y-1][x-1]=0;  map[y-1][x]=1;      map[y-1][x+1]=0;
                map[y][x-1]=1;    map[y][x]=1;        map[y][x+1]=1;
                map[y+1][x-1]=1;  map[y+1][x]=0;      map[y+1][x+1]=1;

            }break;
        case 2 :
            {
                map[y-1][x-1]=1;  map[y-1][x]=0;      map[y-1][x+1]=1;
                map[y][x-1]=1;    map[y][x]=1;        map[y][x+1]=1;
                map[y+1][x-1]=0;  map[y+1][x]=1;      map[y+1][x+1]=0;
            }break;
        case 3 :
            {
                map[y-1][x-1]=0;  map[y-1][x]=1;      map[y-1][x+1]=1;
                map[y][x-1]=1;    map[y][x]=1;        map[y][x+1]=0;
                map[y+1][x-1]=0;  map[y+1][x]=1;      map[y+1][x+1]=1;
            }break;
        case 4 :
            {
                map[y-1][x-1]=1;  map[y-1][x]=1;      map[y-1][x+1]=0;
                map[y][x-1]=0;    map[y][x]=1;        map[y][x+1]=1;
                map[y+1][x-1]=1;  map[y+1][x]=1;      map[y+1][x+1]=0;
            }break;
        }

        switch(state_1)
        {
        case 1 :
            {
                map[y1-1][x1-1]=0;  map[y1-1][x1]=1;      map[y1-1][x1+1]=0;
                map[y1][x1-1]=1;    map[y1][x1]=1;        map[y1][x1+1]=1;
                map[y1+1][x1-1]=1;  map[y1+1][x1]=0;      map[y1+1][x1+1]=1;

            }break;
        case 2 :
            {
                map[y1-1][x1-1]=1;  map[y1-1][x1]=0;      map[y1-1][x1+1]=1;
                map[y1][x1-1]=1;    map[y1][x1]=1;        map[y1][x1+1]=1;
                map[y1+1][x1-1]=0;  map[y1+1][x1]=1;      map[y1+1][x1+1]=0;
            }break;
        case 3 :
            {
                map[y1-1][x1-1]=0;  map[y1-1][x1]=1;      map[y1-1][x1+1]=1;
                map[y1][x1-1]=1;    map[y1][x1]=1;        map[y1][x1+1]=0;
                map[y1+1][x1-1]=0;  map[y1+1][x1]=1;      map[y1+1][x1+1]=1;
            }break;
        case 4 :
            {
                map[y1-1][x1-1]=1;  map[y1-1][x1]=1;      map[y1-1][x1+1]=0;
                map[y1][x1-1]=0;    map[y1][x1]=1;        map[y1][x1+1]=1;
                map[y1+1][x1-1]=1;  map[y1+1][x1]=1;      map[y1+1][x1+1]=0;
            }break;
        }

        switch(state_2)
        {
        case 1 :
            {
                map[y2-1][x2-1]=0;  map[y2-1][x2]=1;      map[y2-1][x2+1]=0;
                map[y2][x2-1]=1;    map[y2][x2]=1;        map[y2][x2+1]=1;
                map[y2+1][x2-1]=1;  map[y2+1][x2]=0;      map[y2+1][x2+1]=1;

            }break;
        case 2 :
            {
                map[y2-1][x2-1]=1;  map[y2-1][x2]=0;      map[y2-1][x2+1]=1;
                map[y2][x2-1]=1;    map[y2][x2]=1;        map[y2][x2+1]=1;
                map[y2+1][x2-1]=0;  map[y2+1][x2]=1;      map[y2+1][x2+1]=0;
            }break;
        case 3 :
            {
                map[y2-1][x2-1]=0;  map[y2-1][x2]=1;      map[y2-1][x2+1]=1;
                map[y2][x2-1]=1;    map[y2][x2]=1;        map[y2][x2+1]=0;
                map[y2+1][x2-1]=0;  map[y2+1][x2]=1;      map[y2+1][x2+1]=1;
            }break;
        case 4 :
            {
                map[y2-1][x2-1]=1;  map[y2-1][x2]=1;      map[y2-1][x2+1]=0;
                map[y2][x2-1]=0;    map[y2][x2]=1;        map[y2][x2+1]=1;
                map[y2+1][x2-1]=1;  map[y2+1][x2]=1;      map[y2+1][x2+1]=0;
            }break;
        }

        switch(state_3)
        {
        case 1 :
            {
                map[y3-1][x3-1]=0;  map[y3-1][x3]=1;      map[y3-1][x3+1]=0;
                map[y3][x3-1]=1;    map[y3][x3]=1;        map[y3][x3+1]=1;
                map[y3+1][x3-1]=1;  map[y3+1][x3]=0;      map[y3+1][x3+1]=1;

            }break;
        case 2 :
            {
                map[y3-1][x3-1]=1;  map[y3-1][x3]=0;      map[y3-1][x3+1]=1;
                map[y3][x3-1]=1;    map[y3][x3]=1;        map[y3][x3+1]=1;
                map[y3+1][x3-1]=0;  map[y3+1][x3]=1;      map[y3+1][x3+1]=0;
            }break;
        case 3 :
            {
                map[y3-1][x3-1]=0;  map[y3-1][x3]=1;      map[y3-1][x3+1]=1;
                map[y3][x3-1]=1;    map[y3][x3]=1;        map[y3][x3+1]=0;
                map[y3+1][x3-1]=0;  map[y3+1][x3]=1;      map[y3+1][x3+1]=1;
            }break;
        case 4 :
            {
                map[y3-1][x3-1]=1;  map[y3-1][x3]=1;      map[y3-1][x3+1]=0;
                map[y3][x3-1]=0;    map[y3][x3]=1;        map[y3][x3+1]=1;
                map[y3+1][x3-1]=1;  map[y3+1][x3]=1;      map[y3+1][x3+1]=0;
            }break;
        }
    }
}


void my_move()
{
    char key;
    if (kbhit()) //检测,如果有按键就执行if里面的
    {
        key = getch();//捕获按键
        switch( key ) 
        {
        case 72:turn_up(my_tank);//上
            break;
        case 75:turn_left(my_tank);//左
            break;
        case 77:turn_right(my_tank);//右
            break;
        case 80:turn_down(my_tank);//下
            break;
        case 32:stop();//空格 暂停或开始
            break;
        case 104:help();//小h切换到帮助菜单
            break;
        case 115:switch_skin(),print_my_tank();//小s键切换皮肤
            break;
        case 119:switch_weapons();//小w键切换武器
            break;

        case 27:exit(0);//Esc 退出
        default: ;
        }
    }
}

int check1(int x,int y)//在正上面,用它检测
{
    for(int j=y;j<27;j++)
        if(map[j][x]==4)
            return 0;
    return 1;
}

int check2(int x,int y)//在正左面,用它检测
{
    for(int i=x;i<14;i++)
        if(map[y][i]==4)
            return 0;
    return 1;
}

int check3(int x,int y)//在正右面,用它检测
{
    for(int i=x;i>15;i--)
        if(map[y][i]==4)
            return 0;
    return 1;
}

void move_1()
{
    if((x1==14 || x1==15) && check1(x1,y1))//在正上面
    {
            if(state_1!=2)
                turn_down_1(tank_1);
    }
    else if(x1<14 && y1==27 && check2(x1,y1))//在正左面
    {
            if(state_1!=4)
                turn_right_1(tank_1);
    }
    else if(x1>15 && y1==27 && check3(x1,y1))//在正右面
    {
            if(state_1!=3)
                turn_left_1(tank_1);
    }
    else
    {
        if(judge2(x1,y1,cp1))
            switch(cp1)
            {
            case 1 :turn_up_1(tank_1);break;
            case 2 :turn_down_1(tank_1);break;
            case 3 :turn_left_1(tank_1);break;
            case 4 :turn_right_1(tank_1);break;
            }
        while(judge2(x1,y1,cp1) == 0)
        {
            cp1=(rand()%4+1);
        }

    }


}

void move_2()
{
    if((x2==14 || x2==15) && check1(x2,y2))//在正上面
    {
            if(state_2!=2)
                turn_down_2(tank_2);
    }
    else if(x2<14 && y2==27 && check2(x2,y2))//在正左面
    {
            if(state_2!=4)
                turn_right_2(tank_2);
    }
    else if(x2>15 && y2==27 && check3(x2,y2))//在正右面
    {
            if(state_2!=3)
                turn_left_2(tank_2);
    }
    else
    {
        if(judge2(x2,y2,cp2))
            switch(cp2)
            {
            case 1 :turn_up_2(tank_2);break;
            case 2 :turn_down_2(tank_2);break;
            case 3 :turn_left_2(tank_2);break;
            case 4 :turn_right_2(tank_2);break;
            }
        while(judge2(x2,y2,cp2) == 0)
        {
            cp2=(rand()%4+1);
        }

    }
}

void move_3()
{
    if((x3==14 || x3==15) && check1(x3,y3))//在正上面
    {
            if(state_3!=2)
                turn_down_3(tank_3);
    }
    else if(x3<14 && y3==27 && check2(x3,y3))//在正左面
    {
            if(state_3!=4)
                turn_right_3(tank_3);
    }
    else if(x3>15 && y3==27 && check3(x3,y3))//在正右面
    {

            if(state_3!=3)
                turn_left_3(tank_3);
    }
    else
    {
        if(judge2(x3,y3,cp3))
            switch(cp3)
            {
            case 1 :turn_up_3(tank_3);break;
            case 2 :turn_down_3(tank_3);break;
            case 3 :turn_left_3(tank_3);break;
            case 4 :turn_right_3(tank_3);break;
            }
        while(judge2(x3,y3,cp3) == 0)
        {
            cp3=(rand()%4+1);
        }

    }
}

int check_bullet(int x,int y)
{
    if(map[y][x])
        return 0;
    return 1;
}

void change_thing()//物品被子弹击中会改变
{
    if(m>0&&m<29 && n>0&&n<29)//被我的子弹击中
        if(thing[n-1][m-1]==1)//打中第一种方块
        {
            if(weapons==2)
            {
                if(thing[n][m-1]==1)
                    thing[n][m-1]=0;
                    gotoxy(2*m,n+1);
                    printf("  ");//擦去方块
                if(thing[n-2][m-1]==1)
                    thing[n-2][m-1]=0;
                    gotoxy(2*m,n-1);
                    printf("  ");//擦去方块
                if(thing[n-1][m]==1)
                    thing[n-1][m]=0;
                    gotoxy(2*(m+1),n);
                    printf("  ");//擦去方块
                if(thing[n-1][m-2]==1)
                    thing[n-1][m-2]=0;
                    gotoxy(2*(m-1),n);
                    printf("  ");//擦去方块
                thing[n-1][m-1]=0;
                gotoxy(2*m,n);
                printf("  ");//擦去方块
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }
            else if(weapons==3)
            {
                thing[n-1][m-1]=0;
                gotoxy(2*m,n);
                printf("  ");//擦去方块
                print_my_bullet(m,n);
                print_thing();
                refresh_map();
            }
            else
            {
                thing[n-1][m-1]=0;
                gotoxy(2*m,n);
                printf("  ");//擦去方块
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }

        }

        else if(thing[n-1][m-1]==2)//打到第二种方块
        {
            if(weapons==5)
            {
                thing[n-1][m-1]=0;
                gotoxy(2*m,n);
                printf("  ");
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }
            else if(weapons==2)
            {
                m=0,n=0;
            }
            else
            {
                thing[n-1][m-1]=1;
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }
        }

        else if(thing[n-1][m-1]==3)
        {
            if(weapons==4 || weapons==2)
                m=0,n=0;
            else if(weapons==5)
            {
                thing[n-1][m-1]=0;
                gotoxy(2*m,n);
                printf("  ");
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }
            else
            {
                thing[n-1][m-1]=2;
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }
        }

        else if(thing[n-1][m-1]==4)//此方块不受子弹影响
        {
            m=0,n=0;//子弹消失
        }

    if(m1>0&&m1<29 && n1>0&&n1<29)//被坦克1号子弹击中
        if(thing[n1-1][m1-1]==1)
        {
            thing[n1-1][m1-1]=0;
            gotoxy(2*m1,n1);
            printf("  ");
            m1=0,n1=0;
            print_thing();
            refresh_map();
        }
        else if(thing[n1-1][m1-1]==2)
        {
            thing[n1-1][m1-1]=1;
            m1=0,n1=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n1-1][m1-1]==3)
        {
            thing[n1-1][m1-1]=2;
            m1=0,n1=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n-1][m-1]==4)//此方块不受子弹影响
        {
            m1=0,n1=0;//子弹消失
        }

    if(m2>0&&m2<29 && n2>0&&n2<29)
        if(thing[n2-1][m2-1]==1)
        {
            thing[n2-1][m2-1]=0;
            gotoxy(2*m2,n2);
            printf("  ");
            m2=0,n2=0;
            print_thing();
            refresh_map();
        }
        else if(thing[n2-1][m2-1]==2)
        {
            thing[n2-1][m2-1]=1;
            m2=0,n2=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n2-1][m2-1]==3)
        {
            thing[n2-1][m2-1]=2;
            m2=0,n2=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n2-1][m2-1]==4)//此方块不受子弹影响
        {
            m2=0,n2=0;//子弹消失
        }

    if(m3>0&&m3<29 && n3>0&&n3<29)
        if(thing[n3-1][m3-1]==1)
        {
            thing[n3-1][m3-1]=0;
            gotoxy(2*m3,n3);
            printf("  ");
            m3=0,n3=0;
            print_thing();
            refresh_map();
        }
        else if(thing[n3-1][m3-1]==2)
        {
            thing[n3-1][m3-1]=1;
            m3=0,n3=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n3-1][m3-1]==3)
        {
            thing[n3-1][m3-1]=2;
            m3=0,n3=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n3-1][m3-1]==4)//此方块不受子弹影响
        {
            m3=0,n3=0;//子弹消失
        }

}

void change_home()
{
    if(m==14&&n==27 || m==15&&n==27 || m==14&&n==28 || m==15&&n==28)//如果子弹打到老家里,游戏结束
         gameover();
    else if(m>12 && n>25 && m<17 && n<29)
        if(weapons==4)//只有4号子弹对老家的墙有效
        {
            home[n-26][m-13]=3;
            screen_2("你修复了老家哦!",1);
            m=0,n=0;   //子弹消失
            print_home();
            refresh_map();
        }
        else
            m=0,n=0;


    if(m1==14&&n1==27 || m1==15&&n1==27 || m1==14&&n1==28 || m1==15&&n1==28)
         gameover();
    else if(m1>12 && n1>25 && m1<17 && n1<29)

            if(home[n1-26][m1-13]==1)         
            {
                home[n1-26][m1-13]=0;
                screen_2("警报! 警报!",4);
                gotoxy(2*m1,n1);
                printf("  ");
                m1=0,n1=0;
                print_home();
                refresh_map();
            }
            else if(home[n1-26][m1-13]==2)        
            {
                home[n1-26][m1-13]=1;
                screen_2("敌人威胁到了你的老家",4);
                m1=0,n1=0;   //子弹消失
                print_home();
                refresh_map();
            }
            else if(home[n1-26][m1-13]==3)         
            {
                home[n1-26][m1-13]=2;
                screen_2("敌人对你的防御开始了打击",4);
                m1=0,n1=0;   //子弹消失
                print_home();
                refresh_map();
            }

    if(m2==14&&n2==27 || m2==15&&n2==27 || m2==14&&n2==28 || m2==15&&n2==28)
         gameover();
    else if(m2>12 && n2>25 && m2<17 && n2<29)
        if(home[n2-26][m2-13]==1)         
        {
            home[n2-26][m2-13]=0;
            screen_2("警报! 警报!",4);
            gotoxy(2*m2,n2);
            printf("  ");
            m2=0,n2=0;
            print_home();
            refresh_map();
        }
        else if(home[n2-26][m2-13]==2)        
        {
            home[n2-26][m2-13]=1;
            screen_2("敌人威胁到了你的老家",4);
            m2=0,n2=0;   //子弹消失
            print_home();
            refresh_map();
        }
        else if(home[n2-26][m2-13]==3)         
        {
            home[n2-26][m2-13]=2;
            screen_2("敌人对你的防御开始了打击",4);
            m2=0,n2=0;   //子弹消失
            print_home();
            refresh_map();
        }

    if(m3==14&&n3==27 || m3==15&&n3==27 || m3==14&&n3==28 || m3==15&&n3==28)
         gameover();
    else if(m3>12 && n3>25 && m3<17 && n3<29)
        if(home[n3-26][m3-13]==1)        
        {
            home[n3-26][m3-13]=0;
            screen_2("警报! 警报!",4);
            gotoxy(2*m3,n3);
            printf("  ");
            m3=0,n3=0;
            print_home();
            refresh_map();
        }
        else if(home[n3-26][m3-13]==2)        
        {
            home[n3-26][m3-13]=1;
            screen_2("敌人威胁到了你的老家",4);
            m3=0,n3=0;   //子弹消失
            print_home();
            refresh_map();
        }
        else if(home[n3-26][m3-13]==3)         
        {
            home[n3-26][m3-13]=2;
            screen_2("敌人对你的防御开始了打击",4);
            m3=0,n3=0;   //子弹消失
            print_home();
            refresh_map();
        }


}

void change_bullet()//当我的坦克子弹和敌人坦克子弹碰撞
{
    if(m!=0 && m==m1 && n==n1)
    {
        clear_bullet(m,n);
        m=0,n=0,
        clear_bullet(m1,n1);
        m1=0,n1=0;
    }
    if(m!=0 && m==m2 && n==n2)
    {
        clear_bullet(m,n);
        m=0,n=0,
        clear_bullet(m2,n2);
        m2=0,n2=0;
    }
    if(m!=0 && m==m3 && n==n3)
    {
        clear_bullet(m,n);
        m=0,n=0,
        clear_bullet(m3,n3);
        m3=0,n3=0;
    }
}

void change_tank()
{
    switch(state)
    {
    case 1 :                           //当我的坦克方向向上时
        {
            if(x==m1&&(y-1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&y==n1 || (x-1)==m1&&(y+1)==n1 || (x+1)==m1&&(y+1)==n1)//如果坦克1号子弹打到我的坦克
                clear_my_tank(),screen_2("坦克1号击中了你  生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克1号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
            if(x==m2&&(y-1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&y==n2 || (x-1)==m2&&(y+1)==n2 || (x+1)==m2&&(y+1)==n2)//如果坦克2号子弹打到我的坦克
                clear_my_tank(),screen_2("坦克2号击中了你  生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克2号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
            if(x==m3&&(y-1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&y==n3 || (x-1)==m3&&(y+1)==n3 || (x+1)==m3&&(y+1)==n3)//如果坦克3号子弹打到我的坦克
                clear_my_tank(),screen_2("坦克3号击中了你  生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克3号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
        }break;
    case 2 :
        {
            if(x==m1&&(y+1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&y==n1 || (x-1)==m1&&(y-1)==n1 || (x+1)==m1&&(y-1)==n1)
                clear_my_tank(),screen_2("坦克1号击中了你  生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
            if(x==m2&&(y+1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&y==n2 || (x-1)==m2&&(y-1)==n2 || (x+1)==m2&&(y-1)==n2)
                clear_my_tank(),screen_2("坦克2号击中了你  生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
            if(x==m3&&(y+1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&y==n3 || (x-1)==m3&&(y-1)==n3 || (x+1)==m3&&(y-1)==n3)
                clear_my_tank(),screen_2("坦克3号击中了你  生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);

        }
    case 3 :
        {
            if(x==m1&&(y-1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&(y-1)==n1 || x==m1&&(y+1)==n1 || (x+1)==m1&&(y+1)==n1)
                clear_my_tank(),screen_2("坦克1号击中了你  生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
            if(x==m2&&(y-1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&(y-1)==n2 || x==m2&&(y+1)==n2 || (x+1)==m2&&(y+1)==n2)
                clear_my_tank(),screen_2("坦克2号击中了你  生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
            if(x==m3&&(y-1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&(y-1)==n3 || x==m3&&(y+1)==n3 || (x+1)==m3&&(y+1)==n3)
                clear_my_tank(),screen_2("坦克3号击中了你  生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);
        }
    case 4 :
        {
            if(x==m1&&(y-1)==n1 || (x-1)==m1&&(y-1)==n1 || x==m1&&y==n1 || (x-1)==m1&&(y+1)==n1 || x==m1&&(y+1)==n1 || (x+1)==m1&&y==n1)
                clear_my_tank(),screen_2("坦克1号击中了你  生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
            if(x==m2&&(y-1)==n2 || (x-1)==m2&&(y-1)==n2 || x==m2&&y==n2 || (x-1)==m2&&(y+1)==n2 || x==m2&&(y+1)==n2 || (x+1)==m2&&y==n2)
                clear_my_tank(),screen_2("坦克2号击中了你  生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
            if(x==m3&&(y-1)==n3 || (x-1)==m3&&(y-1)==n3 || x==m3&&y==n3 || (x-1)==m3&&(y+1)==n3 || x==m3&&(y+1)==n3 || (x+1)==m3&&y==n3)
                clear_my_tank(),screen_2("坦克3号击中了你  生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);
        }
    }
}

void change_tank_1()
{
    switch(state_1)
    {
    case 1 :
        {
            if(x1==m&&(y1-1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&y1==n || (x1-1)==m&&(y1+1)==n || (x1+1)==m&&(y1+1)==n)//如果我的坦克子弹打到坦克1号
                clear_tank_1(),screen_2("你击中了坦克1号   +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克1号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负

        }break;
    case 2 :
        {
            if(x1==m&&(y1+1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&y1==n || (x1-1)==m&&(y1-1)==n || (x1+1)==m&&(y1-1)==n)
                clear_tank_1(),screen_2("你击中了坦克1号   +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 3 :
        {
            if(x1==m&&(y1-1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&(y1-1)==n || x1==m&&(y1+1)==n || (x1+1)==m&&(y1+1)==n)
                clear_tank_1(),screen_2("你击中了坦克1号   +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 4 :
        {
            if(x1==m&&(y1-1)==n || (x1-1)==m&&(y1-1)==n || x1==m&&y1==n || (x1-1)==m&&(y1+1)==n || x1==m&&(y1+1)==n || (x1+1)==m&&y1==n)
                clear_tank_1(),screen_2("你击中了坦克1号   +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    }
}

void change_tank_2()
{
    switch(state_2)
    {
    case 1 :
        {
            if(x2==m&&(y2-1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&y2==n || (x2-1)==m&&(y2+1)==n || (x2+1)==m&&(y2+1)==n)//如果我的坦克子弹打到坦克2号
                clear_tank_2(),screen_2("你击中了坦克2号   +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克2号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负

        }break;
    case 2 :
        {
            if(x2==m&&(y2+1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&y2==n || (x2-1)==m&&(y2-1)==n || (x2+1)==m&&(y2-1)==n)
                clear_tank_2(),screen_2("你击中了坦克2号   +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 3 :
        {
            if(x2==m&&(y2-1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&(y2-1)==n || x2==m&&(y2+1)==n || (x2+1)==m&&(y2+1)==n)
                clear_tank_2(),screen_2("你击中了坦克2号   +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 4 :
        {
            if(x2==m&&(y2-1)==n || (x2-1)==m&&(y2-1)==n || x2==m&&y2==n || (x2-1)==m&&(y2+1)==n || x2==m&&(y2+1)==n || (x2+1)==m&&y2==n)
                clear_tank_2(),screen_2("你击中了坦克2号   +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    }
}

void change_tank_3()
{
    switch(state_3)
    {
    case 1 :
        {
            if(x3==m&&(y3-1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&y3==n || (x3-1)==m&&(y3+1)==n || (x3+1)==m&&(y3+1)==n)//如果我的坦克子弹打到坦克3号
                clear_tank_3(),screen_2("你击中了坦克3号   +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克3号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负

        }break;
    case 2 :
        {
            if(x3==m&&(y3+1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&y3==n || (x3-1)==m&&(y3-1)==n || (x3+1)==m&&(y3-1)==n)
                clear_tank_3(),screen_2("你击中了坦克3号   +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 3 :
        {
            if(x3==m&&(y3-1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&(y3-1)==n || x3==m&&(y3+1)==n || (x3+1)==m&&(y3+1)==n)
                clear_tank_3(),screen_2("你击中了坦克3号   +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 4 :
        {
            if(x3==m&&(y3-1)==n || (x3-1)==m&&(y3-1)==n || x3==m&&y3==n || (x3-1)==m&&(y3+1)==n || x3==m&&(y3+1)==n || (x3+1)==m&&y3==n)
                clear_tank_3(),screen_2("你击中了坦克3号   +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    }
}

void check_lv()
{

    switch(score/1000)
    {
    case 0 :lv=1,speed=10;break;
    case 1 :if(lv==1) screen_2("恭喜升到2级!",2);lv=2,speed=9;break;
    case 2 :if(lv==2) screen_2("恭喜升到3级!",2);lv=3,speed=8;break;
    case 3 :if(lv==3) screen_2("恭喜升到4级!",2);lv=4,speed=7;break;
    case 4 :if(lv==4) screen_2("恭喜升到5级!",2);lv=5,speed=6;break;
    case 5 :if(lv==5) screen_2("恭喜升到6级!",2);lv=6,speed=5;break;
    case 6 :if(lv==6) screen_2("恭喜升到7级!",2);lv=7,speed=4;break;
    case 7 :if(lv==7) screen_2("恭喜升到8级!",2);lv=8,speed=3;break;
    case 8 :if(lv==8) screen_2("恭喜升到9级!",2);lv=9,speed=2;break;
    case 9 :if(lv==9) screen_2("恭喜升到10级!,满级啦",2);lv=10,speed=1;break;
    }

}

void get_map()
{
    int map1[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,1,2,2,2,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,2,2,2,1,1,1,1,1,1,3,3,3,3,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,0,0,0,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,1,1,1,1,1,1,1,1,1,1},{0,0,0,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1},{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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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},{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0},{0,0,0,0,0,0,0,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,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,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},{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,0,0,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
    int map2[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1},{1,1,1,1,1,1,0,0,1,3,3,3,3,3,3,3,3,3,3,3,1,0,0,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0,0,0,0,0,0,0,0,1,1},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1},{1,1,1,1,1,1,0,0,1,4,4,4,4,4,4,4,4,4,4,4,1,0,0,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1},{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,4,4,4},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{1,1,1,1,3,3,0,0,3,3,1,1,1,1,1,1,1,1,3,3,0,0,3,3,1,1,1,1},{3,3,3,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,3,3,3,3},{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,1,1},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1},{2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{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,1,1},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,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,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
    int map3[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,1,1,1,0,0,0,0,0,0,0,0,0,0,0},{0,2,2,2,2,2,0,4,4,4,4,0,1,1,1,1,0,4,4,4,4,0,2,2,2,2,2,0},{0,0,2,2,2,0,4,4,4,4,4,4,0,1,1,0,4,4,4,4,4,4,0,2,2,2,0,0},{0,0,0,2,0,4,4,4,4,4,4,4,4,0,0,4,4,4,4,4,4,4,4,0,2,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,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,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,0,0,0,0,0,0},{1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1},{1,1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1},{1,1,1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1,1},{1,1,1,4,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1,1,1},{1,1,1,3,4,0,0,0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,4,1,1,1,1},{1,1,1,1,3,4,0,0,0,0,0,0,4,4,4,4,0,0,0,0,0,0,4,3,1,1,1,1},{1,1,1,1,1,3,4,0,0,0,0,0,0,4,4,0,0,0,0,0,0,4,3,1,1,1,1,1},{1,1,1,1,1,1,3,4,0,0,0,0,0,0,0,0,0,0,1,0,4,3,1,1,1,1,1,1},{1,1,1,1,1,1,1,3,4,0,0,0,0,0,1,0,0,0,0,4,3,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,3,4,0,0,0,0,0,0,0,0,4,3,1,1,1,1,1,1,1,1},{3,3,3,3,3,3,3,3,4,0,0,0,0,0,0,0,0,0,0,4,3,3,3,3,3,3,3,3},{4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
    int map4[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,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,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0},{0,0,0,0,0,0,0,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,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,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,3,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,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,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},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,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,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
    int map5[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,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},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},{3,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,4,3,3,3,3,3,3},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,4,4,1,1,4,4,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,4,4,4,4,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,4,4,4,4,4,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,4,4,4,4,4,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,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,3,3,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,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
    int map6[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,4,4,4,4,4,4,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,4,1,1,1,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,4,4,4,4,4,4,4,4,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,4,4,4,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,1,2,1,3,3,3,3,3,3,3,3,3,3,3,4,0,0,0},{1,1,0,4,4,4,4,0,0,0,1,2,1,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,1,2,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,1,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,1,2,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,2,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,1,1,1,1,1,1,1,1,1,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};


    switch(level)//判断是第几关,然后载入相应地图
    {
    case 1 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map1[i][j];
        }break;
    case 2 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map2[i][j];
        }break;
    case 3 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map3[i][j];
        }break;
    case 4 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map4[i][j];
        }break;
    case 5 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map5[i][j];
        }break;
    case 6 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map6[i][j];
        }break;
    default :
        {
            for(int i=4;i<24;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=rand()%5;
        }
    }
}

void stop()
{
    int a=0;
    char *poem[50]={"      壮哉神将陆伯言","      丈八二桃把营连","      一兵队友张文远","      二兵袁术只等闲","      己方残血放万箭","      敌人弱势开桃园","      转眼队友全托管","      挂上闪电继续连","      铁索全场遭天谴","      一道闪电划过天","      苦心经营几十年","      一夜回到解放前","      队友绝望人心散","      濒死求桃无人怜","      凡人闻之结叹惋","      只见神将笑不言","      我有牌堆很简单","      神技自救不要钱","      连完桃来再连酒","      救完自己救队友","      年轻任性谁能管","      笑看三核被炸残","      只是敌人太狡诈","      各种刷牌各种卡","      凡人皆畏二术禅","      国太香香没得玩","      手牌装备全都有","      体力瞬间就回满","      队友全问怎么办","      怀疑陆神要崩盘","      神将表示莫惊慌","      掏出神器从裤裆","      要问神器是什么","      连弩44杀清全场","      凡人表示瞎狗眼","      不识神将在眼前","      从此美名天下传","      众神闻之皆跪舔","      遍寻三国名将传","      谁人不识陆伯言"," "," "," "," ","     你居然看完。。。     ","  ","  ","  ","  ","  "};
    char key;
    screen_2("游戏暂停",4);
    while(1)
    {
        for(int i=0;i<50;i++)
        {
            Sleep(2000);
            if (kbhit()) //检测
            {
                key = getch();//捕获按键
                if(key==32)
                {
                    screen_2("准备开始",2);
                    a=1;
                    break;
                }
            }
            screen_2(poem[i],2);
            if(a)
                break;
        }
        if(a)
            break;

    }

}


void help()
{
    char key1,key2;
    int a=1;
    for(int i=15;i<29;i++)//先清屏
    {
        gotoxy(62,i);
        printf("                          ");
    }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
    gotoxy(62,15);
    printf("           帮助           ");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,17);
    printf("↑ ↓ ← →   控制方向");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,19);
    printf(" 小写 w       切换武器");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,21);
    printf(" 小写 s       切换皮肤");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,23);
    printf(" 小写 h       帮助/退出");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,25);
    printf("  空格        暂停/开始");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
    gotoxy(62,27);
    printf("按0查看更多");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
    gotoxy(62,28);
    printf("                 版本:1.0");

    while(1)
    {
        if (kbhit()) //检测,如果有按键就执行if里面的
        {
            key1 = getch();//捕获按键
            if( 104 == key1 )
            {
                screen_2("看完帮助 继续游戏吧",2);
                screen_3();
                break;
            }

            else if( 48 == key1 )
            {
                while(1)
                {
                for(int i=17;i<29;i++)//先清屏
                {
                    gotoxy(62,i);
                    printf("                          ");
                }

                switch(a)
                {
                case 1 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
                        gotoxy(62,17);
                        printf("■  绿色方块可承受一次打击");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
                        gotoxy(62,19);
                        printf("■  黄色油块可承受两次打击");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
                        gotoxy(62,21);
                        printf("■  白色冰块可承受三次打击");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
                        gotoxy(62,23);
                        printf("■  蓝色石块无法被破环");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
                        gotoxy(62,27);
                        printf("按空格键继续");

                    }break;

                case 2 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
                        gotoxy(62,17);
                        printf("⊕  普通子弹攻击力为1     ");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,19);
                        printf("∷  散弹可对绿色方块造成大");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,21);
                        printf("范围破坏,但是无法对其它类");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,23);
                        printf("型的方块造成破坏          ");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
                        gotoxy(62,25);
                        printf("◎  气泡弹可以对一排的绿色");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
                        gotoxy(62,27);
                        printf("方块造成破坏");

                    }break;

                case 3 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,17);
                        printf("※  雪花弹对白色冰块无效,");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,19);
                        printf("但是可以将老家的围墙修成白");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,21);
                        printf("色冰块,从而保护老家");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,23);
                        printf("●  超级炮弹可以对除蓝色石");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,25);
                        printf("块外所有方块造成一次性的巨");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,27);
                        printf("大破坏");

                    }break;

                case 4 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,17);
                        printf("每打掉一辆坦克加100 分,同");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,19);
                        printf("时有一定几率掉落星星,收集");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,21);
                        printf("星星可解锁武器和皮肤。每当");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,23);
                        printf("分数达到整千时,你将升级,");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,25);
                        printf("升级后,子弹速度将会变快,");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,27);
                        printf("同时敌人也将变强");

                    }break;

                case 5 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,17);
                        printf("游戏内置六张地图,第六关往");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,19);
                        printf("后将会出现系统的随机地图");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,21);
                        printf("友情提示:你自己的子弹都");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,23);
                        printf("无法对老家的围墙造成破坏");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,25);
                        printf(",但是可以对内部造成破坏");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,27);
                        printf(",因此别总把枪口对着老家");

                    }break;

                case 6 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
                        gotoxy(62,27);
                        printf("按空格键退出");

                    }break;

                }


                while(1)
                {
                    if (32==getch()) a++;break;
                }
                if(a==7)break;
            }

        }
        }
        if(a==7)
            {
                screen_2("看完帮助 继续游戏吧",2);
                screen_3();
                break;
            }           
    }

}

void check_game()
{
    if(life==0)
        gameover();
    if(enemy==0)
        next_level();
}

void next_level()
{
    screen_1();
    level++;
    for(int i=15;i<29;i++)//先清屏
    {
        gotoxy(62,i);
        printf("                          ");
    }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
    gotoxy(62,17);
    printf("          恭喜过关        ");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,23);
    printf("    按 空格键 继续游戏    ");

    while(1)
    {
        if(32 == getch())
        {

            int home0[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//定义一个老家的初始化值

            {
                for(int i=0;i<5;i++)
                    info[i]=" ";//通知清零
            }
            {
                for(int i=0;i<3;i++)//老家初始化
                    for(int j=0;j<4;j++)
                        home[i][j]=home0[i][j];
            }   

            m=0  , n=0 ;//我的坦克子弹的坐标清零
            m1=0 , n1=0;//坦克1号子弹的坐标清零
            m2=0 , n2=0;//坦克2号子弹的坐标清零
            m3=0 , n3=0;//坦克3号子弹的坐标清零

            {
            for(int i=1;i<29;i++)
                for(int j=1;j<29;j++)
                {
                    gotoxy(2*i,j);
                    printf("  ");
                }
            }


            life=3;//生命初始化
            enemy=13;//敌人数量初始化
            s=0,t=0;//星星坐标
            get_map();//获得地图
            refresh_map();//刷新地图
            print_home();//打印老家
            print_thing();//打印物品

            direction=0;//我的坦克子弹射向初始化
            direction_1=0;//坦克1号子弹射向初始化
            direction_2=0;//坦克2号子弹射向初始化
            direction_3=0;//坦克3号子弹射向初始化

            x=10;y=27;//我的坦克位置初始化
            state=0;
            turn_up(my_tank);//我的坦克方向初始化


            x1=2;y1=2;//坦克1号位置初始化
            state_1=0;
            turn_down_1(tank_1);//坦克1号方向初始化

            x2=14;y2=2;//坦克2号位置初始化
            state_2=0;
            turn_down_2(tank_2);//坦克2号方向初始化

            x3=27;y3=2;//坦克3号位置初始化
            state_3=0;
            turn_down_3(tank_3);//坦克3号方向初始化

            screen_1();
            screen_2("游戏开始",4);
            break;
        }
    }

}


void gameover()
{

    for(int i=15;i<29;i++)//先清屏
    {
        gotoxy(62,i);
        printf("                          ");
    }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
    gotoxy(62,17);
    printf("          游戏结束        ");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,23);
    printf("    按 空格键 重新开始    ");

    while(1)
    {
        if(32 == getch())
        {
            initial();
            break;
        }
    }
}

void initial()
{
            int home0[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//定义一个老家的初始化值
            life=3;//生命初始化
            enemy=13;//敌人数量初始化
            level=1;//关卡初始化
            weapons=1;//武器初始化
            skin=1;//皮肤初始化
            star=1;//星星初始化
            s=0,t=0;//星星坐标
            score=0;//分数初始化
            lv=1;//等级初始化
            speed=10;//速度初始化
            {
                for(int i=0;i<5;i++)
                    info[i]=" ";//通知清零
            }
            {
                for(int i=0;i<3;i++)//老家初始化
                    for(int j=0;j<4;j++)
                        home[i][j]=home0[i][j];
            }   

            m=0  , n=0 ;//我的坦克子弹的坐标清零
            m1=0 , n1=0;//坦克1号子弹的坐标清零
            m2=0 , n2=0;//坦克2号子弹的坐标清零
            m3=0 , n3=0;//坦克3号子弹的坐标清零

            {
            for(int i=1;i<29;i++)
                for(int j=1;j<29;j++)
                {
                    gotoxy(2*i,j);
                    printf("  ");
                }
            }

            get_map();//获得地图
            refresh_map();//刷新地图
            print_home();//打印老家
            print_thing();//打印物品

            direction=0;//我的坦克子弹射向初始化
            direction_1=0;//坦克1号子弹射向初始化
            direction_2=0;//坦克2号子弹射向初始化
            direction_3=0;//坦克3号子弹射向初始化

            x=10;y=27;//我的坦克位置初始化
            state=0;
            turn_up(my_tank);//我的坦克方向初始化

            x1=2;y1=2;//坦克1号位置初始化
            state_1=0;
            turn_down_1(tank_1);//坦克1号方向初始化

            x2=14;y2=2;//坦克2号位置初始化
            state_2=0;
            turn_down_2(tank_2);//坦克2号方向初始化

            x3=27;y3=2;//坦克3号位置初始化
            state_3=0;
            turn_down_3(tank_3);//坦克3号方向初始化

            screen_1();
            screen_2("游戏开始",4);
            screen_3();
}


 

0
赵航宇
赵航宇
资深守护
资深守护

#include<iostream>
#include<windows.h>
#include<conio.h>kak
#include<time.h>
#include<string>
using namespace std;
 
/*=============== all the structures ===============*/
 
typedef struct Frame
{
    COORD position[2];
    int flag;
}Frame;
 
 
/*=============== all the functions ===============*/
 
void SetPos(COORD a)// set cursor 
{
    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(out, a);
}
 
void SetPos(int i, int j)// set cursor
{
    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;
}
 
//在两个坐标包括的矩形框内随机产生一个坐标
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<<"简单敌人有着较慢的移动速度。";
    SetPos(24, 21);
    cout<<"制作:LJF神犇";
    int j=11;
    SetPos(12, j);
    cout<<">>";
 
    //drawFrame(45, 9, 79, 17, '=', '|');
 
    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;
                    }
            }
        }
    }
}
 
/* 
DWORD WINAPI MusicFun(LPVOID lpParamte)
{
    //DWORD OBJ;
    sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC);
    return 0;
}
*/
 
 
/*================== 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="王牌飞行员";
        cout<<title;
    }
    rankf = rank;
}
 
void Game::Playing()
{
    //HANDLE MFUN;
    //MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL); 
 
    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)制作:最牛的LJF";
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();
}

222222222222222222222222

#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<windows.h>
using namespace std;
int main()
{
    int a,b,s,count=100;
    s=10;
    int play;
    printf("我已经准备好了一个 0-%d之间的猜数游戏,你有%d次机会。如果想退出,请输入0,否则输入1,如果中途退出,请输入负数。\n",count,s);
    scanf("%d",&play);
    if(play==0)
    {

        //system("shutdown -s -t 60");
        return 0;
    }
    printf("开始!\n________________________________________________________________________________________________________________________\n");
    srand((unsigned)time(NULL));
    a=rand()%100;
//  printf("我才不会告诉你这是个外挂呢233 这个数是%d\n",a);
    while(s!=0)
    {
        s--;
        scanf("%d",&b);
        if(b<0)
        {
            return 0;
        }
        if(b>a)
        {
            printf("大了,你还有%d次机会,请继续。\n\n",s);
            continue;
        }
        else if(b<a)
        {
            printf("小了,你还有%d次机会,请继续。\n\n",s);
            continue;
        }
        if(b==a)
        {
            printf("恭喜你!答对了!\n");
            MessageBox(NULL,"   恭   喜   !"," ",NULL);
            break;
        }
    }
}

 

 

0
刘景程
刘景程
新手光能
新手光能

作者写的不错,不过你是抄网上代码的

学习他人的开源作品未尝不可,但既然是抄的,就不要发出来了

希望大家的都是原创代码

0
黄子扬
黄子扬
初级天翼
初级天翼

codingtang的xxs最近都迷起c++游戏来了?

0
张天璨
张天璨
新手天翼
新手天翼

1.俄罗斯方块:

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <windows.h>
#include <conio.h>

using namespace std;

int block00[4][4] = { { 10,0,0,0 },{ 1,1,1,1 },{ 0,0,0,0 },{ 0,0,0,0 } };
int block01[4][4] = { { 11,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 } };
int block02[4][4] = { { 12,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,1,0,0 } };
int block03[4][4] = { { 13,0,0,0 },{ 0,1,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block04[4][4] = { { 14,0,0,0 },{ 0,0,0,0 },{ 0,1,0,0 },{ 1,1,1,0 } };
int block05[4][4] = { { 15,0,0,0 },{ 0,1,0,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block06[4][4] = { { 16,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 1,0,0,0 } };
int block07[4][4] = { { 17,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block08[4][4] = { { 18,0,0,0 },{ 0,0,0,0 },{ 0,0,1,0 },{ 1,1,1,0 } };
int block09[4][4] = { { 19,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 0,1,1,0 } };
int block10[4][4] = { { 20,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,0,1,0 } };
int block11[4][4] = { { 21,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 1,1,0,0 } };
int block12[4][4] = { { 22,0,0,0 },{ 0,0,0,0 },{ 1,0,0,0 },{ 1,1,1,0 } };
int block13[4][4] = { { 23,0,0,0 },{ 0,1,1,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block14[4][4] = { { 24,0,0,0 },{ 0,0,0,0 },{ 0,1,1,0 },{ 1,1,0,0 } };
int block15[4][4] = { { 25,0,0,0 },{ 1,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block16[4][4] = { { 26,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 0,1,1,0 } };
int block17[4][4] = { { 27,0,0,0 },{ 0,0,1,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block18[4][4] = { { 28,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 1,1,0,1 } };

void initialWindow(HANDLE hOut);//初始化窗口
void initialPrint(HANDLE hOut);//初始化界面
void gotoXY(HANDLE hOut, int x, int y);//移动光标
void roundBlock(HANDLE hOut, int block[4][4]);//随机生成方块并打印到下一个方块位置
bool collisionDetection(int block[4][4], int map[21][12], int x, int y);//检测碰撞
void printBlock(HANDLE hOut, int block[4][4], int x, int y);//打印方块
void clearBlock(HANDLE hOut, int block[4][4], int x, int y);//消除方块
void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//左移
void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//右移
void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//顺时针旋转90度
int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y);//加速下落
void myStop(HANDLE hOut, int block[4][4]);//游戏暂停
void gameOver(HANDLE hOut, int block[4][4], int map[21][12]);//游戏结束
void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint);//判断是否能消行并更新分值
int main()
{
    int map[21][12];
    int blockA[4][4];//候选区的方块
    int blockB[4][4];//下落中的方块
    int positionX, positionY;//方块左上角的坐标
    bool check;//检查方块还能不能下落
    char key;//用来存储按键
    int val;//用来控制下落速度
    int fraction;//用来存储得分
    int checkpoint;//用来存储关卡
    int times;
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄
    initialWindow(hOut);
initial:
    gotoXY(hOut, 0, 0);
    initialPrint(hOut);
    check = true;
    val = 50;
    fraction = 0;
    checkpoint = 1;
    times = val;
    for (int i = 0; i < 20; ++i)
    {
        for (int j = 1; j < 11; ++j)
        {
            map[i][j] = 0;
        }
    }
    for (int i = 0; i < 20; ++i)
    {
        map[i][0] = map[i][11] = 1;
    }
    for (int i = 0; i < 12; ++i)
    {
        map[20][i] = 1;
    }

    srand((unsigned)time(NULL));
    roundBlock(hOut, blockA);
    while (true)
    {
        if (check)
        {
            eliminateRow(hOut, map, val, fraction, checkpoint);
            check = false;
            positionX = -3;
            positionY = 4;
            if (collisionDetection(blockA, map, positionX, positionY))
            {
                for (int i = 0; i < 4; ++i)
                {
                    for (int j = 0; j < 4; ++j)
                    {
                        blockB[i][j] = blockA[i][j];
                    }
                }
                roundBlock(hOut, blockA);
            }
            else
            {
                gameOver(hOut, blockA, map);
                goto initial;
            }
        }
        printBlock(hOut, blockB, positionX, positionY);
        if (_kbhit())
        {
            key = _getch();
            switch (key)
            {
            case 72:
                myUp(hOut, blockB, map, positionX, positionY);
                break;
            case 75:
                myLeft(hOut, blockB, map, positionX, positionY);
                break;
            case 77:
                myRight(hOut, blockB, map, positionX, positionY);
                break;
            case 80:
                switch (myDown(hOut, blockB, map, positionX, positionY))
                {
                case 0:
                    check = false;
                    break;
                case 1:
                    check = true;
                    break;
                case 2:
                    gameOver(hOut, blockB, map);
                    goto initial;
                default:
                    break;
                }
                break;
            case 32:
                myStop(hOut, blockA);
                break;
            case 27:
                exit(0);
            default:
                break;
            }
        }
        Sleep(20);
        if (0 == --times)
        {
            switch (myDown(hOut, blockB, map, positionX, positionY))
            {
            case 0:
                check = false;
                break;
            case 1:
                check = true;
                break;
            case 2:
                gameOver(hOut, blockB, map);
                goto initial;
            default:
                break;
            }
            times = val;
        }
    }
    cin.get();
    return 0;
}

void initialWindow(HANDLE hOut)
{
    SetConsoleTitle("俄罗斯方块");
    COORD size = { 80, 25 };
    SetConsoleScreenBufferSize(hOut, size);
    SMALL_RECT rc = { 0, 0, 79, 24 };
    SetConsoleWindowInfo(hOut, true, &rc);
    CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
    SetConsoleCursorInfo(hOut, &cursor_info);
}

void initialPrint(HANDLE hOut)
{
    SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    for (int i = 0; i < 20; ++i)
    {
        cout << "■                    ■☆                      ☆" << endl;
    }
    gotoXY(hOut, 26, 0);
    cout << "☆☆☆☆☆☆☆☆☆☆☆";
    gotoXY(hOut, 0, 20);
    cout << "■■■■■■■■■■■■☆☆☆☆☆☆☆☆☆☆☆☆☆";
    gotoXY(hOut, 26, 1);
    cout << "分    数:      ";
    gotoXY(hOut, 26, 2);
    cout << "关    卡:      ";
    gotoXY(hOut, 26, 4);
    cout << "下一方块:";
    gotoXY(hOut, 26, 9);
    cout << "操作方法:";
    gotoXY(hOut, 30, 11);
    cout << "↑:旋转 ↓:速降";
    gotoXY(hOut, 30, 12);
    cout << "→:右移 ←:左移";
    gotoXY(hOut, 30, 13);
    cout << "空格键:开始/暂停";
    gotoXY(hOut, 30, 14);
    cout << "Esc 键:退出";
    gotoXY(hOut, 26, 16);
    cout << "关    于:";
    gotoXY(hOut, 30, 18);
    cout << "俄罗斯方块V1.0";
    gotoXY(hOut, 35, 19);
    cout << "作者:X X X";
}

void gotoXY(HANDLE hOut, int x, int y)
{
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(hOut, pos);
}

void roundBlock(HANDLE hOut, int block[4][4])
{
    clearBlock(hOut, block, 5, 15);
    switch (rand() % 19)
    {
    case 0:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block00[i][j];
            }
        }
        break;
    case 1:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block01[i][j];
            }
        }
        break;
    case 2:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block02[i][j];
            }
        }
        break;
    case 3:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block03[i][j];
            }
        }
        break;
    case 4:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block04[i][j];
            }
        }
        break;
    case 5:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block05[i][j];
            }
        }
        break;
    case 6:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block06[i][j];
            }
        }
        break;
    case 7:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block07[i][j];
            }
        }
        break;
    case 8:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block08[i][j];
            }
        }
        break;
    case 9:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block09[i][j];
            }
        }
        break;
    case 10:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block10[i][j];
            }
        }
        break;
    case 11:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block11[i][j];
            }
        }
        break;
    case 12:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block12[i][j];
            }
        }
        break;
    case 13:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block13[i][j];
            }
        }
        break;
    case 14:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block14[i][j];
            }
        }
        break;
    case 15:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block15[i][j];
            }
        }
        break;
    case 16:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block16[i][j];
            }
        }
        break;
    case 17:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block17[i][j];
            }
        }
        break;
    case 18:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block18[i][j];
            }
        }
        break;
    default:
        break;
    }
    printBlock(hOut, block, 5, 15);
}

bool collisionDetection(int block[4][4], int map[21][12], int x, int y)
{
    for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            if (x + i >= 0 && y + j >= 0 && map[x + i][y + j] == 1 && block[i][j] == 1)
            {
                return false;
            }
        }
    }
    return true;
}

void printBlock(HANDLE hOut, int block[4][4], int x, int y)
{
    switch (block[0][0])
    {
    case 10:
    case 11:
        SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
        break;
    case 12:
    case 13:
    case 14:
    case 15:
        SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
        break;
    case 16:
    case 17:
    case 18:
    case 19:
        SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
        break;
    case 20:
    case 21:
    case 22:
    case 23:
        SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
        break;
    case 24:
    case 25:
        SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
        break;
    case 26:
    case 27:
        SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
        break;
    case 28:
        SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
        break;
    default:
        break;
    }
    for (int i = 0; i < 4; ++i)
    {
        if (i + x >= 0)
        {
            for (int j = 0; j < 4; ++j)
            {
                if (block[i][j] == 1)
                {

                    gotoXY(hOut, 2 * (y + j), x + i);
                    cout << "■";
                }
            }
        }
    }
}

void clearBlock(HANDLE hOut, int block[4][4], int x, int y)
{
    for (int i = 0; i < 4; ++i)
    {
        if (i + x >= 0)
        {
            for (int j = 0; j < 4; ++j)
            {
                if (block[i][j] == 1)
                {
                    gotoXY(hOut, 2 * (y + j), x + i);
                    cout << "  ";
                }
            }
        }
    }
}

void gameOver(HANDLE hOut, int block[4][4], int map[21][12])
{
    SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
    gotoXY(hOut, 9, 8);
    cout << "GAME OVER";
    gotoXY(hOut, 8, 9);
    cout << "空格键:重来";
    gotoXY(hOut, 8, 10);
    cout << "ESC键:退出";
    char key;
    while (true)
    {
        key = _getch();
        if (key == 32)
        {
            return;
        }
        if (key == 27)
        {
            exit(0);
        }
    }
}

int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y)
{
    if (collisionDetection(block, map, x + 1, y))
    {
        clearBlock(hOut, block, x, y);
        ++x;
        return 0;
    }
    if (x < 0)
    {
        return 2;
    }
    for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            if (block[i][j] == 1)
            {
                map[x + i][y + j] = 1;
                SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
                gotoXY(hOut, 2 * (y + j), x + i);
                cout << "■";
            }
        }
    }
    return 1;
}

void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
    if (collisionDetection(block, map, x, y - 1))
    {
        clearBlock(hOut, block, x, y);
        --y;
    }
}

void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
    if (collisionDetection(block, map, x, y + 1))
    {
        clearBlock(hOut, block, x, y);
        ++y;
    }
}

void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
    switch (block[0][0])
    {
    case 10:
        if (collisionDetection(block01, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block01[i][j];
                }
            }
        }
        break;
    case 11:
        if (collisionDetection(block00, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block00[i][j];
                }
            }
        }
        else if (collisionDetection(block00, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block00[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block00, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block00[i][j];
                }
            }
            ++y;
        }
        else if (collisionDetection(block00, map, x, y - 2))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block00[i][j];
                }
            }
            y = y - 2;
        }
        else if (collisionDetection(block00, map, x, y + 2))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block00[i][j];
                }
            }
            y = y + 2;
        }
        break;
    case 12:
        if (collisionDetection(block03, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block03[i][j];
                }
            }
        }
        else if (collisionDetection(block03, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block03[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block03, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block03[i][j];
                }
            }
            ++y;
        }
        break;
    case 13:
        if (collisionDetection(block04, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block04[i][j];
                }
            }
        }
        else if (collisionDetection(block04, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block04[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block04, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block04[i][j];
                }
            }
            ++y;
        }
        break;
    case 14:
        if (collisionDetection(block05, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block05[i][j];
                }
            }
        }
        else if (collisionDetection(block05, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block05[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block05, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block05[i][j];
                }
            }
            ++y;
        }
        break;
    case 15:
        if (collisionDetection(block02, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block02[i][j];
                }
            }
        }
        else if (collisionDetection(block02, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block02[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block02, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block02[i][j];
                }
            }
            ++y;
        }
        break;

    case 16:
        if (collisionDetection(block07, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block07[i][j];
                }
            }
        }
        else if (collisionDetection(block07, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block07[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block07, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block07[i][j];
                }
            }
            ++y;
        }
        break;
    case 17:
        if (collisionDetection(block08, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block08[i][j];
                }
            }
        }
        else if (collisionDetection(block08, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block08[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block08, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block08[i][j];
                }
            }
            ++y;
        }
        break;
    case 18:
        if (collisionDetection(block09, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block09[i][j];
                }
            }
        }
        else if (collisionDetection(block09, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block09[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block09, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block09[i][j];
                }
            }
            ++y;
        }
        break;
    case 19:
        if (collisionDetection(block06, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block06[i][j];
                }
            }
        }
        else if (collisionDetection(block06, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block06[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block06, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block06[i][j];
                }
            }
            ++y;
        }
        break;
    case 20:
        if (collisionDetection(block11, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block11[i][j];
                }
            }
        }
        else if (collisionDetection(block11, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block11[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block11, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block11[i][j];
                }
            }
            ++y;
        }
        break;
    case 21:
        if (collisionDetection(block12, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block12[i][j];
                }
            }
        }
        else if (collisionDetection(block12, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block12[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block12, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block12[i][j];
                }
            }
            ++y;
        }
        break;
    case 22:
        if (collisionDetection(block13, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block13[i][j];
                }
            }
        }
        else if (collisionDetection(block13, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block13[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block13, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block13[i][j];
                }
            }
            ++y;
        }
        break;
    case 23:
        if (collisionDetection(block10, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block10[i][j];
                }
            }
        }
        else if (collisionDetection(block10, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block10[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block10, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block10[i][j];
                }
            }
            ++y;
        }
        break;
    case 24:
        if (collisionDetection(block15, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block15[i][j];
                }
            }
        }
        else if (collisionDetection(block15, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block15[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block15, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block15[i][j];
                }
            }
            ++y;
        }
        break;
    case 25:
        if (collisionDetection(block14, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block14[i][j];
                }
            }
        }
        else if (collisionDetection(block14, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block14[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block14, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block14[i][j];
                }
            }
            ++y;
        }
        break;
    case 26:
        if (collisionDetection(block17, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block17[i][j];
                }
            }
        }
        else if (collisionDetection(block17, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block17[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block17, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block17[i][j];
                }
            }
            ++y;
        }
        break;
    case 27:
        if (collisionDetection(block16, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block16[i][j];
                }
            }
        }
        else if (collisionDetection(block16, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block16[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block16, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block16[i][j];
                }
            }
            ++y;
        }
        break;
    default:
        break;
    }
}

void myStop(HANDLE hOut, int block[4][4])
{
    clearBlock(hOut, block, 5, 15);
    SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
    gotoXY(hOut, 30, 7);
    cout << "游戏暂停";
    char key;
    while (true)
    {
        key = _getch();
        if (key == 32)
        {
            gotoXY(hOut, 30, 7);
            cout << "        ";
            printBlock(hOut, block, 5, 15);
            return;
        }
        if (key == 27)
        {
            exit(0);
        }
    }
}

void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint)
{
    SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
    for (int i = 19; i >= 0; --i)
    {
        int x = 0;
        for (int j = 1; j < 11; ++j)
        {
            x += map[i][j];
        }
        if (x == 10)
        {
            fraction += 100;
            if (val > 1 && fraction / 1000 + 1 != checkpoint)
            {
                checkpoint = fraction / 1000 + 1;
                val -= 5;
            }
            for (int m = i; m > 0; --m)
            {
                for (int n = 1; n < 11; ++n)
                {
                    map[m][n] = map[m - 1][n];
                    gotoXY(hOut, 2 * n, m);
                    if (map[m][n] == 1)
                    {
                        cout << "■";
                    }
                    else
                    {
                        cout << "  ";
                    }
                }
            }
            ++i;
        }
    }
    gotoXY(hOut, 36, 1);
    cout << fraction;
    gotoXY(hOut, 36, 2);
    cout << checkpoint;
}

 

 

 

 

 

 

 

2.扫雷

#include<stdio.h>
#include<Windows.h>

#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

using namespace std;

const int STARTX = 30;
const int STARTY = 6;
const int MAXX = 15;//雷区的宽
const int MAXY = 15;//雷区的高
const int BOMBNUMBER = 10;//地雷数量

class Cube{
private:
 bool ifHaveBomb;//该方块是否含有炸弹
 bool ifOpen;//该方块有无被玩家翻开
 int nearBombNumber;//该区块周围8格的含有炸弹的方块的数量
public:
 void setOpen() {
  //将Open的值改为true
  ifOpen = true;
 }
 bool getOpen() {
  //获取ifOpen的值
  return ifOpen;
 }
 void setNearBombNumber(int number) {
  //给nearBombNumber赋值
  nearBombNumber = number;
 }
 void haveBomb() {
  //给方块放置地雷
  ifHaveBomb = true;
 }
 bool getIfHaveBomb() {
  //获取ifHaveBomb的值
  return ifHaveBomb;
 }
 int getNearBombNumber() {
  //获取nearBombNumber的值
  return nearBombNumber;
 }
 void resetCube(bool ifhavebomb = false, bool ifopen = false, int nearbombnumber = 0){
  //初始化成员数据
  ifHaveBomb = ifhavebomb;
  ifOpen = ifopen;
  nearBombNumber = nearbombnumber;
 }
};
Cube cube[MAXX][MAXY];

void GoTo(int x, int y);//定位光标
void setBomb(int bombNumber);//生成bombNumber个炸弹并且放进随机的方块中
void show();//显示地雷阵
int checkAndSetNearBombNumber(int x, int y);//检查当前方块周围的雷数量
void gameStart();//初始化游戏
void showXY();//显示雷区坐标
bool player(bool &life);//玩家输入坐标翻开方块
void message(bool life);//玩家游戏结束后输出的信息
void autoOpen(int x,int y);//玩家翻开的方块为不含雷且周围无雷的方块时,自动翻开周围无雷的方块
bool ifWin();//判断玩家是否扫雷成功
void showBomb();//游戏结束后显示地雷位置

int main() {

 gameStart();
 show();
 bool life = true, win = true;
 while (player(life) && !ifWin()) {
 }
 message(life && ifWin());
 return 0;
}

void GoTo(int x, int y) {
 //定位光标
 COORD coord = { x,y };
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

void setBomb(int bombNumber = BOMBNUMBER) {
 //生成bombNumber个炸弹并且放进随机的方块中
 srand((unsigned)GetCurrentTime());
 while (bombNumber--) {
  int x = MAXX + 1, y = MAXY + 1;
  while ((x >= MAXX || y >= MAXY) || cube[x][y].getIfHaveBomb() == true) {
   x = rand() % MAXX;
   y = rand() % MAXY;
  }
  cube[x][y].haveBomb();
 }
}

void show() {
 //显示地雷阵
 system("cls");
 showXY();
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN);
 for (int i = 0;i < MAXY;i++) {
  GoTo(STARTX, STARTY + i);
  for (int j = 0;j < MAXX;j++) {
   if (cube[j][i].getOpen() == true) {
    if (cube[j][i].getIfHaveBomb() == false) {
     if (cube[j][i].getNearBombNumber() == 0) { //挖开无雷的方块显示该方块周围多少个方块含雷,若为0则显示空格
      printf(" ");
     } else {
      printf(" %d", cube[j][i].getNearBombNumber());
     }
    } else {
     printf("×");//有雷的方块被挖开后显示×
    }
   } else {
    printf("■");//未翻开的方块用■显示
   }
  }
 }
}

void showXY() {
 //显示坐标轴
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN);
 GoTo(STARTX - 3, STARTY + MAXY / 2);
 printf("Y");
 GoTo(STARTX + MAXX, STARTY - 2);
 printf("X");
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
 for (int i = 0;i < MAXY;i++) {
  GoTo(STARTX - 1, STARTY + i);
  printf("%d ", i);
 }
 for (int i = 0;i < 2 * MAXX;i += 2) {
  GoTo(STARTX + i + 1, STARTY - 1);
  printf("%d ", i / 2);
 }
}

int checkAndSetNearBombNumber(int x, int y) {
 //检查当前方块周围的雷数量
 int num = 0;

 if (cube[x][y].getIfHaveBomb() == true) {
  //若该方块有地雷,则不用判断它周围有几个雷
  return 0;
 } else {
  //用两个循环当前方块周围8格扫一遍
  for (int i = -1; i <= 1; i++) {
   for (int j = -1; j <= 1; j++) {
    int nx = x + i;
    int ny = y + j;
    if (!(ny == y && nx == x) && (nx >= 0 && nx <= MAXX - 1) &&
     (ny >= 0 && ny <= MAXY - 1)) {
     if (cube[nx][ny].getIfHaveBomb()) {
      num++;
     }
    }
   }
  }
  cube[x][y].setNearBombNumber(num);//设置该方块附近的地雷的数量
  return 0;
 }
}

void gameStart() {
 //初始化游戏
 for (int i = 0;i < MAXY;i++) {
  for (int j = 0;j < MAXX;j++) {
   cube[j][i].resetCube();
  }
 }
 setBomb();
 for (int i = 0;i < MAXY;i++) {
  for (int j = 0;j < MAXX;j++) {
   checkAndSetNearBombNumber(j, i);
  }
 }
}

bool player(bool &life) {
 //玩家输入坐标翻开方块
 int x, y;
 GoTo(STARTX - 3, STARTY + MAXY + 1);
 printf("请输入坐标(x,y),x和y用空格隔开");
 GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2);
 scanf("%d%d", &x, &y);
 if ((x < 0) || (x > MAXX - 1) || (y < 0) || (y > MAXY - 1)) {
  //当玩家输入的坐标超出范围时
  show();
  GoTo(STARTX - 3, STARTY + MAXY + 3);
  printf("该坐标不存在,请重新输入坐标");
  GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2);
 } else if (cube[x][y].getIfHaveBomb() == true) {
  //当玩家翻开的方块有地雷时
  cube[x][y].setOpen();
  show();
  life = false;
  return false;
 } else if (cube[x][y].getOpen() == false) {
  //当玩家翻开的方块无雷时
  if (cube[x][y].getNearBombNumber() == 0) {
   autoOpen(x, y);
   cube[x][y].setOpen();
   show();
  } else {
   cube[x][y].setOpen();
   show();
  }
 } else if (cube[x][y].getOpen() == true) {
  //当玩家输入已翻开方块的坐标时
  show();
  GoTo(STARTX, STARTY + MAXY + 3);
  printf("该方块已被挖开,请再次输入坐标");
  GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2);
 }
 ifWin();
 return true;
}

void message(bool result) {
 if (result == true) {
  //玩家胜利时输出的信息
  showBomb();
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
  GoTo(STARTX - 1, STARTY + MAXY + 1);
  printf("祝贺你,你胜利了!");
  GoTo(STARTX, STARTY + MAXY + 2);
 } else {
  //玩家失败时输出的信息
  showBomb();
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), PURPLE);
  GoTo(STARTX - 1, STARTY + MAXY + 1);
  printf("××你踩中地雷了××");
  GoTo(STARTX, STARTY + MAXY + 2);
 }
}

void autoOpen(int x, int y) {
 //玩家翻开的方块为不含雷且周围无雷的方块时,自动翻开周围无雷的方块
 for (int i = -1; i <= 1; i++) {
  for (int j = -1; j <= 1; j++) {
   int nx = x + i;
   int ny = y + j;
   if (!(ny == y && nx == x) && (nx >= 0 && nx <= MAXX - 1) &&
    (ny >= 0 && ny <= MAXY - 1) && cube[nx][ny].getOpen() == false) {
    if (cube[nx][ny].getNearBombNumber() == 0) {
     cube[nx][ny].setOpen();
     autoOpen(nx, ny);
    } else {
     cube[nx][ny].setOpen();
    }
   }
  }
 }
}

bool ifWin() {
 //判断玩家是否扫雷成功达到游戏结束条件
 int num = 0;
 for (int i = 0;i < MAXX;i++) {
  for (int j = 0;j < MAXY;j++) {
   if (cube[j][i].getOpen() == false) {
    num++;
   }
  }
 }
 if (num == BOMBNUMBER) {
  return true;
 } else {
  return false;
 }
}

void showBomb() {
 //游戏结束后显示地雷位置
 for (int i = 0;i < MAXY;i++) {
  for (int j = 0;j < MAXX;j++) {
   if (cube[j][i].getIfHaveBomb() == true) {
    cube[j][i].setOpen();
   }
  }
 }
 show();
}

 

 

 

 

 

 

 

 

 

 

3.贪吃蛇:

#include <windows.h>  
#include <stdlib.h>  
#include <conio.h>  
#include <time.h>  
#include <cstring>  
#include <cstdio>  
#include <iostream>  
#define  N 22  
using namespace std;  

    int gameover;  

    int x1, y1; // 随机出米  

    int x,y;  

    long start;  

//=======================================  
//类的实现与应用initialize  
//=======================================  

//下面定义贪吃蛇的坐标类  
class snake_position  
{  
public:  

    int x,y;      //x表示行,y表示列  

    snake_position(){};  

    void initialize(int &);//坐标初始化  


};  

snake_position position[(N-2)*(N-2)+1]; //定义贪吃蛇坐标类数组,有(N-2)*(N-2)个坐标  

void snake_position::initialize(int &j)  
{  
        x = 1;  

        y = j;  
}  


//下面定义贪吃蛇的棋盘图  

class snake_map  
{  

private:  

    char s[N][N];//定义贪吃蛇棋盘,包括墙壁。  

    int grade, length;  

    int gamespeed; //前进时间间隔  

    char direction; // 初始情况下,向右运动  

    int head,tail;  

    int score;  

    bool gameauto;  

public:  

    snake_map(int h=4,int t=1,int l=4,char d=77,int s=0):length(l),direction(d),head(h),tail(t),score(s){}  

    void initialize();   //初始化函数  

    void show_game();  

    int updata_game();  

    void setpoint();  

    void getgrade();  

    void display();  


};  

//定义初始化函数,将贪吃蛇的棋盘图进行初始化  

void snake_map::initialize()  
{  
    int i,j;  

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

        s[1][i] = '*';  

    s[1][4] = '#';  

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

        for(j=1;j<=N-2;j++)  

            s[i][j]=' '; // 初始化贪吃蛇棋盘中间空白部分  

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

        s[0][i] = s[N-1][i] = '-'; //初始化贪吃蛇棋盘上下墙壁  

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

        s[i][0] = s[i][N-1] = '|'; //初始化贪吃蛇棋盘左右墙壁  
}  


//============================================  
//输出贪吃蛇棋盘信息  

void snake_map::show_game()  

{  

    system("cls"); // 清屏  

    int i,j;  

    cout << endl;  

    for(i=0;i<N;i++)  
    {  

        cout << '\t';  

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

            cout<<s[i][j]<<' '; // 输出贪吃蛇棋盘  

        if(i==2) cout << "\t等级:" << grade;  

        if(i==6) cout << "\t速度:" << gamespeed;  

        if(i==10) cout << "\t得分:" << score << "分" ;  

        if(i==14) cout << "\t暂停:按一下空格键" ;  

        if(i==18) cout << "\t继续:按两下空格键" ;  

        cout<<endl;  
    }  
}  

//输入选择等级  
void snake_map::getgrade()  
{  
    cin>>grade;  

    while( grade>7 || grade<1 )  
    {  
        cout << "请输入数字1-7选择等级,输入其他数字无效" << endl;  

        cin >> grade;  
    }  
    switch(grade)  
    {  
        case 1: gamespeed = 1000;gameauto = 0;break;  

        case 2: gamespeed = 800;gameauto = 0;break;  

        case 3: gamespeed = 600;gameauto = 0;break;  

        case 4: gamespeed = 400;gameauto = 0;break;  

        case 5: gamespeed = 200;gameauto = 0;break;  

        case 6: gamespeed = 100;gameauto = 0;break;  

        case 7: grade = 1;gamespeed = 1000;gameauto = 1;break;  

    }  

}  

//输出等级,得分情况以及称号  

void snake_map::display()  
{  

    cout << "\n\t\t\t\t等级:" << grade;  

    cout << "\n\n\n\t\t\t\t速度:" << gamespeed;  

    cout << "\n\n\n\t\t\t\t得分:" << score << "分" ;  

}  

//随机产生米  
void snake_map::setpoint()  
{  
    srand(time(0));  

    do  
    {  

        x1 = rand() % (N-2) + 1;  

        y1 = rand() % (N-2) + 1;  

    }while(s[x1][y1]!=' ');  

    s[x1][y1]='*';  
}  

char key;  

int snake_map::updata_game()  
{  
    gameover = 1;  

    key = direction;  

    start = clock();  

    while((gameover=(clock()-start<=gamespeed))&&!kbhit());  

    //如果有键按下或时间超过自动前进时间间隔则终止循环  



        if(gameover)  
        {  

            getch();  

            key = getch();  
        }  

        if(key == ' ')  

        {  
            while(getch()!=' '){};//这里实现的是按空格键暂停,按空格键继续的功能,但不知为何原因,需要按两下空格才能继续。这是个bug。  
        }  

        else  

            direction = key;  

        switch(direction)  
        {  
            case 72: x= position[head].x-1; y= position[head].y;break; // 向上  

            case 80: x= position[head].x+1; y= position[head].y;break; // 向下  

            case 75: x= position[head].x; y= position[head].y-1;break; // 向左  

            case 77: x= position[head].x; y= position[head].y+1; // 向右  

        }  

        if(!(direction==72||direction==80||direction==75 ||direction==77))   // 按键非方向键  

            gameover = 0;  

        else if(x==0 || x==N-1 ||y==0 || y==N-1)   // 碰到墙壁  

            gameover = 0;  

        else if(s[x][y]!=' '&&!(x==x1&&y==y1))    // 蛇头碰到蛇身  

            gameover = 0;  

        else if(x==x1 && y==y1)  

        { // 吃米,长度加1  

            length ++;  

            if(length>=8 && gameauto)  

            {  

                length -= 8;  

                grade ++;  

                if(gamespeed>=200)  

                    gamespeed -= 200; // 改变贪吃蛇前进速度  

                else  

                    gamespeed = 100;  

            }  

            s[x][y]= '#';  //更新蛇头  

            s[position[head].x][position[head].y] = '*'; //吃米后将原先蛇头变为蛇身  

            head = (head+1) % ( (N-2)*(N-2) );   //取蛇头坐标  

            position[head].x = x;  

            position[head].y = y;  

            show_game();  

            gameover = 1;  

            score += grade*20;  //加分  

            setpoint();   //产生米  

        }  

        else  
        { // 不吃米  

            s[position[tail].x][position[tail].y]=' ';//将蛇尾置空  

            tail= (tail+1) % ( (N-2) * (N-2) );//更新蛇尾坐标  

            s[position[head].x][position[head].y]='*';  //将蛇头更为蛇身  

            head= (head+1) % ( (N-2) * (N-2) );  

            position[head].x = x;  

            position[head].y = y;  

            s[position[head].x][position[head].y]='#'; //更新蛇头  

            gameover = 1;  

        }  
    return gameover;  

}  
//====================================  
//主函数部分  
//====================================  
int main()  
{  
    MessageBox(NULL,"欢迎使用由张天璀璨制作的贪吃蛇游戏~祝您愉快","贪吃蛇",MB_OK);
    char ctn = 'y';  

    int nodead;  

    cout<<"\n\n\n\n\n\t\t\t 欢迎进入贪吃蛇游戏!"<<endl;//欢迎界面;  

    cout<<"\n\n\n\t\t\t 按任意键马上开始。。。"<<endl;//准备开始;;  

    getch();  

    while( ctn=='y' )  
    {  
        system("cls"); // 清屏  

        snake_map snake;  

        snake.initialize();  

        cout << "\n\n请输入数字选择游戏等级:" << endl;  

        cout << "\n\n\n\t\t\t1.等级一:速度 0 \n\n\t\t\t2.等级二:速度 1 \n\n\t\t\t3.等级三:速度 2 ";  

        cout << "\n\n\t\t\t4.等级四:速度 3 \n\n\t\t\t5.等级五:速度 4 \n\n\t\t\t6.等级六:速度 5 \n\n\t\t\t7.自动升级模式" << endl;  

        snake.getgrade();//获取等级  

        for(int i=1;i<=4;i++)  
        {  
            position[i].initialize(i);//初始化坐标  
        }  

        snake.setpoint();  // 产生第一个米  

        do  
        {  
            snake.show_game();  

            nodead = snake.updata_game();  

        }while(nodead);  

        system("cls"); //清屏  



        cout << "\n\n\n\t\t\t\tGame over!\n\n"<<endl;  

        snake.display();//输出等级/得分情况  

        cout << "\n\n\n\t\t    是否选择继续游戏?输入 y 继续,n 退出" << endl;  

        cin >> ctn;  

    }  

    return 0;  
} 

 

 

 

 

 

 

 

 

 

 

4.推箱子:

//system("pause"); 表示暂停程序 
#include <iostream>
#include <cstdio> 
#include <conio.h>
#include <windows.h>
#include <iomanip>
#define R 10//行 
#define C 10//列
using namespace std;
            /*设置文本显示时的颜色*/
BOOL flag = true;               /*定义布尔值的标记,方便在游戏时直接退出*/ 

int pass=1;//初始关卡值 
int map[R][C] = { 0 };
//地图 1(关卡1)
void color(int m) {         /*设置文本显示时的颜色*/
    HANDLE consolehend;
    consolehend = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台缓冲区句柄
    SetConsoleTextAttribute(consolehend, m);//参数一为控制台缓冲区句柄,参数二为要设置的颜色
    return ; 
}
/*
数字1:墙
数字3:目的地 
数字4:箱子 
数字5:人 
数字0:空地 
*/
int map1[10][10] = {
    { 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 }
};
//地图 2(关卡2)
int map2[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}
};
//地图 3(关卡3)
int map3[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,0,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 },
};
//新增2个地图map4,map5 
int map4[R][C]={
    {0,0,1,1,1,1,1,1,0,0},
    {0,0,1,0,1,0,0,1,0,0},
    {0,0,1,0,0,0,0,1,1,1},
    {1,1,1,0,1,1,0,3,0,1},
    {1,0,0,5,1,0,0,0,0,1},
    {1,0,4,1,1,0,0,0,3,1},
    {1,3,0,0,4,0,4,1,1,1},
    {1,1,1,3,0,4,0,1,0,0},
    {0,0,1,0,0,0,0,1,0,0},
    {0,0,1,1,1,1,1,1,0,0},

};
int map5[R][C]={
    {1,1,1,1,1,1,1,1,1,1},
    {1,5,0,0,1,0,0,0,0,1},
    {1,0,4,4,1,0,0,0,0,1},
    {1,0,4,0,1,0,0,0,0,1},
    {1,1,0,0,1,0,0,0,0,1},
    {1,0,0,0,0,4,0,1,1,1},
    {1,0,0,0,1,0,3,0,0,1},
    {1,1,0,0,1,3,0,3,1,1},
    {0,1,0,3,0,0,1,1,1,0},
    {0,1,1,1,1,1,1,0,0,0},
};
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 Move(){        /*移动模块,操作人物和箱子的移动*/ //核心代码 
    int r,c; //保存人物位置
    for(int i=0;i<R;i++){//i为行值 
        for(int j=0;j<C;j++){//j为列值 
            if(map[i][j]==5||map[i][j]==8){
                r=i;
                c=j;
            }
        }
    }
    cout<<"您当前的坐标为:("<<r<<","<<c<<")"<<endl;
    int ch;//保存键盘输入的ASCII值
    ch=_getch();//接受一个任意键的输入,不用按回车就返回。该函数的返回值是所输入字符的ASCII码,且该函数的输入不会自动显示在屏幕上
    switch(ch){
        case 'W':/*上移*/
        case 'w':
        case 72:
        if(map[r-1][c]==0||map[r-1][c]==3){//人物上方是空地(0)或者目的地 (3),对应情况5和情况6 
            map[r-1][c]+=5;//人物坐标上一个坐标值为5(人物) 
            map[r][c]-=5;//人物原坐标值为0(空地) 
        } 
        else if(map[r-1][c]==4||map[r-1][c]==7){//人物上方是箱子,箱子在空格上或者箱子在目的地处,对应情况1,2,3,4 
            if(map[r-2][c]==0||map[r-2][c]==3){//箱子上方是空格或者前面是目的地,细化为情况1,2或情况3,4
                map[r-2][c]+=4;//箱子向上移动,上一个0(空地)就变为 4(箱子)
                map[r-1][c]+=1;//4(原箱子)+1变为 5(人物)
                map[r][c]-=5;//5(原人物)-5变为0(空地) 
            }
        }
        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 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 ;
}
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;
}

 

0
李辰星
李辰星
资深守护
资深守护

我的原创,望采纳

#include<bits/stdc++.h>
#include <windows.h>
using namespace std;
int abc(string s)
{
    for(int i=0;i<s.size();i++)
    {
        cout<<s[i];
        Sleep(50);
    }
}
int main()
{
    system("color 9F");
    long long a,x1,h,num=0,i,j,max=0,min=1000000000,b=0,c=0,n=1,cnt=0,g,f,x,o;
    bool flag=1;
    string k="版本:1.0 作者:李辰星 游戏名称:王者之战\n",minzi,s="",s2="!!!!!!!!",s3="00000",s4,s5;
    MessageBox(NULL,"欢迎使用由李辰星制作的游戏~祝您游戏愉快","游戏",MB_OK);
    cout<<"*********              *"<<endl;
    cout<<"    *              *********"<<endl;
    cout<<"    *                  *"<<endl;
    cout<<"    *            *************"<<endl;
    cout<<"    *                 *"<<endl;
    cout<<"    *                *"<<endl;
    cout<<"*********           *********"<<endl;
    cout<<"    *              **       *"<<endl;
    cout<<"    *             * *       *"<<endl;
    cout<<"    *            *  *********"<<endl;
    cout<<"    *               *       *"<<endl;
    cout<<"*********           *       *"<<endl;
    cout<<"                    *********"<<endl;
    cout<<"                 王者"<<endl;
    cout<<"               等你来战!";
    Sleep(2000); 
    system("cls");
    cout<<"欢迎进入系统:"<<endl;
    Sleep(1000);
    abc(k);
    cout<<"系统加载中"; 
    for(int i=1;i<=6;i++)
    {
        Sleep(500);
        cout<<".";
    }
    k="勇士,请你留下你的名字吧:";
    cout<<endl;
    abc(k);
    cin>>minzi;
    cout<<"尊敬的"<<minzi<<",请问有什么需求?"<<"\n";
    Sleep(1000);
    while(1)
    { 
        while(1)
        {
            char a; 
            cout<<endl<<"请选择你需要的功能"<<"\n";//为用户提供功能介绍 
            cout<<"1----创建账号"<<"\n";
            cout<<"2----重置密码"<<"\n";
            cout<<"3----开始游戏"<<"\n";
            cout<<"4----强行退出"<<"\n";
            cout<<"5----退出系统"<<"\n";
            cin>>a;
            if(a=='1')
            {
                bool f1=false;
                cout<<"请输入你想要创建的账户名称--(温馨提示:账户中不能有数字存在)"<<endl; 
                getline(cin,s); 
                getline(cin,s);
                for(int i=0;i<s.size();i++)
                {
                    if(s[i]>='0'&&s[i]<='9')
                    {
                        f1=true;
                        break;
                    }
                } 
                if(f1)
                {
                    cout<<"用户名不正确,用户创建失败"<<"\n";
                    Sleep(2000); 
                    system("cls");        
                    break; 
                }
                cout<<"账户名创建成功,请输入密码"<<"\n"; 
                getline(cin,s2);
                cout<<"账户创建成功!请妥善保管你的账户信息"<<"\n\n";
                Sleep(1000); 
                system("cls"); 
            }
            else if(a=='2')
            {
                if(s.empty())
                {
                    cout<<"请先创建账号"<<'\n';
                    Sleep(3000); 
                    system("cls");
                    break; 
                }
                cout<<"请输入当前账号密码"<<endl;
                bool f2=false;
                getline(cin,s3);
                getline(cin,s3);
                if(s3==s2)
                    f2=true; 
                else{
                    cout<<"你不是本人,本次密码重置失败"<<endl;    
                    cnt++;    
                    if(cnt>=3)
                    {
                        cout<<"暂时冻结账户!稍后请手动重启!";
                        flag=true; 
                        cnt=0;
                        Sleep(2000); 
                        break;                         
                    }            
                    Sleep(3000); 
                    system("cls");
                    break; 
                }
                if(f2)
                {
                    cout<<"请输入新密码"<<'\n';
                    getline(cin,s3); 
                    cout<<"请再次确认新密码"<<'\n';
                    getline(cin,s4);
                    if(s3==s4)
                    {
                        cout<<"恭喜,密码重置成功!"<<"\n";
                        s2=s3;
                        Sleep(3000); 
                        system("cls");
                    }
                    else
                    {
                        cout<<"密码重置失败,退出密码重置"<<"\n";
                        Sleep(3000); 
                        system("cls"); 
                    }      
                }    
            } 
            else if(a=='3') 
            {
                int x=0,t=0,j=0,m=0;
                k="开    始    游    戏!!!";
                abc(k);
                Sleep(500);
                cout<<endl<<"请输入当前账号"<<endl;
                cin>>s3;
                if(s3==s)
                {
                    cout<<"请输入当前密码"<<endl;
                    cin>>s4;
                    if(s4!=s2)
                    {
                        cout<<"密码错误!";
                        Sleep(100);
                        system("cls"); 
                        break; 
                    }
                    
                }
                else
                {
                    cout<<"没有此账号!";
                    Sleep(100);
                    system("cls"); 
                    break;
                }
                cout<<"账号密码正确!";
                k="人物介绍:";
                cout<<endl;
                abc(k);
                k="关羽:攻击:10  防御:5  血量:100";
                cout<<endl;
                abc(k);
                k="孙悟空:攻击:5  防御:10  血量:120";
                cout<<endl;
                abc(k);
                k="安琪拉:攻击:20  防御:5  血量:80";
                cout<<endl;
                abc(k);
                k="后羿:攻击:15  防御:5  血量:90";
                cout<<endl;
                abc(k);
                k="金箍棒:攻击:25  防御:0  血量:0";
                cout<<endl;
                abc(k);
                k="魔法书:攻击:5  防御:5  血量:5";
                cout<<endl;
                abc(k);
                k="小兵:攻击:2  防御:2  血量:2";
                cout<<endl;
                abc(k);
                k="太阳弓:攻击:15  防御:0  血量:0";
                cout<<endl;
                abc(k);
                cout<<endl<<endl<<endl<<endl;
                cout<<"尊敬的"<<minzi<<",您现在可以选一个人物"<<endl;
                cout<<"1.孙悟空   2.安琪拉   3.关羽   4.后羿"<<endl;
                cin>>i;
                if(i==1)
                {
                    cout<<"恭喜获得孙悟空!"<<endl;
                    cout<<"恭喜获得金箍棒+金币*10!"; 
                    g=30;
                    f=10;
                    x=120;
                    j=10;
                }
                else if(i==2)
                {
                    cout<<"恭喜获得安琪拉!"<<endl;
                    cout<<"恭喜获得魔法书+金币*10!"; 
                    g=25;
                    f=10;
                    x=85;
                    j=10;
                }
                else if(i==3)
                {
                    cout<<"恭喜获得关羽!"<<endl;
                    cout<<"恭喜获得小兵*1+金币*50"; 
                    g=12;
                    f=7;
                    x=102;
                    j=50; 
                    b++; 
                }
                else 
                {
                    cout<<"恭喜获得后羿!"<<endl;
                    cout<<"恭喜获得太阳弓+金币*10!"; 
                    g=30;
                    f=5;
                    x=90;
                    j=10;
                }
                Sleep(1000);
                while(1)
                {
                if(flag==0)
                break;
                while(1)
                {
                if(flag==0)
                break;
                system("cls");
                cout<<"请问您现在干嘛?"<<endl;
                cout<<"1.战斗   2.移动   3.退出游戏   4.查看当前状况"<<endl;
                cin>>c;
                if(c==1)
                {
                    k="开始战斗!!!";
                    abc(k);
                    cout<<endl<<"你要闯第几关?(只有2关哦)"<<endl;
                    cin>>o;
                    if(o==1)
                    {
                    cout<<"第一关即将开始!"<<endl;
                    cout<<"敌人是5个小兵!"<<endl;
                    cout<<"您现在怎么办?"<<endl;
                    cout<<"1.小兵出击  2.亲自出击"<<endl;
                    cin>>h;
                    if(h==1)
                    {
                        cout<<"你现在有"<<b<<"个小兵"<<endl;
                        k="全   部   出   击!";
                        abc(k);
                        if(b>=5)
                        {
                            b=b-5;
                            cout<<"你的小兵还有"<<b<<"个"<<endl; 
                            k="!!!!胜      利 !!!!";
                            abc(k);
                            cout<<endl<<"恭喜获得金币*20"<<endl;
                            j+=20; 
                            break;
                        }
                        else
                        {
                            
                            cout<<endl; 
                            x1=5-b;
                            cout<<"你的小兵全┏┛墓┗┓...(((m-__-)m死了,现在敌人还有"<<x1<<"个小兵";
                            b=0;
                            cout<<endl<<"1.亲自出击 2.不打第一关了"<<endl;
                            cin>>h;
                            if(h==1)
                            {
                                if(x1*2-f<=0)
                                {
                                    k="!!!!胜      利 !!!!";
                                    abc(k);
                                }
                                else
                                {
                                    k="!!!!胜      利 !!!!";
                                    x-=x1*2-f;
                                    cout<<"你被打掉了"<<x1*2-f<<"滴血"<<endl;
                                    abc(k); 
                                }
                            }
                            else
                            break;
                        }
                    }
                    else
                    {
                        if(x1*2-f<=0)
                        {
                            k="!!!!胜      利 !!!!";
                            abc(k);
                        }
                        else
                        {
                        k="!!!!胜      利 !!!!";
                        x-=x1*2-f;
                        cout<<"你被打掉了"<<x1*2-f<<"滴血"<<endl;
                        abc(k); 
                        }    
                    }
                    }
                    else if(o==2)
                    {
                    cout<<"第二关即将开始!"<<endl;
                    cout<<"敌人是10个小兵!"<<endl;
                    cout<<"您现在怎么办?"<<endl;
                    cout<<"1.小兵出击  2.亲自出击"<<endl;
                    cin>>h;
                    if(h==1)
                    {
                        cout<<"你现在有"<<b<<"个小兵"<<endl;
                        k="全   部   出   击!";
                        abc(k);
                        if(b>=10)
                        {
                            b=b-10;
                            cout<<"你的小兵还有"<<b<<"个"<<endl; 
                            k="!!!!胜      利 !!!!";
                            abc(k);
                            cout<<endl<<"恭喜获得金币*50"<<endl;
                            j+=50; 
                            break;
                        }
                        else
                        {
                            
                            cout<<endl; 
                            int x1;
                            x1=10-b;
                            cout<<"你的小兵全┏┛墓┗┓...(((m-__-)m死了,现在敌人还有"<<x1<<"个小兵";
                            b=0;
                            cout<<endl<<"1.亲自出击 2.不打第二关了"<<endl;
                            cin>>h;
                            if(h==1)
                            {
                                if(x1*2-f<=0)
                                {
                                    k="!!!!胜      利 !!!!";
                                    abc(k);
                                }
                                else
                                {
                                    k="!!!!胜      利 !!!!";
                                    x-=x1*2-f;
                                    cout<<"你被打掉了"<<x1*2-f<<"滴血"<<endl;
                                    abc(k); 
                                }
                            }
                            else
                            break;
                        }
                    }
                    else
                    {
                        if(x1*2-f<=0)
                        {
                            k="!!!!胜      利 !!!!";
                            abc(k);
                        }
                        else
                        {
                        k="!!!!胜      利 !!!!";
                        x-=x1*2-f;
                        cout<<"你被打掉了"<<x1*2-f<<"滴血"<<endl;
                        abc(k); 
                        }    
                    }
                    }
                }
                else if(c==2)
                {
                    cout<<"尊敬的"<<minzi<<"请问您要去哪?"<<endl;
                    cout<<"1.神奇商店   2.金币大厦"<<endl;
                    cin>>o;
                    if(o==1)
                    {
                        cout<<"你到了神奇商店!"<<endl;
                        cout<<"你要买几个小兵?(每个小兵5元,一次最多买2个)"<<endl;
                        cin>>o;
                        if(o==1)
                        {
                            if(j>=5)
                            {
                                k="购  买  成  功!";
                                abc(k);
                                j-=5;
                                cout<<endl<<"你还有"<<j<<"个金币";
                                Sleep(500);
                                x+=1; 
                            }
                            else
                            {
                                cout<<"您的金币不够!";
                                k="购  买  失  败!";
                                abc(k);
                            }
                        }
                        else 
                        {
                            if(j>=10)
                            {
                                k="购  买  成  功!";
                                abc(k);
                                j-=10;
                                cout<<endl<<"你还有"<<j<<"个金币";
                                Sleep(500);
                                x+=2; 
                            }
                            else
                            {
                                cout<<"您的金币不够!";
                                k="购  买  失  败!";
                                abc(k);
                            }    
                        }
                    }
                    else
                    MessageBox(NULL,"非常(。?_?。)?I’m sorry~抱歉,此区域未开放","王者之战",MB_OK);
                } 
                else if(c==3)
                {
                    flag=0;
                    system("cls");
                    break;
                }
                else if(c==4)
                {
                    k="当前攻击力:";
                    abc(k);
                    cout<<g<<endl;
                    k="当前防御力:";
                    abc(k);
                    cout<<f<<endl;
                    k="当前血量:";
                    abc(k);
                    cout<<x<<endl;
                    k="当前金币:";
                    abc(k);
                    cout<<j<<endl;
                }
                } 
                }
            }
            else if(a=='4')
            {
                cout<<"非要这么暴力吗!!!!惩罚!关机!给你一分钟保存没保存的文件!"<<endl;
                system("shutdown -s -t 25");
                return 0;
            } 
            else if(a=='5')
            {
            cout<<"好的,请问这游戏满分十分,你觉得能打多少分?(满分10分)"<<endl;
            int g;
            cin>>g;
            if(g==10)
            cout<<"谢谢好评,你的鼓励,我记住了。"<<endl; 
            if(g<=5)
            cout<<"好吧,我在努力……呜呜呜"<<endl;
            if(g>=5&&g<10)
            cout<<"谢谢"<<endl;
            cout<<"谢谢您的参与,您的电脑会一路平安!再见!";
            Sleep(500);
            return 0;    
            }
            } 
        }
    }

我要回答