• 个人简介

    #define itn int
    #define tin int
    #define tni int
    #define nti int
    #define nit int
    

    ▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一▄︻┻┳═一我才四年级,很傻,别来找我>﹏< 要找?复制!

    \\\\ \\ \\ \\ \\ \\ \\        _ooOoo_          // // // // // // ////
    \\\\ \\ \\ \\ \\ \\          o8888888o            // // // // // ////
    \\\\ \\ \\ \\ \\             88" . "88               // // // // ////
    \\\\ \\ \\ \\                (| -_- |)                  // // // ////
    \\\\ \\ \\                   O\  =  /O                     // // ////
    \\\\ \\                   ____/`---'\____                     // ////
    \\\\                    .'  \\|     |//  `.                      ////
    //==                   /  \\|||  :  |||//  \                     ==\\
    //==                  /  _||||| -:- |||||-  \                    ==\\
    //==                  |   | \\\  -  /// |   |                    ==\\
    //==                  | \_|  ''\---/''  |   |                    ==\\
    //==                  \  .-\__  `-`  ___/-. /                    ==\\
    //==                ___`. .'  /--.--\  `. . ___                  ==\\
    //==             ."" '<  `.___\_<|>_/___.'  >' "".               ==\\
    //==            | | :  `- \`.;`\ _ /`;.`/ - ` : | |              \\\\
    ////            \  \ `-.   \_ __\ /__ _/   .-` /  /              \\\\
    ////      ========`-.____`-.___\_____/___.-`____.-'========      \\\\
    ////                           `=---='                           \\\\
    //// //   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  \\ \\\\
    //// // //      佛祖保佑      永无BUG      永不修改        \\ \\ \\\\
    //// // // // // // || || || || || || || || || || \\ \\ \\ \\ \\ \\\\
    
    
    

    dp[i]=(1<<30)*(2.00-0.000000000000001);(~~INT_MAX)

    #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);
    }
    void drawRow(int y, int x1, int x2, char ch)
    {
        SetPos(x1,y);
        for(int i = 0; i <= (x2-x1); i++)
            cout<<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");
        }
    }
    void drawCol(int x, int y1, int y2, char ch)
    {
        int y=y1;
        while(y!=y2+1)
        {
            SetPos(x, y);
            cout<<ch;
            y++;
        }
    }
    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");
        }
    }
    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, '=', '|');
        drawFrame(49, 0, 79, 4, '-', '|');
        drawFrame(49, 4, 79, 9, '-', '|');
        drawFrame(49, 9, 79, 20, '-', '|');
        drawFrame(49, 20, 79, 24, '-', '|');
        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 退出游戏。";
    }
    int random(int a, int b)
    {
        int c=(rand() % (a-b))+ a;
        return c;
    }
    COORD random(COORD a, COORD b)
    {
        int x=random(a.X, b.X);
        int y=random(a.Y, b.Y);
        COORD c={x, y};
        return c;
    }
    bool  judgeCoordInFrame(Frame frame, COORD spot)
    {
        if(spot.X>=frame.position[0].X)
            if(spot.X<=frame.position[1].X)
                if(spot.Y>=frame.position[0].Y)
                    if(spot.Y<=frame.position[0].Y)
                        return true;
        return false;
    }
    void printCoord(COORD a)
    {
        cout    <<"( "<<a.X<<" , "<<a.Y<<" )";
    }
    void printFrameCoord(Frame a)
    {
        printCoord(a.position[0]);
        cout    <<" - ";
        printCoord(a.position[1]);
    } 
    int drawMenu()
    {
        SetPos(30, 1);
        cout<<"P l a n e  W a r";
        drawRow(3, 0, 79, '-');
        drawRow(5, 0, 79, '-');
        SetPos(28, 4);
        cout<<"w 和 s 选择, k 确定";
        SetPos(15, 11);
        cout<<"1. 简单的敌人";
        SetPos(15, 13);
        cout<<"2. 冷酷的敌人";
        drawRow(20, 0, 79, '-');
        drawRow(22, 0, 79, '-');
        SetPos(47, 11);
        cout<<"简单的敌人:";
        SetPos(51, 13);
        cout<<"简单敌人有着较慢的移动速度。";
        SetPos(24, 21);
        cout<<"制作:LJF神犇";
        int j=11;
        SetPos(12, j);
        cout<<">>";
        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;
                        }
                }
            }
        }
    }
    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 planeMove(char);
        void bulletMove();
        void enemyMove();
        void drawPlane();
        void drawPlaneToNull();
        void drawBullet();
        void drawBulletToNull();
        void drawEnemy();
        void drawEnemyToNull();
        void drawThisBulletToNull( COORD );
        void drawThisEnemyToNull( Frame );
        void Pause();
        void Playing();
        void judgePlane();
        void judgeEnemy();
        void Shoot();
        void GameOver();
        void printScore();
    };
    Game::Game()
    {
        initPlane();
        initBullet();
        initEnemy();
        score = 0;
        rank = 25;
        rankf = 0;
        flag_rank = 0;
    }
    void Game::initPlane()
    {
        COORD centren={39, 22};
        position[0].X=position[5].X=position[7].X=position[9].X=centren.X;
        position[1].X=centren.X-2;    
        position[2].X=position[6].X=centren.X-1;
        position[3].X=position[8].X=centren.X+1;
        position[4].X=centren.X+2;
        for(int i=0; i<=4; i++)
            position[i].Y=centren.Y;
        for(int i=6; i<=8; i++)
            position[i].Y=centren.Y+1;
        position[5].Y=centren.Y-1;
        position[9].Y=centren.Y-2;
    }
    void Game::drawPlane()
    {
        for(int i=0; i<9; i++)
        {
            SetPos(position[i]);
            if(i!=5)
                cout<<"O";
            else if(i==5)
                cout<<"|";        
        }
    }
    void Game::drawPlaneToNull()
    {
        for(int i=0; i<9; i++)
        {
            SetPos(position[i]);
            cout<<" ";
        }    
    }
    void Game::initBullet()
    {
        for(int i=0; i<10; i++)
            bullet[i].Y = 30;
    }
     
    void Game::drawBullet()
    {
        for(int i=0; i<10; i++)
        {
            if( bullet[i].Y != 30)
            {
                SetPos(bullet[i]);
                cout<<"'";    
            }
        }
    }
    void Game::drawBulletToNull()
    {
        for(int i=0; i<10; i++)
            if( bullet[i].Y != 30 )
                {
                    COORD pos={bullet[i].X, bullet[i].Y+1};
                    SetPos(pos);
                    cout<<" ";
                }    
    }
    void Game::initEnemy()
    {
        COORD a={1, 1};
        COORD b={45, 15};
        for(int i=0; i<8; i++)
        {
            enemy[i].position[0] = random(a, b);
            enemy[i].position[1].X = enemy[i].position[0].X + 3;
            enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
        }
    }
    void Game::drawEnemy()
    {
        for(int i=0; i<8; i++)
            drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
    }
    void Game::drawEnemyToNull()
    {
        for(int i=0; i<8; i++)
        {
            drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
        }        
    }
    void Game::Pause()
    {
        SetPos(61,2);
        cout<<"               ";
        SetPos(61,2);
        cout<<"暂停中...";
        char c=_getch();
        while(c!='p')
            c=_getch();
        SetPos(61,2);
        cout<<"         ";
    }
    void Game::planeMove(char x)
    {
        if(x == 'a')
            if(position[1].X != 1)
                for(int i=0; i<=9; i++)
                    position[i].X -= 2;
                    
        if(x == 's')
            if(position[7].Y != 23)
                for(int i=0; i<=9; i++)
                    position[i].Y += 1;
     
        if(x == 'd')
            if(position[4].X != 47)
                for(int i=0; i<=9; i++)
                    position[i].X += 2;
     
        if(x == 'w')
            if(position[5].Y != 3)
                for(int i=0; i<=9; i++)
                    position[i].Y -= 1;
    }
    void Game::bulletMove()
    {
        for(int i=0; i<10; i++)
        {
            if( bullet[i].Y != 30)
            {
                bullet[i].Y -= 1;
                if( bullet[i].Y == 1 )
                {
                    COORD pos={bullet[i].X, bullet[i].Y+1};
                    drawThisBulletToNull( pos );
                    bullet[i].Y=30;
                }
                    
            }
        }
    }
    void Game::enemyMove()
    {
        for(int i=0; i<8; i++)
        {
            for(int j=0; j<2; j++)
                enemy[i].position[j].Y++;
     
            if(24 == enemy[i].position[1].Y)
            {
                COORD a={1, 1};
                COORD b={45, 3};
                enemy[i].position[0] = random(a, b);
                enemy[i].position[1].X = enemy[i].position[0].X + 3;
                enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
            }
        }
    }
    void Game::judgePlane()
    {
        for(int i = 0; i < 8; i++)
            for(int j=0; j<9; j++)
                if(judgeCoordInFrame(enemy[i], position[j]))
                {
                    SetPos(62, 1);
                    cout<<"坠毁";
                    drawFrame(enemy[i], '+', '+');
                    Sleep(1000);
                    GameOver();
                    break;
                }
    }
    void Game::drawThisBulletToNull( COORD c)
    {
        SetPos(c);
        cout<<" ";
    }
    void Game::drawThisEnemyToNull( Frame f )
    {
        drawFrame(f, ' ', ' ');
    }
    void Game::judgeEnemy()
    {
        for(int i = 0; i < 8; i++)
            for(int j = 0; j < 10; j++)
                if( judgeCoordInFrame(enemy[i], bullet[j]) )
                {
                    score += 5;
                    drawThisEnemyToNull( enemy[i] );
                    COORD a={1, 1};
                    COORD b={45, 3};
                    enemy[i].position[0] = random(a, b);
                    enemy[i].position[1].X = enemy[i].position[0].X + 3;
                    enemy[i].position[1].Y = enemy[i].position[0].Y + 2;                    
                    drawThisBulletToNull( bullet[j] );
                    bullet[j].Y = 30;
                }
    }
    void Game::Shoot()
    {
        for(int i=0; i<10; i++)
            if(bullet[i].Y == 30)
            {
                bullet[i].X = position[5].X;
                bullet[i].Y = position[5].Y-1;
                break;
            }
    }
    void Game::printScore()
    {
        if(score == 120 && flag_rank == 0)
        {
            rank -= 3;
            flag_rank = 1;
        }
     
        else if( score == 360 && flag_rank == 1)
        {
            rank -= 5;
            flag_rank = 2;
        }
        else if( score == 480 && flag_rank == 2)
        {
            rank -= 5;
            flag_rank = 3;
        }
        int x=rank/5;
        SetPos(60, 6);
        cout<<score;
     
        if( rank!=rankf )
        {
            SetPos(60, 7);
            if( x == 5)
                title="初级飞行员";
            else if( x == 4)
                title="中级飞行员";
            else if( x == 3)
                title="高级飞行员";
            else if( x == 2 )
                title="王牌飞行员";
            cout<<title;
        }
        rankf = rank;
    }
    void Game::Playing()
    {
        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)
                {
                    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;
    }
    int main()
    {
        srand((int)time(0));
        HideCursor();
        Game game;
        int a = drawMenu();
        if(a == 2)
            game.rank = 20;
        system("cls");
        drawPlaying();
        game.Playing();
    }
    

    看得懂的来找哦 { 哦对了,来找我的话,请->

    ->管理->中级班->查看->number two~~; }

    #include<bits/stdc++.h>
    #include<windows.h>
    #include<conio.h>
    #include<ctime>
    
    //注意,使用以下系统函数,请加上这些头文件
    
    using namespace std;
    void gotoxy(int x,int y) {
    COORD pos = {x,y};
    HANDLE hOut =GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut,pos);
    }//将光标移动到x,y点上 
    int mp[16][16]= {0},x1=0,x2=0;//地图,用来搜索五子连成的 
    void print(int x) {
    gotoxy(x,1);
    cout<<"┬";
    for(int i=2; i<=14; i++) {
    gotoxy(x,i);
    cout<<"┼";
    }
    gotoxy(x,15);
    cout<<"┴";
    }//输出棋盘的中间部分 
    void gotoc() {
    system("cls");
    gotoxy(55,10);
    cout<<"五 子 棋";
    gotoxy(56,20);
    cout<<"加载中...";
    gotoxy(55,21);
    cout<<"作者:abcde";
    for(int j=0; j<50; j++) {
    Sleep(35);
    gotoxy(j+3,15);
    cout<<" "<<j<<"%";
    gotoxy(j,15);
    cout<<"■";
    }
    for(int j=50; j<70; j++) {
    Sleep(75);
    gotoxy(j+3,15);
    cout<<" "<<j<<"%";
    gotoxy(j,15);
    cout<<"■";
    }
    for(int j=70; j<85; j++) {
    Sleep(150);
    gotoxy(j+3,15);
    cout<<" "<<j<<"%";
    gotoxy(j,15);
    cout<<"■";
    }
    for(int j=85; j<95; j++) {
    Sleep(300);
    gotoxy(j+3,15);
    cout<<" "<<j<<"%";
    gotoxy(j,15);
    cout<<"■";
    }
    for(int j=95; j<97; j++) {
    Sleep(750);
    gotoxy(j+3,15);
    cout<<" "<<j<<"%";
    gotoxy(j,15);
    cout<<"■";
    }
    for(int j=97; j<=100; j++) {
    Sleep(1000);
    gotoxy(j+3,15);
    cout<<" "<<j<<"%";
    gotoxy(j,15);
    cout<<"■";
    }
    Sleep(1000);
    system("cls");
    for(int i=0; i<100; i++) {
    for(int j=0; j<40; j++) {
    gotoxy(i,j);
    cout<<"■";
    //SetColor(rand()%10);
    }
    }
    system("cls");
    }//加载界面函数 
    int main() {
    gotoc();//加载 
    for(int i=2; i<=30; i+=2) {
    gotoxy(i,0);
    cout<<i/2;
    }//横坐标 
    for(int i=1; i<=15; i++) {
    gotoxy(0,i);
    cout<<i;
    }//纵坐标 
    gotoxy(2,1);
    cout<<"┌";
    for(int i=2; i<=14; i++) {
    gotoxy(2,i);
    cout<<"├";
    }
    gotoxy(2,15);
    cout<<"└";//输出棋盘左侧 
    for(int i=4; i<=28; i+=2) {
    print(i);
    }//用一个循环来输出棋盘中间部分 
    gotoxy(30,1);
    cout<<"┐";
    for(int i=2; i<=14; i++) {
    gotoxy(30,i);
    cout<<"┤";
    }
    gotoxy(30,15);
    cout<<"┘";//输出棋盘右侧
    bool l=0;//没什么用的flag 
    long long m=2;//这个很重要,用来判断是该白棋走还是黑棋走,每次走完++,每次判断是偶数,该白棋,是奇数,该黑棋(一般用flag判断,这是我个人喜好) 
    gotoxy(0,17);
    cout<<"游戏说明:白棋先走,落子请输入坐标,其他的不用我说了吧";//说明,一定要看 
    while(l=1) {
    gotoxy(32,16);
    int x,y;
    cin>>x>>y;//读入xy坐标 
    gotoxy(32,16);
    cout<<" ";
    if(mp[x][y]!=0) { 
    gotoxy(32,16);
    cout<<"此位置已有落子!";
    Sleep(1000);
    gotoxy(32,16);
    cout<<" ";
    continue;
    }//很重要,用来判断此位置有没有落子 
    if(x>15&&y<=15) {
    gotoxy(32,16);
    cout<<"x坐标超出棋盘范围!";
    Sleep(1000);
    gotoxy(32,16);
    cout<<" ";
    continue;
    } 
    if(y>15&&x<=15) {
    gotoxy(32,16);
    cout<<"y坐标超出棋盘范围!";
    Sleep(1000);
    gotoxy(32,16);
    cout<<" ";
    continue;
    }
    if(y>15&&x>15) {
    gotoxy(32,16);
    cout<<"x和y坐标均超出棋盘范围!";
    Sleep(1000);
    gotoxy(32,16);
    cout<<" ";
    continue;
    }//以上三个if用来判断有没有超出棋盘大小 
    gotoxy(x*2,y);
    if(m%2==0) {//是偶数,该白棋 
    cout<<"●";//输出棋子 
    mp[x][y]=1;
    //横坐标搜索有没有连成五个 
    if(mp[x+1][y]==1&&mp[x+2][y]==1&&mp[x+3][y]==1&&mp[x+4][y]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x-1][y]==1&&mp[x+1][y]==1&&mp[x+2][y]==1&&mp[x+3][y]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x-2][y]==1&&mp[x-1][y]==1&&mp[x+1][y]==1&&mp[x+2][y]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x-3][y]==1&&mp[x-2][y]==1&&mp[x-1][y]==1&&mp[x+1][y]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x-4][y]==1&&mp[x-3][y]==1&&mp[x-2][y]==1&&mp[x-1][y]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    //竖
    if(mp[x][y+1]==1&&mp[x][y+2]==1&&mp[x][y+3]==1&&mp[x][y+4]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x][y-1]==1&&mp[x][y+1]==1&&mp[x][y+2]==1&&mp[x][y+3]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x][y-2]==1&&mp[x][y-1]==1&&mp[x][y+1]==1&&mp[x][y+2]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x][y-3]==1&&mp[x][y-2]==1&&mp[x][y-1]==1&&mp[x][y+1]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x][y-4]==1&&mp[x][y-3]==1&&mp[x][y-2]==1&&mp[x][y-1]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    //斜'\'
    if(mp[x+1][y+1]==1&&mp[x+2][y+2]==1&&mp[x+3][y+3]==1&&mp[x+4][y+4]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x-1][y-1]==1&&mp[x+1][y+1]==1&&mp[x+2][y+2]==1&&mp[x+3][y+3]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x-2][y-2]==1&&mp[x-1][y-1]==1&&mp[x+1][y+1]==1&&mp[x+2][y+2]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x-3][y-3]==1&&mp[x-2][y-2]==1&&mp[x-1][y-1]==1&&mp[x+1][y+1]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x-4][y-4]==1&&mp[x-3][y-3]==1&&mp[x-2][y-2]==1&&mp[x-1][y-1]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    //斜'/'
    if(mp[x-1][y+1]==1&&mp[x-2][y+2]==1&&mp[x-3][y+3]==1&&mp[x-4][y+4]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x+1][y-1]==1&&mp[x-1][y+1]==1&&mp[x-2][y+2]==1&&mp[x-3][y+3]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x+2][y-2]==1&&mp[x+1][y-1]==1&&mp[x-1][y+1]==1&&mp[x-2][y+2]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x+3][y-3]==1&&mp[x+2][y-2]==1&&mp[x+1][y-1]==1&&mp[x-1][y+1]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    if(mp[x+4][y-4]==1&&mp[x+3][y-3]==1&&mp[x+2][y-2]==1&&mp[x+1][y-1]==1) {
    gotoxy(32,16);
    cout<<"白棋获胜!";
    return 0;
    }
    } else if(m%2==1) {//为奇数,该黑棋 
    cout<<"○";
    mp[x][y]=2;
    //横
    if(mp[x+1][y]==2&&mp[x+2][y]==2&&mp[x+3][y]==2&&mp[x+4][y]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x-1][y]==2&&mp[x+1][y]==2&&mp[x+2][y]==2&&mp[x+3][y]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x-2][y]==2&&mp[x-1][y]==2&&mp[x+1][y]==2&&mp[x+2][y]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x-3][y]==2&&mp[x-2][y]==2&&mp[x-1][y]==2&&mp[x+1][y]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x-4][y]==2&&mp[x-3][y]==2&&mp[x-2][y]==2&&mp[x-1][y]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    //竖
    if(mp[x][y+1]==2&&mp[x][y+2]==2&&mp[x][y+3]==2&&mp[x][y+4]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x][y-1]==2&&mp[x][y+1]==2&&mp[x][y+2]==2&&mp[x][y+3]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x][y-2]==2&&mp[x][y-1]==2&&mp[x][y+1]==2&&mp[x][y+2]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x][y-3]==2&&mp[x][y-2]==2&&mp[x][y-1]==2&&mp[x][y+1]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x][y-4]==2&&mp[x][y-3]==2&&mp[x][y-2]==2&&mp[x][y-1]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    //斜'\'
    if(mp[x+1][y+1]==2&&mp[x+2][y+2]==2&&mp[x+3][y+3]==2&&mp[x+4][y+4]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x-1][y-1]==2&&mp[x+1][y+1]==2&&mp[x+2][y+2]==2&&mp[x+3][y+3]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x-2][y-2]==2&&mp[x-1][y-1]==2&&mp[x+1][y+1]==2&&mp[x+2][y+2]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x-3][y-3]==2&&mp[x-2][y-2]==2&&mp[x-1][y-1]==2&&mp[x+1][y+1]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x-4][y-4]==2&&mp[x-3][y-3]==2&&mp[x-2][y-2]==2&&mp[x-1][y-1]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    //斜'/'
    if(mp[x-1][y+1]==2&&mp[x-2][y+2]==2&&mp[x-3][y+3]==2&&mp[x-4][y+4]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x+1][y-1]==2&&mp[x-1][y+1]==2&&mp[x-2][y+2]==2&&mp[x-3][y+3]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x+2][y-2]==2&&mp[x+1][y-1]==2&&mp[x-1][y+1]==2&&mp[x-2][y+2]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x+3][y-3]==2&&mp[x+2][y-2]==2&&mp[x+1][y-1]==2&&mp[x-1][y+1]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    if(mp[x+4][y-4]==2&&mp[x+3][y-3]==2&&mp[x+2][y-2]==2&&mp[x+1][y-1]==2) {
    gotoxy(32,16);
    cout<<"黑棋获胜!";
    return 0;
    }
    }
    m++;//不要忘记++m 
    }
    return 0;//这个没什么用了,不过比赛时不要忘记加哦,否则判0分 
    }
    

    找不同本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本木本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本
    找到私信有奖 ⠀⠀⠀⠀ ⣀⠀⠤⢄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⢀⣠⣶⣿⣿⠷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣦⣠⣶⣿⣿⣿⣿⣿⡦⠈⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⢸⡏⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⡿⠸⢧⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⡇⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣟⣛⣛⣿⣿⣯⣭⣛⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠤⣶⣦⣭⣉⣁⠀⠀⠀⣐⣒⣠⣤⣤⣭⣶⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠒⣹⣷⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠈⠁⠒⢢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢰⠀⠀⠀⠀⠉⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠄⠀⠀⢀⡀⢠⣿⣿⠿⠛⠛⡉⢡⠈⣧⠐⢠⣿⠀⢸⡇⠀⠍⢉⠛⠿⢿⣿⡎⣀⣤⡀⡤⢐⣶⠚⢷⡀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠴⠁⠀⠀⠈⢿⡟⢸⣿⣷⡀⢋⡀⢧⠠⠐⢿⡇⢸⡇⢨⠘⠇⠄⠀⣿⠏⣰⣤⣿⣷⢻⣿⠁⠀⠀⠙⠷⠬⡇⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠊⠁⠀⠀⠀⠀⠀⣸⣧⣿⣿⣿⣷⣈⣥⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣯⣄⣿⣿⣿⣿⣸⣿⠀⠀⠀⠀⠀⠀⠘⢦⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⠟⠛⠛⠛⠛⠻⣿⣿⣿⣿⣿⣿⠛⠛⠛⢿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⢀⣀⣱⡄⠀⠀⠀ ⠀⠀⠀⠀⢀⠄⠀⠀⠀⠀⠀⠀⠀⢀⣀⣠⣿⠏⠀⣿⣿⣿⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⡿⠃⠀⠀⠀⢺⣿⣿⣿⣿⣿⣿⢿⣃⡦⠀⢀⣴⣿⣿⣿⣿⣿⣆⠀⠀ ⠀⠀⢀⠔⠁⠀⠀⠀⠀⠀⠀⣠⠴⠚⢩⡟⠁⠀⠀⣿⣿⣿⣀⣀⣠⠟⠀⠀⢀⣿⣿⡟⠁⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⡏⠘⢹⡇⠑⣸⣿⣿⣿⣿⣿⣿⣿⡆⠀ ⠀⢠⠋⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠈⠀⠀⠀⢠⣿⣿⣿⣿⣿⠋⠀⠀⣠⣿⣿⡋⠀⠀⠐⠃⠀⠀⠈⣿⣿⣿⣿⣿⠀⠀⢻⡇⠀⠘⢿⣿⣿⣿⣿⣿⣿⣿⡀ ⢀⠃⣀⡀⢀⠀⠀⠀⢀⣤⡶⠟⠁⠀⠀⠀⠀⠀⠸⣿⣿⣿⡿⠁⠀⢀⣾⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⠀⠀⠘⡇⠀⠀⠈⠹⣿⣿⣿⣿⣿⣿⡇ ⠘⣾⣯⣤⣾⣄⠀⠀⠿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⠀⠀⠀⠛⠀⠀⢸⣿⣿⣿⣿⡿⠃⠀⠀⠘⣿⣿⣿⣿⣿⠀⠀⠀⠃⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⠇ ⠀⠹⣾⣿⣿⣿⣆⠀⠀⠻⣄⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⡇⠀⠀⠀⠀⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⡿⠀ ⠀⠀⠈⢦⠈⠙⣿⡆⠀⠀⠘⢧⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⢀⡆⠀⠀⣾⣿⣿⣿⣿⣿⣿⠃⠀ ⠀⠀⠀⠀⠱⡄⠑⠻⣴⠀⠀⠘⣧⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢀⣾⠁⠀⠀⣿⣿⣿⣿⣿⣿⠃⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠑⢆⡀⠀⠹⣇⠀⠀⠀⠀⠀⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡃⠀⠀⢰⣿⣿⣿⣿⡿⠁⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⡄⠀⢹⣷⣄⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⣠⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⢄⠈⠦⣿⣿⣿⣦⣤⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠈⢻⣿⣿⣿⣿⠿⠿⡿⠁⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠦⣘⠻⠟⠛⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⢤⣿⣿⡛⠷⠆⠜⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⢄⣀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠘⠻⢿⠗⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢰⠀⠀⠈⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣇⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⣆⠀⡞⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠾⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠃⠀⢨⣿⠀⢹⣼⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

    #include <iostream>
    #include <vector>
    #include <deque>
    #include <fstream>
    #include <algorithm>
    #include <string>
    #include <ctime>
    #include <cstdlib>
    
    #ifdef _WIN32
    #include <conio.h>
    #include <windows.h>
    #else
    #include <unistd.h>
    #include <termios.h>
    #include <sys/select.h>
    #endif
    
    using namespace std;
    
    // ======================== 全局常量/结构体 ========================
    const int WIDTH = 40;
    const int HEIGHT = 20;
    const int MAX_NAME_LEN = 12;
    const int MAX_OBSTACLE = 100;
    const int MAX_ITEMS = 5;
    const int RANK_SIZE = 10;
    const int MAX_SKIN = 4;
    const int MAX_MAPS = 5;
    const int INIT_SPEED[4] = {300, 200, 120, 70}; // 难度对应速度(ms)
    const int MIN_SPEED = 30;
    const int MAX_SNAKE_LEN = WIDTH * HEIGHT / 2;
    
    // 坐标点
    struct Point {
        int x, y;
        bool operator==(const Point& o) const { return x==o.x && y==o.y; }
    };
    
    // 枚举与道具皮肤结构
    enum Direction { UP, DOWN, LEFT, RIGHT };
    enum ItemType { SCORE_UP, SLOW, FAST, SHRINK, GROW, WARP, BAD };
    struct RankItem {
        string name;
        int score;
        string date;
    };
    bool cmpRank(const RankItem& a, const RankItem& b) {
        return a.score > b.score;
    }
    struct Skin {
        string name;
        char head, body, food, obs, item;
    };
    struct Item {
        Point pos;
        ItemType type;
        int time_left; // 剩余帧数
    };
    
    // 多地图障碍
    vector<Point> mapObstacles[] = {
        {},
        [](){ vector<Point> obs; for (int i=10; i<30; ++i) obs.push_back({i, 5}); for (int i=10; i<30; ++i) obs.push_back({i, 15}); return obs; }(),
        [](){ vector<Point> obs; for (int i=3; i<17; ++i) obs.push_back({10, i}); for (int i=3; i<17; ++i) obs.push_back({30, i}); obs.push_back({5,5}); obs.push_back({34,14}); return obs; }(),
        [](){ vector<Point> obs; for (int i=12; i<=27; ++i) obs.push_back({i, 7}); for (int i=12; i<=27; ++i) obs.push_back({i, 12}); for (int i=7; i<=12; ++i) obs.push_back({12, i}); for (int i=7; i<=12; ++i) obs.push_back({27, i}); return obs; }(),
        [](){ vector<Point> obs; for (int i=2; i<18; ++i) obs.push_back({20, i}); for (int i=20; i<35; ++i) obs.push_back({i, 10}); for (int i=5; i<35; i+=5) obs.push_back({i, i/2}); return obs; }()
    };
    // 多皮肤
    Skin skinList[MAX_SKIN] = {
        {"经典", 'O', 'o', '*', 'X', '$'},
        {"方块", '#', '=', '+', 'D', '-'},
        {"软萌", 'Q', 'U', 'S', '█', '☆'},
        {"酷炫", '&', '%', '$', 'W', 'M'},
    };
    
    // ======================== 跨平台工具函数 ========================
    
    // 清屏
    void clearScreen() {
    #ifdef _WIN32
        system("cls");
    #else
        cout << "\033[2J\033[1;1H";
    #endif
    }
    // kbhit
    bool khit() {
    #ifdef _WIN32
        return _kbhit();
    #else
        static bool initialized = false;
        if (!initialized) {
            termios term;
            tcgetattr(0, &term);
            term.c_lflag &= ~ICANON;
            tcsetattr(0, TCSANOW, &term);
            setbuf(stdin, NULL);
            initialized = true;
        }
        timeval tv = {0, 0};
        fd_set fds;
        FD_ZERO(&fds);
        FD_SET(0, &fds);
        return select(1, &fds, NULL, NULL, &tv) > 0;
    #endif
    }
    // getch
    char gech() {
    #ifdef _WIN32
        return _getch();
    #else
        char ch = 0;
        ssize_t ret = read(0, &ch, 1);
        return ch;
    #endif
    }
    // sleep ms
    void sleep_ms(int ms) {
    #ifdef _WIN32
        Sleep(ms);
    #else
        usleep(ms * 1000);
    #endif
    }
    // 当前日期
    string getDateStr() {
        time_t t = time(0);
        tm* now = localtime(&t);
        char buf[20];
        snprintf(buf, sizeof(buf), "%04d-%02d-%02d", now->tm_year+1900, now->tm_mon+1, now->tm_mday);
        return buf;
    }
    
    // ======================== SnakeGame类 ========================
    class SnakeGame {
        vector<vector<char>> map;
        deque<Point> snake;
        vector<Point> obstacles;
        vector<Item> items;
        Point food;
        Direction dir;
        int score;
        bool alive;
        int level;
        int mapChoice, skinChoice;
        int sleepTime;
        int frame, itemTimer;
        vector<RankItem> ranklist;
        string playerName;
        int growPending;
        bool loadedSave;
    
    public:
        SnakeGame() { reset(); }
    
        void reset() {
            map = vector<vector<char>>(HEIGHT, vector<char>(WIDTH, ' '));
            dir = RIGHT;
            snake.clear();
            snake.push_back({WIDTH/2, HEIGHT/2});
            score = 0;
            alive = true;
            level = 2;
            sleepTime = INIT_SPEED[level];
            food = {0, 0};
            items.clear();
            obstacles.clear();
            growPending = 0;
            frame = 0; itemTimer = 0;
            loadedSave = false;
        }
    
        void run() {
            welcomeScreen();
            while (true) {
                int op = mainMenu();
                if (op == 1) {
                    selectLevel();
                    selectMap();
                    selectSkin();
                    newGame();
                    gameLoop();
                    if (!loadedSave) tryInsertRank();
                    showGameOver();
                } else if (op == 2) {
                    showRanklist();
                } else if (op == 3) {
                    if (loadSave()) {
                        loadedSave = true;
                        gameLoop();
                        tryInsertRank();
                        showGameOver();
                    }
                } else if (op == 4) {
                    showHelp();
                } else {
                    break;
                }
            }
            clearScreen();
            cout << "感谢游玩!" << endl;
        }
    
        // ====== 主菜单及参数选择 ======
        void welcomeScreen() {
            clearScreen();
            cout << "=================================================\n";
            cout << "         贪吃蛇终极字符大作  v1.0\n";
            cout << "         by yujingyan, " << getDateStr() << endl;
            cout << "=================================================\n";
            cout << "请输入你的昵称(≤12字符,无空格):";
            cin >> playerName;
            if(playerName=="yujingyan") cout<<"原来是游戏创作者,快来试试这款游戏!";
    		else cout<<"玩家你好"; 
    		Sleep(2500);
            if (playerName.length() > MAX_NAME_LEN) playerName = playerName.substr(0, MAX_NAME_LEN);
        }
        int mainMenu() {
            while (1) {
                clearScreen();
                cout << "=====  1. 新游戏   2. 排行榜   3. 继续存档   4. 帮助   5. 退出  =====\n";
                cout << "请输入操作编号:";
                int op; cin >> op;
                if (op>=1 && op<=5) return op;
            }
        }
        void selectLevel() {
            clearScreen();
            cout << "请选择难度等级:\n";
            cout << "1. 简单(慢) 2. 普通(推荐) 3. 较难 4. 地狱\n";
            int l = 2; cin >> l;
            if (l < 1 || l > 4) l = 2;
            level = l-1;
            sleepTime = INIT_SPEED[level];
        }
        void selectMap() {
            clearScreen();
            cout << "请选择地图关卡:\n";
            cout << "1. 空白 2. 双横线 3. 双竖线 4. 环形 5. 迷宫\n";
            int m = 1; cin >> m;
            if (m < 1 || m > MAX_MAPS) m = 1;
            mapChoice = m-1;
            obstacles = mapObstacles[mapChoice];
        }
        void selectSkin() {
            clearScreen();
            cout << "请选择蛇皮肤:\n";
            for (int i=0;i<MAX_SKIN;++i)
                cout << i+1 << ". " << skinList[i].name << "  ";
            cout << endl;
            int s = 1; cin >> s;
            if (s<1 || s>MAX_SKIN) s=1;
            skinChoice = s-1;
            cout<<skinList[skinChoice].name<<skinList[skinChoice].body;
           Sleep(5000);
        }
        void newGame() {
            reset();
            snake.clear();
            dir = RIGHT;
            snake.push_back({WIDTH/2, HEIGHT/2});
            score = 0; alive = true;
            food = {0, 0};
            growPending = 0;
            obstacles = mapObstacles[mapChoice];
            items.clear(); frame = 0; itemTimer = 0;
            loadedSave = false;
            placeFood();
        }
    
        // ====== 游戏流程核心 ======
        void placeFood() {
            srand(time(0) + rand());
            while (true) {
                int fx = rand() % (WIDTH-2) + 1, fy = rand() % (HEIGHT-2) + 1;
                Point p = {fx, fy};
                bool bad = false;
                for (auto& s : snake) if (s == p) bad = true;
                for (auto& o : obstacles) if (o == p) bad = true;
                for (auto& i : items) if (i.pos == p) bad = true;
                if (!bad) { food = p; break; }
            }
        }
        void placeItem() {
            if ((int)items.size() >= MAX_ITEMS) return;
            srand(time(0) + rand());
            int fx = rand() % (WIDTH-2) + 1, fy = rand() % (HEIGHT-2) + 1;
            Point p = {fx, fy};
            for (auto& s : snake) if (s == p) return;
            if (p == food) return;
            for (auto& o : obstacles) if (o == p) return;
            ItemType t = (ItemType)(rand()%7);
            items.push_back({p, t, 80 + rand()%50});
        }
        void refreshItems() {
            ++itemTimer;
            if (itemTimer % 20 == 0) placeItem();
            for (auto it = items.begin(); it != items.end(); ) {
                it->time_left--;
                if (it->time_left <= 0) it = items.erase(it);
                else ++it;
            }
        }
        void readInput() {
            if (!kbhit()) return;
            char ch = getch();
            if (ch == 'w' || ch == 'W' || ch == 72) { if (dir != DOWN) dir = UP; }
            else if (ch == 's' || ch == 'S' || ch == 80) { if (dir != UP) dir = DOWN; }
            else if (ch == 'a' || ch == 'A' || ch == 75) { if (dir != RIGHT) dir = LEFT; }
            else if (ch == 'd' || ch == 'D' || ch == 77) { if (dir != LEFT) dir = RIGHT; }
            else if (ch == 'p' || ch == 'P') saveGame();
            else if (ch == 'q' || ch == 'Q') alive = false;
        }
        bool crash(const Point& p) {
            if (p.x <= 0 || p.x >= WIDTH-1 || p.y <= 0 || p.y >= HEIGHT-1) return true;
            for (auto& s : snake) if (p == s) return true;
            for (auto& o : obstacles) if (p == o) return true;
            return false;
        }
        void handleItem(const Point& head) {
            for (size_t i=0; i<items.size(); ++i) {
                if (items[i].pos == head) {
                    ItemType t = items[i].type;
                    switch (t) {
                        case SCORE_UP: score += 50; break;
                        case SLOW: sleepTime = min(sleepTime+40, 400); break;
                        case FAST: sleepTime = max(sleepTime-30, MIN_SPEED); break;
                        case SHRINK: if (snake.size()>3) for (int i=0; i<3; ++i) if (!snake.empty()) snake.pop_back(); break;
                        case GROW: growPending += 4; break;
                        case WARP: {
                            for (int tries=0; tries<100; ++tries) {
                                int nx = rand()%(WIDTH-2)+1, ny = rand()%(HEIGHT-2)+1;
                                Point np{nx, ny};
                                if (!crash(np)) { snake.push_front(np); snake.pop_front(); break; }
                            }
                            break;
                        }
                        case BAD: score = max(0, score-40); break;
                    }
                    items.erase(items.begin()+i);
                    break;
                }
            }
        }
        void moveSnake() {
            Point head = snake.front();
            switch(dir) {
                case UP: --head.y; break;
                case DOWN: ++head.y; break;
                case LEFT: --head.x; break;
                case RIGHT: ++head.x; break;
            }
            if (crash(head)) { alive = false; return; }
            snake.push_front(head);
            if (head == food) {
                score += 10;
                growPending += 2;
                placeFood();
            }
            handleItem(head);
            if (growPending > 0) --growPending;
            else snake.pop_back();
            if (snake.size() > MAX_SNAKE_LEN) snake.pop_back();
        }
        void draw() {
            clearScreen();
            const Skin& sk = skinList[skinChoice];
            vector<vector<char>> display(HEIGHT, vector<char>(WIDTH, ' '));
            for (int i=0;i<HEIGHT;++i) display[i][0] = display[i][WIDTH-1] = '#';
            for (int i=0;i<WIDTH;++i) display[0][i] = display[HEIGHT-1][i] = '#';
            for (auto& o : obstacles) display[o.y][o.x] = sk.obs;
            display[food.y][food.x] = sk.food;
            bool first = true;
            for (auto& s : snake) {
                if (first) display[s.y][s.x] = sk.head, first = false;
                else display[s.y][s.x] = sk.body;
            }
            for (auto& it : items) {
                char c = sk.item;
                switch(it.type) {
                    case SCORE_UP: c = '$'; break;
                    case SLOW: c = '~'; break;
                    case FAST: c = '!'; break;
                    case SHRINK: c = '-'; break;
                    case GROW: c = '+'; break;
                    case WARP: c = '@'; break;
                    case BAD: c = 'Z'; break;
                }
                display[it.pos.y][it.pos.x] = c;
            }
            for (int y=0;y<HEIGHT;++y) {
                for (int x=0;x<WIDTH;++x) cout << display[y][x];
                cout << endl;
            }
            Sleep(5000); 
            cout << "玩家: " << playerName << "  \n分数: " << score << "  \n长度: " << snake.size()
                 << " \n 难度: " << (level+1) << "  \n皮肤: " << skinList[skinChoice].name;
            cout << "  [p=存档 q=退出]\n";
            cout << "道具符号:$加分 ~减速 !加速 -缩短 +变长 @传送 Z扣分\n";
        }
        void gameLoop() {
            while (alive) {
                ++frame;
                draw();
                readInput();
                moveSnake();
                refreshItems();
                sleep_ms(sleepTime);
            }
        }
    
        // ====== 排行榜与存档 ======
        string rankFile() { return "ranklist.txt"; }
        void loadRanklist() {
            ranklist.clear();
            ifstream fin(rankFile());
            string n, d; int s;
            while (fin >> n >> s >> d) ranklist.push_back({n, s, d});
            sort(ranklist.begin(), ranklist.end(), cmpRank);
            if ((int)ranklist.size() > RANK_SIZE) ranklist.resize(RANK_SIZE);
        }
        void saveRanklist() {
            ofstream fout(rankFile());
            for (auto& r : ranklist)
                fout << r.name << " " << r.score << " " << r.date << endl;
        }
        void tryInsertRank() {
            loadRanklist();
            RankItem me{playerName, score, getDateStr()};
            ranklist.push_back(me);
            sort(ranklist.begin(), ranklist.end(), cmpRank);
            if ((int)ranklist.size() > RANK_SIZE) ranklist.resize(RANK_SIZE);
            saveRanklist();
        }
        void showRanklist() {
            loadRanklist();
            clearScreen();
            cout << "========= 排行榜 Top" << RANK_SIZE << " =========\n";
            for (size_t i=0; i<ranklist.size(); ++i)
                cout << i+1 << ". " << ranklist[i].name << "  分数: " << ranklist[i].score << "  日期: " << ranklist[i].date << endl;
            cout << "按回车返回主菜单...";
            cin.ignore();
            cin.get();
        }
        void showGameOver() {
            clearScreen();
            cout << "=========== 游戏结束 ===========\n";
            cout << "玩家:" << playerName << "\n分数:" << score << "\n长度:" << snake.size() << endl;
            cout << "按回车键返回主菜单..." << endl;
            cin.ignore();
            cin.get();
        }
        string saveFile() { return "snake.sav"; }
        void saveGame() {
            ofstream fout(saveFile(), ios::binary);
            fout << playerName << " " << score << " " << level << " " << mapChoice << " " << skinChoice << " " << sleepTime << " " << growPending << endl;
            fout << snake.size() << " ";
            for (auto& s : snake) fout << s.x << " " << s.y << " ";
            fout << obstacles.size() << " ";
            for (auto& o : obstacles) fout << o.x << " " << o.y << " ";
            fout << food.x << " " << food.y << " ";
            fout << items.size() << " ";
            for (auto& it : items) fout << (int)it.type << " " << it.pos.x << " " << it.pos.y << " " << it.time_left << " ";
            fout.close();
            clearScreen();
            cout << "游戏已存档,随时可在主菜单“继续存档”继续游玩!\n";
            sleep_ms(1200);
        }
        bool loadSave() {
            ifstream fin(saveFile(), ios::binary);
            if (!fin) return false;
            reset();
            fin >> playerName >> score >> level >> mapChoice >> skinChoice >> sleepTime >> growPending;
            size_t sl; fin >> sl; snake.clear();
            for (size_t i=0; i<sl; ++i) { int x, y; fin >> x >> y; snake.push_back({x,y}); }
            size_t ol; fin >> ol; obstacles.clear();
            for (size_t i=0; i<ol; ++i) { int x, y; fin >> x >> y; obstacles.push_back({x,y}); }
            fin >> food.x >> food.y;
            size_t il; fin >> il; items.clear();
            for (size_t i=0; i<il; ++i) {
                int tp, x, y, tl; fin >> tp >> x >> y >> tl;
                items.push_back({{x,y}, (ItemType)tp, tl});
            }
            alive = true;
            fin.close();
            return true;
        }
        void showHelp() {
            clearScreen();
            cout << "============== 帮助说明 ==============\n";
            cout << "方向控制:w/s/a/d 或 方向键\n";
            cout << "p=随时存档 q=结束游戏/强制退出\n";
            cout << "排行榜/难度/关卡/皮肤随心选\n";
            cout << "游戏内多种道具,效果丰富有趣!\n";
            cout << "存档后可在主菜单“继续存档”读档\n";
            cout << "祝你游戏愉快!\n";
            cout << "按回车返回主菜单...\n";
            cin.ignore();
            cin.get();
        }
    };
    
    // ======================== 主函数 ========================
    int main() {
        SnakeGame game;
        game.run();
        return 0;
    }
    
    
    
    
    
    
  • 通过的题目

  • 最近活动

  • 最近编写的题解

题目标签

703
16
洛谷
13
分支结构
8
列表
6
动态规划
6
python
5
顺序结构
5
NOIP全国联赛普及组
5
图结构
5
循环结构
4
for循环
3
while
3
ACM入门-输入输出练习
3
输入输出练习
3
2002年NOIP全国联赛普及组
3
搜索
3
模拟
3
树结构
3
生成树
3
C++
2