问题标题: 酷町堂:C++游戏代码

0
2

1
已采纳
马佳滢
马佳滢
新手天翼
新手天翼

one 

#include<iostream>
#include<windows.h>
#include<time.h>
#include<conio.h>
using namespace std;
// 刷新当前屏幕
inline void Refresh(char q[][22], int grade, int gamespeed){
    system("cls");     //  清屏
 int i,j;
 cout << endl;
 for(i=0;i<22;i++){
     cout << "\t";
  for(j=0;j<22;j++)
   cout<<q[i][j]<<' ';    //  输出贪吃蛇棋盘
        if(i==0) cout << "\t等级为:" << grade;
        if(i==4) cout << "\t自动前进时间";
        if(i==6) cout << "\t间隔为:" << gamespeed << "ms";
  cout<<endl;
 }
}
int main(){
    char tcsQipan[22][22];     //  贪吃蛇棋盘是一个二维数组(如22*22,包括墙壁)
    int i,j;
    for(i=1;i<=20;i++)
        for(j=1;j<=20;j++)
            tcsQipan[i][j]=' ';     //     初始化贪吃蛇棋盘中间空白部分
    for(i=0;i<=21;i++)
        tcsQipan[0][i] = tcsQipan[21][i] = '-';      //初始化贪吃蛇棋盘上下墙壁
    for(i=1;i<=20;i++)
        tcsQipan[i][0] = tcsQipan[i][21] = '|';      //初始化贪吃蛇棋盘左右墙壁
    int tcsZuobiao[2][100];     //蛇的坐标数组
    for(i=0; i<4; i++){
        tcsZuobiao[0][i] = 1;
        tcsZuobiao[1][i] = i + 1;
    }
    int head = 3,tail = 0;
    for(i=1;i<=3;i++)
        tcsQipan[1][i]='****';    //蛇身
    tcsQipan[1][4]='#';       //蛇头
    int x1, y1;           // 随机出米
    srand(time(0));
    do{
  x1=rand()%20+1;
  y1=rand()%20+1;
 }while(tcsQipan[x1][y1]!=' ');
 tcsQipan[x1][y1]='=';
 cout<<"\n\n\t\t贪吃蛇游戏即将开始 !\n\t\t欢迎玩家 play此蒟蒻游戏!"<<endl;//准备开始;;
 long start;
    int grade = 1, length = 4;
    int gamespeed = 500;  //前进时间间隔
 for(i=3;i>=0;i--){
  start=clock();
  while(clock()-start<=1000);
  system("cls");
  if(i>0)
   cout << "\n\n\t\t进入倒计时:" << i << endl;
  else
   Refresh(tcsQipan,grade,gamespeed);
 }
    int timeover;
    char direction = 77;  // 初始情况下,向右运动
    int x,y;
    while(1){
        timeover = 1;
        start = clock();
        while((timeover=(clock()-start<=gamespeed))&&!kbhit());
             //如果有键按下或时间超过自动前进时间间隔则终止循环
        if(timeover){
            getch();direction = getch();
        }
        switch(direction){
        case 72: x= tcsZuobiao[0][head]-1; y= tcsZuobiao[1][head];break;     // 向上
        case 80: x= tcsZuobiao[0][head]+1; y= tcsZuobiao[1][head];break;      // 向下
        case 75: x= tcsZuobiao[0][head]; y= tcsZuobiao[1][head]-1;break;      // 向左
        case 77: x= tcsZuobiao[0][head]; y= tcsZuobiao[1][head]+1;           // 向右
        }
        if(!(direction==72||direction==80||direction==75 ||direction==77)){   //  按键非方向键
            cout << "\tGame over!\n\t玩家棒棒哒" << endl;return 0;
        }
        if(x==0 || x==21 ||y==0 || y==21){   // 碰到墙壁
            cout << "\tGame over!\n\t玩家棒棒哒" << endl;return 0;
        }
        if(tcsQipan[x][y]!=' '&&!(x==x1&&y==y1)){ //   蛇头碰到蛇身
            cout << "\tGame over!\n\t玩家棒棒哒" << endl;return 0;
        }
        if(x==x1 && y==y1){      //  吃米,长度加1
            length ++;
            if(length>=8){
                length -= 8;
                grade ++;
                if(gamespeed>=200)
                    gamespeed = 550 - grade * 50; // 改变自动前进时间间隔
            }
            tcsQipan[x][y]= '#';
            tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]] = '*';
            head = (head+1)%100;
            tcsZuobiao[0][head] = x;
            tcsZuobiao[1][head] = y;
            do
            {
                x1=rand()%20+1;
                y1=rand()%20+1;
            }while(tcsQipan[x1][y1]!=' ');
            tcsQipan[x1][y1]='=';
            Refresh(tcsQipan,grade,gamespeed);
        }
        else{       //  不吃米
            tcsQipan [tcsZuobiao[0][tail]][tcsZuobiao[1][tail]]=' ';
            tail=(tail+1)%100;
            tcsQipan [tcsZuobiao[0][head]][tcsZuobiao[1][head]]='*';
            head=(head+1)%100;
            tcsZuobiao[0][head]=x;
            tcsZuobiao[1][head]=y;
            tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]]='#';
            Refresh(tcsQipan,grade,gamespeed);
        }
    }
    return 0;
}
 

two.

#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<string>
using namespace std;
typedef struct Frame
{
    COORD position[2];
    int flag;
}Frame;
void SetPos(COORD a)
{
    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(out, a);
}
void SetPos(int i, int j)
{
    COORD pos={i, j};
    SetPos(pos);
}
void HideCursor()
{
    CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

//把第y行,[x1, x2) 之间的坐标填充为 ch
void drawRow(int y, int x1, int x2, char ch)
{
    SetPos(x1,y);
    for(int i = 0; i <= (x2-x1); i++) cout<<ch;
}

//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawRow(COORD a, COORD b, char ch)
{
    if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch);
    else {
        SetPos(0, 25);
        cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";
        system("pause");
    }
}

//把第x列,[y1, y2] 之间的坐标填充为 ch
void drawCol(int x, int y1, int y2, char ch)
{
    int y=y1;
    while(y!=y2+1) {
        SetPos(x, y);
        cout<<ch;
        y++;
    }
}

//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawCol(COORD a, COORD b, char ch)
{
    if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch);
    else {
        SetPos(0, 25);
        cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";
        system("pause");
    }
}

//左上角坐标、右下角坐标、用row填充行、用col填充列
void drawFrame(COORD a, COORD  b, char row, char col)
{
    drawRow(a.Y, a.X+1, b.X-1, row);
    drawRow(b.Y, a.X+1, b.X-1, row);
    drawCol(a.X, a.Y+1, b.Y-1, col);
    drawCol(b.X, a.Y+1, b.Y-1, col);
}

void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
{
    COORD a={x1, y1};
    COORD b={x2, y2};
    drawFrame(a, b, row, col);
}

void drawFrame(Frame frame, char row, char col)
{
    COORD a = frame.position[0];
    COORD b = frame.position[1];
    drawFrame(a, b, row, col);
}

void drawPlaying()
{
    drawFrame(0, 0, 48, 24, '=', '|');//    draw map frame;
    drawFrame(49, 0, 79, 4, '-', '|');//        draw output frame
    drawFrame(49, 4, 79, 9, '-', '|');//        draw score frame
    drawFrame(49, 9, 79, 20, '-', '|');//   draw operate frame
    drawFrame(49, 20, 79, 24, '-', '|');//  draw other message frame
    SetPos(52, 6);
    cout<<"得分:";
    SetPos(52, 7);
    cout<<"称号:";
    SetPos(52,10);
    cout<<"操作方式:";
    SetPos(52,12);
    cout<<"  a,s,d,w 控制战机移动。";
    SetPos(52,14);
    cout<<"  p 暂停游戏。";
    SetPos(52,16);
    cout<<"  e 退出游戏。";
    SetPos(52,18);
    cout<<"  k 发射火箭。";
}

//在[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<<"Plane War";
    drawRow(3, 0, 79, '-');
    drawRow(5, 0, 79, '-');
    SetPos(28, 4);
    cout<<"w 和 s 选择, k 确定";
    SetPos(15, 11);
    cout<<"1. 简单的敌人";
    SetPos(15, 13);
    cout<<"2. 冷酷的敌人";
    drawRow(20, 0, 79, '-');
    drawRow(22, 0, 79, '-');
    SetPos(47, 11);
    cout<<"简单的敌人:";
    SetPos(51, 13);
    cout<<"简单敌人有着较慢的移动速度。";
    int j=11;
    cout<<">>";
    while(1) {
        if( _kbhit() ) {    
            char x=_getch();
            switch (x) {
              case 'w' : {  
                if( j == 13) {
                  SetPos(12, j);
                  cout<<" ";
                  j = 11;
                  SetPos(12, j);
                  cout<<">>";
                  SetPos(51, 13);
                  cout<<"            ";
                  SetPos(47, 11);
                  cout<<"简单的敌人:";
                  SetPos(51, 13);
                  cout<<"简单的敌人有着较慢的移动速度。";
                }
                break;
              }
              case 's' : {  
                if( j == 11 ) {
                  SetPos(12, j);
                  cout<<" ";        
                  j = 13;
                  SetPos(12, j);
                  cout<<">>";
                  SetPos(51, 13);
                   cout<<"              ";
                   SetPos(47, 11);
                   cout<<"冷酷的敌人:";
                   SetPos(51, 13);
                   cout<<"冷酷的敌人有着较快的移动速度。";
                }
                break;
              }
              case 'k' : {  
                if (j == 8) return 1; else return 2;
              }
            }
        }
    }
}
/*================== the Game Class ==================*/

class Game
{
public:
    COORD position[10];
    COORD bullet[10];
    Frame enemy[8];
    int score;
    int rank;
    int rankf;
    string title;
    int flag_rank;

    Game ();

    //初始化所有
    void initPlane();
    void initBullet();
    void initEnemy();

    //初始化其中一个
    //void initThisBullet( COORD );
    //void initThisEnemy( Frame );

    void planeMove(char);
    void bulletMove();
    void enemyMove();

    //填充所有
    void drawPlane();
    void drawPlaneToNull();
    void drawBullet();
    void drawBulletToNull();
    void drawEnemy();
    void drawEnemyToNull();

    //填充其中一个
    void drawThisBulletToNull( COORD );
    void drawThisEnemyToNull( Frame );

    void Pause();
    void Playing();
    void judgePlane();
    void judgeEnemy();

    void Shoot();

    void GameOver();
    void printScore();
};

Game::Game()
{
    initPlane();
    initBullet();
    initEnemy();
    score = 0;
    rank = 25;
    rankf = 0;
    flag_rank = 0;
}

void Game::initPlane()
{
    COORD centren={39, 22};
    position[0].X=position[5].X=position[7].X=position[9].X=centren.X;
    position[1].X=centren.X-2;  
    position[2].X=position[6].X=centren.X-1;
    position[3].X=position[8].X=centren.X+1;
    position[4].X=centren.X+2;
    for(int i=0; i<=4; i++)
        position[i].Y=centren.Y;
    for(int i=6; i<=8; i++)
        position[i].Y=centren.Y+1;
    position[5].Y=centren.Y-1;
    position[9].Y=centren.Y-2;
}

void Game::drawPlane()
{
    for(int i=0; i<9; i++)
    {
        SetPos(position[i]);
        if(i!=5)
            cout<<"O";
        else if(i==5)
            cout<<"|";      
    }
}

void Game::drawPlaneToNull()
{
    for(int i=0; i<9; i++)
    {
        SetPos(position[i]);
        cout<<" ";
    }   
}

void Game::initBullet()
{
    for(int i=0; i<10; i++)
        bullet[i].Y = 30;
}

void Game::drawBullet()
{
    for(int i=0; i<10; i++)
    {
        if( bullet[i].Y != 30)
        {
            SetPos(bullet[i]);
            cout<<"^";  
        }
    }
}

void Game::drawBulletToNull()
{
    for(int i=0; i<10; i++)
        if( bullet[i].Y != 30 )
            {
                COORD pos={bullet[i].X, bullet[i].Y+1};
                SetPos(pos);
                cout<<" ";
            }   
}

void Game::initEnemy()
{
    COORD a={1, 1};
    COORD b={45, 15};
    for(int i=0; i<8; i++)
    {
        enemy[i].position[0] = random(a, b);
        enemy[i].position[1].X = enemy[i].position[0].X + 3;
        enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
    }
}

void Game::drawEnemy()
{
    for(int i=0; i<8; i++)
        drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
}

void Game::drawEnemyToNull()
{
    for(int i=0; i<8; i++)
    {
        drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
    }       
}

void Game::Pause()
{
    SetPos(61,2);
    cout<<"               ";
    SetPos(61,2);
    cout<<"暂停中...";
    char c=_getch();
    while(c!='p')
        c=_getch();
    SetPos(61,2);
    cout<<"         ";
}

void Game::planeMove(char x)
{
    if(x == 'a')
        if(position[1].X != 1)
            for(int i=0; i<=9; i++)
                position[i].X -= 2;

    if(x == 's')
        if(position[7].Y != 23)
            for(int i=0; i<=9; i++)
                position[i].Y += 1;

    if(x == 'd')
        if(position[4].X != 47)
            for(int i=0; i<=9; i++)
                position[i].X += 2;

    if(x == 'w')
        if(position[5].Y != 3)
            for(int i=0; i<=9; i++)
                position[i].Y -= 1;
}

void Game::bulletMove()
{
    for(int i=0; i<10; i++)
    {
        if( bullet[i].Y != 30)
        {
            bullet[i].Y -= 1;
            if( bullet[i].Y == 1 )
            {
                COORD pos={bullet[i].X, bullet[i].Y+1};
                drawThisBulletToNull( pos );
                bullet[i].Y=30;
            }

        }
    }
}

void Game::enemyMove()
{
    for(int i=0; i<8; i++)
    {
        for(int j=0; j<2; j++)
            enemy[i].position[j].Y++;

        if(24 == enemy[i].position[1].Y)
        {
            COORD a={1, 1};
            COORD b={45, 3};
            enemy[i].position[0] = random(a, b);
            enemy[i].position[1].X = enemy[i].position[0].X + 3;
            enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
        }
    }
}

void Game::judgePlane()
{
    for(int i = 0; i < 8; i++)
        for(int j=0; j<9; j++)
            if(judgeCoordInFrame(enemy[i], position[j]))
            {
                SetPos(62, 1);
                cout<<"坠毁";
                drawFrame(enemy[i], '+', '+');
                Sleep(1000);
                GameOver();
                break;
            }
}

void Game::drawThisBulletToNull( COORD c)
{
    SetPos(c);
    cout<<" ";
}

void Game::drawThisEnemyToNull( Frame f )
{
    drawFrame(f, ' ', ' ');
}

void Game::judgeEnemy()
{
    for(int i = 0; i < 8; i++)
        for(int j = 0; j < 10; j++)
            if( judgeCoordInFrame(enemy[i], bullet[j]) )
            {
                score += 5;
                drawThisEnemyToNull( enemy[i] );
                COORD a={1, 1};
                COORD b={45, 3};
                enemy[i].position[0] = random(a, b);
                enemy[i].position[1].X = enemy[i].position[0].X + 3;
                enemy[i].position[1].Y = enemy[i].position[0].Y + 2;                    
                drawThisBulletToNull( bullet[j] );
                bullet[j].Y = 30;
            }
}

void Game::Shoot()
{
    for(int i=0; i<10; i++)
        if(bullet[i].Y == 30)
        {
            bullet[i].X = position[5].X;
            bullet[i].Y = position[5].Y-1;
            break;
        }
}

void Game::printScore()
{
    if(score == 120 && flag_rank == 0)
    {
        rank -= 3;
        flag_rank = 1;
    }

    else if( score == 360 && flag_rank == 1)
    {
        rank -= 5;
        flag_rank = 2;
    }
    else if( score == 480 && flag_rank == 2)
    {
        rank -= 5;
        flag_rank = 3;
    }
    int x=rank/5;
    SetPos(60, 6);
    cout<<score;
    if( rank!=rankf )
    {
        SetPos(60, 7);
        if( x == 4)
            title="初级飞行员";
        else if( x == 3)
            title="中级飞行员";
        else if( x == 2)
            title="高级飞行员";
        else if( x == 3 )
            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)";
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()
{
    cout << string(13, '\n');
    cout << string(50, ' ') << "Game Loading" << endl << ".";
    Sleep(500);
    cout << "\t.";
    Sleep(500);
    cout << "\t\t.";
    Sleep(500);
    cout << "\t\t\t.";
    Sleep(500);
    cout << "\t\t\t.";
    Sleep(500);
    cout << "\t\t.";
    Sleep(500);
    cout << "\t\t.";
    Sleep(500);
    cout << "\t.";
    Sleep(2000);
    system("cls");
    //游戏准备
    srand((int)time(0));    //随机种子
    HideCursor();   //隐藏光标

    Game game;
    int a = drawMenu();
    if(a == 2)
        game.rank = 20;
    system("cls");
    drawPlaying();
    game.Playing();
}

three.

#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  a
//=======================================  

//下面定义贪吃蛇的坐标类  
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()  
{  
    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.等级一:速度 1000 \n\n\t\t\t2.等级二:速度 800 \n\n\t\t\t3.等级三:速度 600 ";  

        cout << "\n\n\t\t\t4.等级四:速度 400 \n\n\t\t\t5.等级五:速度 200 \n\n\t\t\t6.等级六:速度 100 \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\tGameover!\n\n"<<endl;  

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

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

        cin >> ctn;  

    }  

    return 0;  
}  

four.

#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
#define framex 5
#define framey 5
#define wide 20
#define high 20
int i,j,a[2];
//将光标移动到指定位置 
void gotoxy(HANDLE hout,int x,int y){
    //COORD是WindowsAPI中定义的一种结构,表示一个字符在控制台屏幕上的坐标
    COORD pos;
    pos.X=x;
    pos.Y=y;
    //SetConsoleCursorPosition是API中定位光标位置的函数。
    SetConsoleCursorPosition(hout,pos);
}
//游戏封面
void cover (HANDLE hout){
    gotoxy(hout,framex+wide,framey);
    printf("欢迎使用贪吃蛇游戏2.0");
    gotoxy(hout,framex+wide,framey+5);
    printf("开始游戏前请关闭中文输入法");
    gotoxy(hout,framex+wide*2,framey+20);
    printf( "游戏制作者:打死也不告诉你"); 
    gotoxy(hout,framex+wide*2,framey+22);
    printf("制作时间:2017年13月(#^.^#)"); 
    char a;
    a=getchar();
    system("cls");
} 
//定义蛇的结构体 
struct  Snake{
    int x[100];
    int y[100];
    int speed;
    int length;
    int count;
};
//定义食物的结构体 
struct Food{
    int x;
    int y;
};
//制作框架 
void makeframe(struct Snake snake){
    //定义显示器变量句柄 
    HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
    gotoxy(hout,framex+wide*2+5,framey);
    printf( "   贪吃蛇游戏"); 
    gotoxy(hout,framex+wide*2+5,framey+3);
    printf("使用方向键或wasd移动");
    gotoxy(hout,framex+wide*2+5,framey+5);
    printf("长按方向键可加速");
    gotoxy(hout,framex+wide*2+5,framey+7);
    printf("按任意键暂停,方向键继续");
    //打印上边框 
    for(i=0;i<wide*2+1;i++){
        gotoxy(hout,framex+i,framey);
        printf("*");
    }
    //打印下边框 
    for(i=0;i<wide*2+2;i++){
        gotoxy(hout,framex+i,framey+high);
        printf("△");
    }
    //打印左边框 
    for(i=0;i<high;i++){
        gotoxy(hout,framex,framey+i);
        printf("☆");
    }
    //打印右边框 
    for(i=0;i<high;i++){
        gotoxy(hout,framex+wide*2+1,framey+i);
        printf("☆");
    }
}
//游戏信息
void infor(HANDLE hout,struct Snake* snake){
    gotoxy(hout,framex+wide*2+5,framey+15);
    printf("当前速度:%d",-snake->speed+500);
    gotoxy(hout,framex+wide*2+5,framey+17);
    printf("当前得分:%d",snake->count);
    gotoxy(hout,framex+wide*2+5,framey+19);
    printf("当前长度:%d",snake->length);
} 
//初始化蛇 
void initsnake(struct Snake *snake){
    snake->x[0]=framex+2;
    snake->y[0]=framey+high/2;
    snake->count=0;
    snake->length=3;
    snake->speed=400;
    //初始化由蛇尾至蛇头的坐标 
    for(i=1;i<snake->length;i++){
        snake->x[i]=snake->x[i-1]+1;
        snake->y[i]=snake->y[i-1];
    }
}
//打印蛇 
void printsnake(HANDLE hout ,struct Snake *snake){
    for(i=0;i<snake->length;i++){
        gotoxy(hout,snake->x[i],snake->y[i]);
        if(i==snake->length-1) 
            printf("■");
        else if(i==0)
            printf("★");
        else 
            printf("◆"); 
    }
}
//移动蛇 
void movesnake(HANDLE hout,struct Snake *snake){
    gotoxy(hout,snake->x[0],snake->y[0]);
    //清除蛇尾 
    printf("  ");
    //蛇的后一节坐标变成前一节的坐标 
    for(i=1;i<snake->length;i++){
        snake->x[i-1]=snake->x[i];
        snake->y[i-1]=snake->y[i];
    }
}
//打印食物 
void printfood (HANDLE hout,struct Snake *snake,struct Food* food){
    //用计算机时间获取随机值 
    srand((unsigned)time(NULL));
    while(1){
        //将食物的横纵坐标的大小限定在窗口大小内 
        food->x=rand()%(wide-2)+1;
        food->y=rand()%(high-2)+1;
        //避免食物出现在边框上 
        if(food->x==0&&food->y==0)
            continue;
        //将食物的坐标放置在窗口内 
        food->x=2*food->x+framex;
        food->y+=framey;
        //如果食物出现在蛇上,重新产生食物 
        for(i=0;i<snake->length;i++){
            if(food->x==snake->x[i]&&food->y==snake->y[i])
                break;
        }
        //食物不在蛇上,打印食物,结束循环 
        if(i==snake->length){
            gotoxy(hout,food->x,food->y);
            printf("*");
            break;  
        }
    }

}
//吃食物 
void eatfood(HANDLE hout,struct Snake * snake,struct Food *food){
    //如果蛇头的坐标等于食物的坐标 
    if(snake->x[snake->length-1]==food->x&&snake->y[snake->length-1]==food->y){
        //蛇长加一 
        snake->length++;
        //蛇身(不包括蛇尾)整体像前移动一格 
        for(i=snake->length-1;i>0;i--){
            snake->x[i]=snake->x[i-1];
            snake->y[i]=snake->y[i-1];
        }
        //得到蛇尾的坐标(即蛇移动前的蛇尾坐标) 
        snake->x[0]=a[0];      
        snake->y[0]=a[1];
        printfood(hout,snake,food);
        snake->count++;
        if(snake->count%3==0)
            snake->speed-=50;
    }
}
//死亡判断 
int ifdead(struct Snake* snake){
    //如果碰到左边界 返回0;
    if(snake->x[snake->length-1]==framex)
        return 0;
    //如果碰到右边界 返回0;
    if(snake->x[snake->length-1]==framex+wide*2)
        return 0;
    //如果碰到上边界 返回0;
    if(snake->y[snake->length-1]==framey)
        return 0;
    //如果碰到下边界 返回0;
    if(snake->y[snake->length-1]==framey+high)
        return 0;
    //如果碰到自己身体 返回0; 
    for(i=0; i<snake->length-1; i++) 
        if( snake->x[snake->length-1]==snake->x[i] && snake->y[snake->length-1]==snake->y[i] ) 
            return 0;
    //否则返回1; 
    return 1;
}
//开始游戏 
int main(){
    unsigned char ch =77;
    //定义显示器句柄 
    HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
    cover(hout);
    struct Snake s, *snake=&s;
    struct Food  f,  *food=&f;
    makeframe(*snake);
    initsnake(snake);
    printfood(hout,snake,food);
    Sleep(500);
    while(1){
        infor(hout,snake);
        //保存蛇尾横纵坐标 
        a[0]=snake->x[0];
        a[1]=snake->y[0];
        j=0;
        //如果用户敲击键盘
        if(kbhit()){ 
            //用ch接收输入 ,注意是getch(),不需敲击回车
            ch=getch();
            if(kbhit()){
            //长按时间
                Sleep(20);
                j=1;
            }
        }
        switch(ch){
            //向上移动 
            case'W':
            case 'w' :
            case 72:{
                movesnake(hout,snake);
                //蛇头纵坐标减一 
                snake->y[snake->length-1]-=1;
                break;
            }
            //向下移动 
            case'S':
            case 's':
            case 80:{
                movesnake(hout,snake);
                //蛇头纵坐标加一 
                snake->y[snake->length-1]+=1;
                break;
            }
            //向左移动 
            case'A':
            case 'a':
            case 75:{
                movesnake(hout,snake);
                //蛇头横坐标减二 
                snake->x[snake->length-1]-=2;
                break;
            }
            //向右移动 
            case'D':
            case 'd':
            case 77:{
                movesnake(hout,snake);
                //蛇头横坐标加二 
                snake->x[snake->length-1]+=2;
                break;
            }
        }

        eatfood(hout,snake,food);
        printsnake(hout,snake);
        //如果判断蛇死亡,跳出循环 
        if(ifdead(snake)==0||ch==27||snake->speed==0){
            gotoxy(hout,framex+wide/2,framey-2);
            if(snake->speed==0)
                printf("恭喜你通关了!!!");
            else
                printf("糟糕 T_T");
            break;
        }

        if(j==0)
        //如果没有长按,蛇滞留的时间为 
            Sleep(snake->speed);
        //如果长按,蛇滞留的时间为 20ms,即加速 
        else 
            Sleep(20);
    }
    //跳出循环时 ,滞留死亡场景一段时间
    Sleep(3000);
    //清屏 
    system("cls");
    //显示结束界面 
    if(snake->speed==0) 
        printf("\n\n\n\n\n\t\t\t哈哈,你赢了\n\n\t\t\t你得到了满分:24\n\n\n");
    else 
        printf("\n\n\n\n\n\t\t\t哈哈,你输了\n\n\t\t\t你的最终得分是:%d\n\n\n",snake->count); 
    Sleep(3000);
    return 0; 
} 

five.

#include <iostream>
#include <list>
#include <cstdio>
#include <string>
#include <vector>
#include <ctime>
#include <algorithm>
#include <conio.h>
#include <windows.h>
using namespace std;

class Node { 
public:
    int x, y;
    Node(int x1, int y1); 
};

class UserData { 
public:
    string name;
    long long score;
    int gt;
    int gr; 
    UserData(string s, long long sc,int gametime,int grade); 
    friend bool operator < (UserData a, UserData b); 
};

#define RIGHT 0x4d
#define LEFT 0x4b  
#define UP 0x48  
#define DOWN 0x50 
#define YELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define ORANGE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define PURPLE FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY
#define RED  FOREGROUND_RED | FOREGROUND_INTENSITY
const int STARTX = 8; 
const int STARTY = 4; 
const int RANGEX = 60; 
const int RANGEY = 20;
int point=10; 
const int ENDX = STARTX + RANGEX; 
const int ENDY = STARTY + RANGEY; 
bool isSnake[RANGEY + 10 ][RANGEX + 10];
int speed; 
int sysj;
int gametime;
list<Node> snake;
int curDiraction; //蛇的当前前进方向, 1上, 2下, 3左, 4右
int score; //当前分数
int grade;
int snakeLen; //蛇的长度
int foodx, foody; //食物坐标
int gox, goy; //蛇头坐标
int mj;
void GoTo(short x, short y); //定位光标
void DrawBoard(); //绘制边框
void ShowInformation(); //展示游戏信息
void Init(); //初始化游戏
void RunSnake(int x, int y); //绘制蛇身
void Try(int& x, int& y); //试走
bool IsGoodCoord(int x, int y); //前进坐标是否合法
void AddFood(); //增加食物
void EartFood(); //吃食物
void InitSnake(); //初始化蛇身
bool EndGame(); //结束游戏
bool StartGame(); //启动游戏
bool GameMenu(); //游戏菜单
void ShowRanking(); //排行榜
void ShowAbout(); //相关信息
void InputData(); //输入玩家名字

int main() {
    system("title 贪吃蛇小游戏 by 李凯昱");
    while (true) {
        if (!GameMenu()) return 0;
    }
    return 0;
}

Node::Node(int x1, int y1) { //构造Node对象
    x = x1; y = y1; 
}

bool operator < (UserData a, UserData b) { //重载运算符,按分数由大到小排列
    if(a.score != b.score)
    return a.score > b.score;
    if(a.gt !=b.gt)
    return a.gt > b.gt;
    else
    return a.gr > b.gr;
}
UserData::UserData(string s, long long sc,int gametime_,int _grade) { //构造UserData对象
    name = s; score = sc; gt=gametime_; gr=_grade;
}

void color(WORD A)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), A);
} 

void Color(int score_)
{
    if(score_%4==1)
    {
        color(PURPLE);
    }
    else if(score_%4==2)
    {
        color(RED);
    }
    else if(score_%4==3)
    {
        color(YELLOW);
    }
    else if(score_%4==0) 
    {
        color(CYAN);
    }
}

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

void ShowInformation() { //输出游戏信息
    color(YELLOW);
    GoTo(78, 5);
    printf("贪吃蛇游戏");
    GoTo(78,18);
    gametime=(clock()-mj)/1000;
    grade=snakeLen-3; 
    printf("生存时间:%3d 秒",(clock()-mj)/1000);
    GoTo(78, 8);
    printf("游戏规则:");
    GoTo(78, 10);
    printf("请按 ↑ ↓ ← →  来控制您的蛇吃东西");
    GoTo(78, 12);
    printf("吃的越多,蛇就越长,您的等级也将越高");
    GoTo(78, 14);
    printf("当蛇吃到自己或撞上墙时,游戏结束。");
    GoTo(78,16);
    printf("自动前进时间:%3dms",speed);
    GoTo(78, 20);
    printf("当前等级: %8d", snakeLen-3);
    GoTo(78, 23);
    printf("您的分数: %d", score);
    color(CYAN);
    printf("+%d=%d",score/3,score*3/2);
    color(YELLOW);
    GoTo(78,25);
    printf("剩余时间:%d秒",10+(snakeLen-3)*4-gametime);
    sysj=10+(snakeLen-3)*4-gametime; 
}

void DrawBoard() { //绘制墙体

    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得输出句柄

    CONSOLE_CURSOR_INFO cursor_info = { 1, 0 }; //光标信息
    SetConsoleCursorInfo(hOut, &cursor_info); //隐藏光标

    COORD size = { 120, 30 };
    SetConsoleScreenBufferSize(hOut, size); //重设缓冲区大小

    SMALL_RECT rc = { 0 , 0, 120, 30 };
    SetConsoleWindowInfo(hOut, true, &rc); //重设窗口大小

    SetConsoleTextAttribute(hOut, CYAN);

    for (int i = STARTX - 2; i <= ENDX + 2; i += 2) { //横向墙体
        GoTo(i, STARTY - 1);
        printf("■");
        GoTo(i, ENDY + 1);
        printf("■");
    }
    for (int i = STARTY - 1; i <= ENDY + 1; ++i) { //竖向墙体
        GoTo(STARTX - 2, i);
        printf("■");
        GoTo(ENDX + 2, i);
        printf("■");
    }
}
void draw()
{
    char m=snakeLen+62;
    Color(score);
    cout<<"■";
 } 
void Init() { //初始化游戏
    system("cls");
    memset(isSnake, 0, sizeof(isSnake));
    speed = 200;
    curDiraction = 4;
    score = 0;
    DrawBoard();
    InitSnake();
    ShowInformation();
    AddFood();
    mj=clock();
    point=10;
    sysj=10;
}

void RunSnake(int x, int y) { //绘制蛇身
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
    score += snakeLen + 1;
    if (x == foodx && y == foody) {
        EartFood();
        AddFood();
        return;
    }
    snake.push_front(Node(x, y));
    isSnake[y][x] = true;
    GoTo(x, y);
    draw();
    Node back = snake.back();
    snake.pop_back();
    isSnake[back.y][back.x] = false;
    GoTo(back.x, back.y);
    printf(" ");
}

void Try(int& x, int& y) { //试走
    int key, cnt = 100;
    while (cnt--) { //多次检测键盘状态
        if (_kbhit()) {
            key = getch();
            switch (key) {
            case UP: 
                if (curDiraction == 1 || curDiraction == 2) break;
                --y; curDiraction = 1; return;
            case DOWN: 
                if (curDiraction == 1 || curDiraction == 2) break;
                ++y; curDiraction = 2; return;
            case LEFT: 
                if (curDiraction == 3 || curDiraction == 4) break;
                x -= 2; curDiraction = 3; return;
            case RIGHT: 
                if (curDiraction == 3 || curDiraction == 4) break;
                x += 2; curDiraction = 4; return;
            }
        }
    }
    if (curDiraction == 1) --y; //用户没有输入时
    else if (curDiraction == 2) ++y;
    else if (curDiraction == 3) x -= 2;
    else x += 2;
}

bool IsGoodCoord(int x, int y) { //判断光标是否合法
    if (x <= ENDX && y <= ENDY && x >= STARTX && y >= STARTY)
        return true;
    else
        return false;
}

void AddFood() { //增加食物
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), PURPLE);
    srand((unsigned)time(NULL));
    while (true) {
        foodx = (rand()%ENDX) + 1;
        foody = (rand()%ENDY) + 1;
        if (foodx&1) foodx++;
        if (!isSnake[foody][foodx] && IsGoodCoord(foodx, foody)) break;
    }
    GoTo(foodx, foody);
    int a=rand()%5;
    if(a>=4) 
    printf("★");
    else if(a<=1) 
    printf("○");
    else
    printf("▲");
}

void EartFood() { //吃东西
    point+=4;
    int sb=gametime=(clock()-mj)/1000;
    sysj=point-sb;
    score+=score/2;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
    snake.push_front(Node(foodx, foody));
    isSnake[foody][foodx] = true;
    ++snakeLen;
    if (speed >= 55) speed -= 5;

    GoTo(foodx, foody);
    draw();
    AddFood(); 
}

void InitSnake() { //初始化蛇身
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
    snakeLen = 3, gox = 18, goy = 14;
    snake.clear();
    snake.push_front(Node(12, 14));
    snake.push_front(Node(14, 14));
    snake.push_front(Node(16, 14));
    for (int i = 12; i <= 16; i += 2) {
        GoTo(i, 14);
        draw();
        isSnake[14][i] = true;
    }
}
bool EndGame() { //结束游戏
    system("cls");
    DrawBoard();
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
    GoTo(28, 10);
    printf("您的本局游戏得分: %d分", score);
    GoTo(32, 18);
    printf("....你挂了....");
    GoTo(27, 20);
    printf("是否继续游戏: 是(1), 否(0)");
    GoTo(27, 22);
    char key = getch();
    while (true) {
        if (key == '1') return false;
        else if (key == '0') 
        {GoTo(ENDX+1,ENDY+2);
        exit(0);return true;
        }
        else key = getch();
    }
}

bool StartGame() { //启动游戏

    Init();

    while (IsGoodCoord(gox, goy) && !isSnake[goy][gox]&&sysj>0) { //当试走合法时
        RunSnake(gox, goy);
        ShowInformation();
        Try(gox, goy);
        Sleep(speed);
    }
    InputData(); 
    return true;
}

bool GameMenu() { //游戏菜单
    system("cls");
    DrawBoard();
    GoTo(STARTX + 22, STARTY + 4);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
    printf("欢迎进入贪吃蛇游戏!");
    GoTo(STARTX + 24, STARTY + 10);
    printf("1: 新游戏");
    GoTo(STARTX + 24, STARTY + 12);
    printf("2: 排行榜");
    GoTo(STARTX + 24, STARTY + 14);
    printf("3: 关于游戏");
    GoTo(STARTX + 24, STARTY + 16);
    printf("4: 退出游戏");

    while (true) {
        if (_kbhit()) {
            char key = getch();
            switch (key) {
            case '1':
                if (!StartGame()) return false; 
                else return true;
            case '2':
                ShowRanking(); return true;
            case '3':
                ShowAbout(); return true;
            case '4':
                GoTo(1,ENDY+2);
                return false;
            default:
                return true;
            }
        }
    }
}

void ShowRanking() { //展示排行榜
    vector<UserData> vu;
    FILE *fp = fopen("GameData.txt", "r");
    if (fp == NULL) fp = fopen("GameData.txt", "w+");
    char name[20];
    int len = 0;
    while (fscanf(fp, "%s", name) != EOF) {
        ++len;
        int score,g=grade;
        fscanf(fp, "%d%d%d%*c", &score,&gametime,&g);
        vu.push_back(UserData(string(name), score,gametime,grade));
    }
    fclose(fp);
    sort(vu.begin(), vu.end()); //对得分进行排名
    system("cls");
    DrawBoard();
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN);
    GoTo(STARTX + 8, STARTY + 2);
    printf("用户");
    GoTo(STARTX + 20, STARTY + 2);
    printf("分数");
    GoTo(STARTX + 32, STARTY + 2);
    printf("生存时间");
    GoTo(STARTX + 44, STARTY + 2);
    printf("排行");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    for (int i = 0; i < len && i < 10; ++i) { //打印前十名用户数据
        char const *p = vu[i].name.c_str();
        Color(vu[i].score);
        GoTo(STARTX + 8, STARTY + 4 + i);
        printf("%s", p);
        GoTo(STARTX + 20, STARTY + 4 + i);
        printf("%d分", vu[i].score);
        GoTo(STARTX + 32, STARTY + 4 + i);
        printf("%d秒", vu[i].gt);
        GoTo(STARTX + 44, STARTY + 4 + i);
        printf(" %d", i + 1);
    }

    GoTo(STARTX + 4, ENDY - 2);
    printf("-----------------  按'1'返回游戏菜单  ---------------");
    while (true) {
        if (_kbhit()) {
            char key = getch();
            if (key == '1') break;
        }
    }
}

void ShowAbout() { //展示游戏相关
    system("cls");
    DrawBoard();
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    GoTo(STARTX + 4, STARTY + 2);
    printf("-------------------  贪吃蛇游戏  -------------------");
    GoTo(STARTX + 10, STARTY + 4);
    printf("制作人: ");
    GoTo(STARTX + 10, STARTY + 6);
    printf("李凯昱");
    GoTo(STARTX + 10,STARTY + 8);
    printf("贪吃蛇游戏");
    GoTo(STARTX + 10,STARTY + 10);
    printf("游戏规则:");
    GoTo(STARTX + 10,STARTY + 12);
    printf("请按 ↑ ↓ ← →  来控制您的蛇吃东西");
    GoTo(STARTX + 10,STARTY + 14);
    printf("吃的越多,蛇就越长,您的等级也将越高");
    GoTo(STARTX + 10,STARTY + 16);
    printf("当蛇吃到自己或撞上墙时,游戏结束。");

    GoTo(STARTX + 4, ENDY - 2);
    printf("-----------------  按'1'返回游戏菜单  ---------------");
    while (true) {
        if (_kbhit()) {
            char key = getch();
            if (key == '1') break;
        }
    }
}

void InputData() { //用户输入名字
    char name[20];
    if(score>=1000)
    {
    GoTo(STARTX + 10, STARTY + 10);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), RED);
    printf("请输入你的名字: ");
    COORD coord = { STARTX + 10, STARTY + 12 };
    SetConsoleCursorPosition(GetStdHandle(STD_INPUT_HANDLE), coord);
    while (true) { //忽略非法字符
        scanf("%s", name);
        if (name[0] != 0 && name[0] != ' ') break; 
    }FILE *fp = fopen("Gamedata.txt", "a");
    if (fp == NULL) fp = fopen("GameData.txt", "w+");
    fprintf(fp, "%s %d %d \n", name, score,gametime);
    fclose(fp);
    }
    else 
    {
        GoTo(STARTX + 20, STARTY + 10);
        cout<<"哟!这分数也能上榜??"<<endl; 
        Sleep(1000);
     }  
    EndGame(); 

}

six.

#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();
}

seven.

#include<iostream>
#include<vector>
using namespace std;

class qipan
{
public:
    qipan() {}
    ~qipan() {};


    //向上下左右,斜的方向
    char  left(int x, int y)
    {//检查是否合适
        if (x >= 1 && x <= hight&& y - 1 >= 1 && y - 1 <= width)
        {
            return q[x][y - 1];
        }
        else {
            return 'F';
        }

    }
    char  right(int x, int y)
    {
        if (x >= 1 && x <= hight&&y + 1 >= 1 && y + 1 <= width)
        {
            return q[x][y + 1];
        }
        else {
            return 'F';
        }

    }
    char  up(int x, int y)
    {
        if (x - 1 >= 1 && x - 1 <= hight && y >= 1 && y <= width)
        {
            return q[x - 1][y];
        }
        else {
            return 'F';
        }

    }
    char down(int x, int y)
    {
        if (x + 1 >= 1 && x + 1 <= hight && y >= 1 && y <= width)
        {
            return q[x + 1][y];
        }
        else {
            return 'F';
        }

    }
    char left_up(int x, int y)
    {
        if (x - 1 >= 1 && x - 1 <= hight && y - 1 >= 1 && y - 1 <= width)
        {
            return q[x - 1][y - 1];
        }
        else {
            return 'F';
        }

    }
    char  left_down(int x, int y)
    {
        if (x + 1 >= 1 && x + 1 <= hight && y - 1 >= 1 && y - 1 <= width)
        {
            return q[x + 1][y - 1];
        }
        else {
            return 'F';
        }

    }
    char right_up(int x, int y)
    {
        if (x - 1 >= 1 && x - 1 <= hight && y + 1 >= 1 && y + 1 <= width)
        {
            return q[x - 1][y + 1];

        }
        else {
            return 'F';
        }


    }
    char right_down(int x, int y)
    {
        if (x + 1 >= 1 && x + 1 <= hight && y + 1 >= 1 && y + 1 <= width)
        {
            return q[x + 1][y + 1];
        }
        else {
            return 'F';
        }
    }

    void init_cur() {
        h_cur = hang;
        l_cur = lie;

    }
    bool win()
    {
        bool WIN = false;
        char temp = q[hang][lie];

        //以上为例,每次先看上面的5个,假如一样,iter++;否则 break;再加上下的方向,同样iter++;最后iter+1==5,WIN=true;并且退出
        //各个方向重复,上下左右,斜着的。
        //赢了直接退出。
        //显示是谁赢了


        //左右
        int  count_lr = 1;
        init_cur();
        for (int i = 0; i < 4; i++)
        {

            if (left(h_cur, l_cur) == temp)
                count_lr++;
            else
                break;
            l_cur--;

        }
        init_cur();
        for (int i = 0; i < 4; i++)
        {

            if (right(h_cur, l_cur) == temp)
                count_lr++;
            else
                break;
            l_cur++;

        }
        if (count_lr == 5)
            WIN = true;
        //上下
        int  count_ud = 1;
        init_cur();
        for (int i = 0; i < 4; i++)
        {

            if (up(h_cur, l_cur) == temp)
                count_ud++;
            else
                break;
            h_cur--;

        }
        init_cur();
        for (int i = 0; i < 4; i++)
        {

            if (down(h_cur, l_cur) == temp)
                count_ud++;
            else
                break;
            h_cur++;

        }
        if (count_ud == 5)
            WIN = true;


        //左斜
        int  count_lt = 1;
        init_cur();
        for (int i = 0; i < 4; i++)
        {

            if (left_up(h_cur, l_cur) == temp)
                count_lt++;
            else
                break;
            h_cur--;
            l_cur--;

        }
        init_cur();
        for (int i = 0; i < 4; i++)
        {

            if (left_down(h_cur, l_cur) == temp)
                count_lt++;
            else
                break;
            h_cur++;
            l_cur--;

        }
        if (count_lt == 5)
            WIN = true;

        //右边斜
        int  count_rt = 1;
        init_cur();
        for (int i = 0; i < 4; i++)
        {

            if (right_up(h_cur, l_cur) == temp)
                count_rt++;
            else
                break;
            h_cur--;
            l_cur++;

        }
        init_cur();
        for (int i = 0; i < 4; i++)
        {

            if (right_down(h_cur, l_cur) == temp)
                count_rt++;
            else
                break;
            h_cur++;
            l_cur++;

        }
        if (count_rt == 5)
            WIN = true;

        return WIN;
    }


    void qipan_array()
    {
        for (int i = 0; i < hight; i++) {
            for (int j = 0; j < width; j++)
                q[i][j] = '+';
        }
    }



    void prin_qipan()
    {
        //打印二维数组;每一行要打印上行号,以及列号
        for (int i = 0; i <hight; i++)
        {

            for (int j = 0; j < width; j++)
            {
                cout << q[i][j] << " ";

            }
            cout << i;
            cout << endl;
        }

        for (int j = 0; j <width; j++)
        {
            cout << j << " ";
        }
        cout << endl << "________________________________" << endl;
    }
    int xiaqi(int player)
    {
        if (player == 1) {
            q[hang][lie] = '*';
        }
        else if (player == 2)
        {
            q[hang][lie] = '@';
        }
        else
            cout << "input player is wrong" << endl;
        return 0;
    }

    //初始化行列
    int gethang(int h)
    {

        hang = h;
        return 0;
    }
    int getlie(int l)
    {
        lie = l;
        return 0;
    }


    int h_cur;
    int l_cur;
    const int hight = 9;
    const int width = 9;
    int hang; int lie;
    char q[9][9];
};

int main()
{
    int hang, lie;
    qipan wzq;
    wzq.qipan_array();
    cout << "A 与B 玩五子棋" << endl;
    cout << "A use * and B use @" << endl;
    cout << "________________________________" << endl;
    for (int i = 0; i < 15; i++) {
        cout << "A 输入行: ";
        cin >> hang;
        cout << "A 输入列: ";
        cin >> lie;
        if (wzq.q[hang][lie] != '+')
            cout << "输入的行列数字已经有人占据了" << endl;
        else {
            wzq.gethang(hang);
            wzq.getlie(lie);

            wzq.xiaqi(1);
            wzq.prin_qipan();
            if (wzq.win())
            {
                cout << "A is winner" << endl;
                exit(0);
            }
        }
        //b 开始了
        cout << "B 输入行: ";
        cin >> hang;
        cout << "B 输入列: ";
        cin >> lie;
        if (wzq.q[hang][lie] != '+')
            cout << "输入的行列数字已经有人占据了" << endl;
        else {
            wzq.gethang(hang);
            wzq.getlie(lie);

            wzq.xiaqi(2);

            wzq.prin_qipan();
            if (wzq.win())
            {
                cout << "B is winner" << endl;
                exit(0);
            }
        }
    }
    return 0;


}

eight.

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

using namespace std;

int food[2] = { 9, 9 };//初始食物坐标
int snake[1000][2];//蛇身坐标
int length = 1;//初始蛇长
int headX, headY;//蛇头坐标
int speed = 500;//游戏难度
int score = 0;//分数
int level = 1;//难度等级
string name;//玩家姓名

void gotoxy(short x, short y);//移动光标
int setdirection(int x);//确定方向变量
void changesnake(int x);//改变蛇身坐标
void ifchangefood();//判断蛇是否吃到食物
void makefood();//创造新食物
bool judgelife();//判断蛇是否存活
void drawsnake();//画蛇
void drawfood();//画食物
void drawwall();//画墙
void drawscore();//画数据
void draw();//绘图

int main()
{
    SetConsoleTitle("贪吃蛇游戏");
    int po = 2;//初始方向变量
    snake[0][0] = 7;
    snake[0][1] = 7;//初始蛇头坐标
    headX = snake[0][0];
    headY = snake[0][1];
    gotoxy(30, 7);
    cout << "欢迎来到贪吃蛇游戏";
    gotoxy(30, 11);
    cout << "请输入你的姓名:";
    cin >> name;
    system("cls");
    gotoxy(30, 7);
    cout << "游戏控制方式:";
    gotoxy(30, 9);
    cout << "W键:向上 S键:向下";
    gotoxy(30, 11);
    cout << "A键:向左 D键:向右";
    gotoxy(30, 13);
    cout << "空格键:暂停";
    gotoxy(30, 15);
    cout << "将游戏窗口最大化之后";
    gotoxy(30, 17);
    cout << "按回车键开始游戏...";
    cin.get();
    cin.get();
    system("cls");
    while (true)
    {
        po = setdirection(po);
        system("cls");
        changesnake(po);
        ifchangefood();
        if (!judgelife())
            break;
        draw();
        Sleep(speed);
    }
    gotoxy(30, 10);
    cout << "Game Over!!!";
    Sleep(2000);
    gotoxy(28, 12);
    system("pause");
    return 0;
}

void gotoxy(short x, short y)
{
    COORD position = { x, y };
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut, position);
}

int setdirection(int x)
{
    char ch;
    if (_kbhit())
    {
        ch = _getch();
        switch (ch)
        {
        case 'w':
            x = 1;
            break;
        case 's':
            x = 2;
            break;
        case 'a':
            x = 3;
            break;
        case 'd':
            x = 4;
            break;
        case ' ':
            gotoxy(37, 16);
            cout << "游  戏  暂  停. . .";
            gotoxy(37, 18);
            system("pause");
            break;
        default:
            break;
        }
    }
    return x;
}

void changesnake(int x)
{
    switch (x)
    {
    case 1:
        headY -= 1;
        break;
    case 2:
        headY += 1;
        break;
    case 3:
        headX -= 1;
        break;
    case 4:
        headX += 1;
        break;
    default:
        break;
    }
    for (int i = length; i > 0; --i)
    {
        for (int j = 0; j < 2; ++j)
        {
            snake[i][j] = snake[i - 1][j];
        }
    }
    snake[0][0] = headX;
    snake[0][1] = headY;
}

void ifchangefood()
{
    if (snake[0][0] == food[0] && snake[0][1] == food[1])
    {
        length++;
        makefood();
        ++score;
        if (length > 5)
        {
            speed = 450;
            level = 2;
        }
        if (length > 10)
        {
            speed = 400;
            level = 3;
        }
        if (length > 15)
        {
            speed = 350;
            level = 4;
        }
        if (length > 20)
        {
            speed = 300;
            level = 5;
        }
        if (length > 25)
        {
            speed = 250;
            level = 6;
        }
        if (length > 30)
        {
            speed = 200;
            level = 7;
        }
        if (length > 35)
        {
            speed = 150;
            level = 8;
        }
        if (length > 40)
        {
            speed = 100;
            level = 9;
        }
        if (length > 45)
        {
            speed = 50;
            level = 10;
        }
    }
}

void makefood()
{
    srand((unsigned)time(NULL));
    food[0] = rand() % 30 + 2;
    food[1] = rand() % 30 + 4;
    for (int m = 0; m < length; ++m)
    {
        if (food[0] == snake[m][0] && food[1] == snake[m][1])
        {
            makefood();
            break;
        }
    }
}

bool judgelife()
{
    for (int x = 1; x < length; ++x)
    {
        if (headX == snake[x][0] && headY == snake[x][1])
        {
            return false;
        }

    }
    if (headX < 1 || headY < 3 || headX > 34 || headY > 34)
        return false;
    else
        return true;
}

void drawsnake()
{
    gotoxy(snake[0][0], snake[0][1]);
    cout << "@";
    for (int n = 1; n < length; ++n)
    {
        gotoxy(snake[n][0], snake[n][1]);
        cout << "#";
    }
}

void drawfood()
{
    gotoxy(food[0], food[1]);
    cout << "$";
}

void drawwall()
{
    gotoxy(0, 0);
    cout << "------------------------------------";
    gotoxy(16, 1);
    cout << "贪吃蛇";
    gotoxy(0, 2);
    cout << "++++++++++++++++++++++++++++++++++++";
    gotoxy(0, 35);
    cout << "------------------------------------";
    for (int x = 0; x < 35; ++x)
    {
        gotoxy(0, x);
        cout << "|";
        gotoxy(35, x);
        cout << "|";
    }
}

void drawscore()
{
    gotoxy(37, 10);
    cout << "分数:" << score;
    gotoxy(37, 12);
    cout << "等级:" << level;
    gotoxy(37, 14);
    cout << "玩家姓名:" << name;
}

void draw()
{
    drawsnake();
    drawfood();
    drawwall();
    drawscore();
}

 

 

0
宋婉婷
宋婉婷
中级守护
中级守护
#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,0 } };
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 << "作者:宋婉婷";
}

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;
}

俄罗斯方块

宋婉婷在2018-03-31 10:31:41追加了内容

请勿举报

0
0
0
宫西诚
宫西诚
修练者
修练者
#include<iostream.h>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#define N 21
void gotoxy(int x,int y)//位置函数
{
COORD pos;
pos.X=2*x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void color(int a)//颜色函数
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void init(int apple[2])//初始化函数(初始化围墙、显示信息、苹果)
{
int i,j;//初始化围墙
int wall[N+2][N+2]={{0}};
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
wall[i][j]=1;
}
color(11);
for(i=0;i<N+2;i++)
{
for(j=0;j<N+2;j++)
{
if(wall[i][j])
cout<<"■";
else cout<<"□" ;
}
cout<<endl;
}
gotoxy(N+3,1);//显示信息
color(20);
cout<<"按 W S A D 移动方向"<<endl;
gotoxy(N+3,2);
color(20);
cout<<"按任意键暂停"<<endl;
gotoxy(N+3,3);
color(20);
cout<<"得分:"<<endl;
apple[0]=rand()%N+1;//苹果
apple[1]=rand()%N+1;
gotoxy(apple[0],apple[1]);
color(12);
cout<<"●"<<endl;
}
int main()
{
int i,j;
int** snake=NULL;
int apple[2];
int score=0;
int tail[2];
int len=3;
char ch='p';
srand((unsigned)time(NULL));
init(apple);
snake=(int**)realloc(snake,sizeof(int*)*len);
for(i=0;i<len;i++)
snake[i]=(int*)malloc(sizeof(int)*2);
for(i=0;i<len;i++)
{
snake[i][0]=N/2;
snake[i][1]=N/2+i;
gotoxy(snake[i][0],snake[i][1]);
color(14);
cout<<"★"<<endl;
}
while(1)//进入消息循环
{
tail[0]=snake[len-1][0];
tail[1]=snake[len-1][1];
gotoxy(tail[0],tail[1]);
color(11);
cout<<"■"<<endl;
for(i=len-1;i>0;i--)
{
snake[i][0]=snake[i-1][0];
snake[i][1]=snake[i-1][1];
gotoxy(snake[i][0],snake[i][1]);
color(14);
cout<<"★"<<endl;
}
if(kbhit())
{
gotoxy(0,N+2);
ch=getche();
}
switch(ch)
{
case 'w':snake[0][1]--;break;
case 's':snake[0][1]++;break;
case 'a':snake[0][0]--;break;
case 'd':snake[0][0]++;break;
default: break;
}
gotoxy(snake[0][0],snake[0][1]);
color(14);
cout<<"★"<<endl;
Sleep(abs(200-0.5*score));
if(snake[0][0]==apple[0]&&snake[0][1]==apple[1])//吃掉苹果后蛇分数加1,蛇长加1
{
score++;
len++;
snake=(int**)realloc(snake,sizeof(int*)*len);
snake[len-1]=(int*)malloc(sizeof(int)*2);
apple[0]=rand()%N+1;
apple[1]=rand()%N+1;
gotoxy(apple[0],apple[1]);
color(12);
cout<<"●"<<endl;
gotoxy(N+5,3);
color(20);
cout<<score<<endl;
}
if(snake[0][1]==0||snake[0][1]==N||snake[0][0]==0||snake[0][0]==N)//撞到围墙后失败
{
gotoxy(N/2,N/2);
color(30);
cout<<"失败!!!"<<endl;
for(i=0;i<len;i++)
free(snake[i]);
Sleep(INFINITE);
exit(0);
}
}
return 0;
0
0
我要回答