问题标题: 酷町堂:求游戏代码!!!

0
1

0
已采纳
何沐阳
何沐阳
初级光能
初级光能

{

 

    COORD position[2];

 

    int flag;

 

}Frame;

 

void SetPos(COORD a)

 

{

 

    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);

 

    SetConsoleCursorPosition(out, a);

 

}

 

void SetPos(int i, int j)

 

{

 

    COORD pos={i, j};

 

    SetPos(pos);

 

}

 

void HideCursor()

 

{

 

    CONSOLE_CURSOR_INFO cursor_info = {1, 0};

 

    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

 

}

 

 

 

//把第y行,[x1, x2) 之间的坐标填充为 ch

 

void drawRow(int y, int x1, int x2, char ch)

 

{

 

    SetPos(x1,y);

 

    for(int i = 0; i <= (x2-x1); i++) cout<<ch;

 

}

 

 

 

//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch

 

void drawRow(COORD a, COORD b, char ch)

 

{

 

    if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch);

 

    else {

 

        SetPos(0, 25);

 

        cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";

 

        system("pause");

 

    }

 

}

 

 

 

//把第x列,[y1, y2] 之间的坐标填充为 ch

 

void drawCol(int x, int y1, int y2, char ch)

 

{

 

    int y=y1;

 

    while(y!=y2+1) {

 

        SetPos(x, y);

 

        cout<<ch;

 

        y++;

 

    }

 

}

 

 

 

//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch

 

void drawCol(COORD a, COORD b, char ch)

 

{

 

    if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch);

 

    else {

 

        SetPos(0, 25);

 

        cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";

 

        system("pause");

 

    }

 

}

 

 

 

//左上角坐标、右下角坐标、用row填充行、用col填充列

 

void drawFrame(COORD a, COORD  b, char row, char col)

 

{

 

    drawRow(a.Y, a.X+1, b.X-1, row);

 

    drawRow(b.Y, a.X+1, b.X-1, row);

 

    drawCol(a.X, a.Y+1, b.Y-1, col);

 

    drawCol(b.X, a.Y+1, b.Y-1, col);

 

}

 

 

 

void drawFrame(int x1, int y1, int x2, int y2, char row, char col)

 

{

 

    COORD a={x1, y1};

 

    COORD b={x2, y2};

 

    drawFrame(a, b, row, col);

 

}

 

 

 

void drawFrame(Frame frame, char row, char col)

 

{

 

    COORD a = frame.position[0];

 

    COORD b = frame.position[1];

 

    drawFrame(a, b, row, col);

 

}

 

 

 

void drawPlaying()

 

{

 

    drawFrame(0, 0, 48, 24, '=', '|');//    draw map frame;

 

    drawFrame(49, 0, 79, 4, '-', '|');//        draw output frame

 

    drawFrame(49, 4, 79, 9, '-', '|');//        draw score frame

 

    drawFrame(49, 9, 79, 20, '-', '|');//   draw operate frame

 

    drawFrame(49, 20, 79, 24, '-', '|');//  draw other message frame

 

    SetPos(52, 6);

 

    cout<<"得分:";

 

    SetPos(52, 7);

 

    cout<<"称号:";

 

    SetPos(52,10);

 

    cout<<"操作方式:";

 

    SetPos(52,12);

 

    cout<<"  a,s,d,w 控制战机移动。";

 

    SetPos(52,14);

 

    cout<<"  p 暂停游戏。";

 

    SetPos(52,16);

 

    cout<<"  e 退出游戏。";

 

}

 

 

 

//在[a, b)之间产生一个随机整数

 

int random(int a, int b)

 

{

 

    int c=(rand() % (a-b))+ a;

 

    return c;

 

}

 

 

 

//在两个坐标包括的矩形框内随机产生一个坐标

 

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. 牛X的敌人";

 

    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<<"牛X的敌人:";

 

                   SetPos(51, 13);

 

                   cout<<"牛X的敌人移动速度较快。";

 

                }

 

                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<<"P掉了";

 

                drawFrame(enemy[i], '+', '+');

 

                Sleep(1000);

 

                GameOver();

 

                break;

 

            }

 

}

 

 

 

void Game::drawThisBulletToNull( COORD c)

 

{

 

    SetPos(c);

 

    cout<<" ";

 

}

 

 

 

void Game::drawThisEnemyToNull( Frame f )

 

{

 

    drawFrame(f, ' ', ' ');

 

}

 

 

 

void Game::judgeEnemy()

 

{

 

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

 

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

 

            if( judgeCoordInFrame(enemy[i], bullet[j]) )

 

            {

 

                score += 5;

 

                drawThisEnemyToNull( enemy[i] );

 

                COORD a={1, 1};

 

                COORD b={45, 3};

 

                enemy[i].position[0] = random(a, b);

 

                enemy[i].position[1].X = enemy[i].position[0].X + 3;

 

                enemy[i].position[1].Y = enemy[i].position[0].Y + 2;                   

 

                drawThisBulletToNull( bullet[j] );

 

                bullet[j].Y = 30;

 

            }

 

}

 

 

 

void Game::Shoot()

 

{

 

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

 

        if(bullet[i].Y == 30)

 

        {

 

            bullet[i].X = position[5].X;

 

            bullet[i].Y = position[5].Y-1;

 

            break;

 

        }

 

}

 

 

 

void Game::printScore()

 

{

 

    if(score == 120 && flag_rank == 0)

 

    {

 

        rank -= 3;

 

        flag_rank = 1;

 

    }

 

 

 

    else if( score == 360 && flag_rank == 1)

 

    {

 

        rank -= 5;

 

        flag_rank = 2;

 

    }

 

    else if( score == 480 && flag_rank == 2)

 

    {

 

        rank -= 5;

 

        flag_rank = 3;

 

    }

 

    int x=rank/5;

 

    SetPos(60, 6);

 

    cout<<score;

 

 

 

    if( rank!=rankf )

 

    {

 

        SetPos(60, 7);

 

        if( x == 5)

 

            title="";

 

        else if( x == 4)

 

            title="辣鸡飞行员";

 

        else if( x == 3)

 

            title="白银飞行员";

 

        else if( x == 2 )

 

            title="黄金飞行员";

            else if(x==1)

            title="哎呦,不错哦";

            else if(x=0)

            title="这是疯啦!?";

 

        cout<<title;

 

    }

 

    rankf = rank;

 

}

 

 

 

void Game::Playing()

 

{

 

 

 

 

    drawEnemy();

 

    drawPlane();

 

 

 

    int flag_bullet = 0;

 

    int flag_enemy = 0;

 

 

 

    while(1)

 

    {

 

        Sleep(8);

 

        if(_kbhit())

 

        {

 

            char x = _getch();

 

            if ('a' == x || 's' == x || 'd' == x || 'w' == x)

 

            {

 

                drawPlaneToNull();

 

                planeMove(x);

 

                drawPlane();

 

                judgePlane();

 

            }          

 

            else if ('p' == x)

 

                Pause();

 

            else if( 'k' == x)

 

                Shoot();

 

            else if( 'e' == x)

 

            {

 

                //CloseHandle(MFUN);

 

                GameOver();

 

                break;

 

            }

 

 

 

        }

 

        /* 处理子弹 */

 

        if( 0 == flag_bullet )

 

        {

 

            bulletMove();

 

            drawBulletToNull();

 

            drawBullet();

 

            judgeEnemy();

 

        }          

 

        flag_bullet++;

 

        if( 5 == flag_bullet )

 

            flag_bullet = 0;

 

 

 

        /* 处理敌人 */

 

        if( 0 == flag_enemy )

 

        {

 

            drawEnemyToNull();

 

            enemyMove();           

 

            drawEnemy();

 

            judgePlane();

 

        }

 

        flag_enemy++;

 

        if( flag_enemy >= rank )

 

            flag_enemy = 0;

 

 

 

        /* 输出得分 */

 

        printScore();

 

    }

 

}

 

 

 

void Game::GameOver()

 

{

 

    system("cls");             

 

    COORD p1={28,9};

 

    COORD p2={53,15};

 

    drawFrame(p1, p2, '=', '|');

 

    SetPos(36,12);

 

    string str="Game Over!";

 

    for(int i=0; i<str.size(); i++)

 

    {

 

        Sleep(80);

 

        cout<<str[i];

 

    }

 

    Sleep(1000);

 

    system("cls");

 

    drawFrame(p1, p2, '=', '|');

 

    SetPos(31, 11);

 

    cout<<"击落敌机:"<<score/5<<" 架";

 

    SetPos(31, 12);

 

    cout<<"得  分:"<<score<<" 分";

 

    SetPos(31, 13);

 

    cout<<"获得称号:"<<title;

 

    SetPos(30, 16);

 

    Sleep(1000);

 

    cout<<"继续? 是(y)| 否(n)";

 

as:

 

    char x=_getch();

 

    if (x == 'n')

 

        exit(0);

 

    else if (x == 'y')

 

    {

 

        system("cls");

 

        Game game;

 

        int a = drawMenu();

 

        if(a == 2)

 

            game.rank = 20;

 

        system("cls");

 

        drawPlaying();

 

        game.Playing();

 

    }

 

    else goto as;

 

}

 

 

 

/*================== the main function ==================*/

 

int main()

 

{

 

    //游戏准备

 

    srand((int)time(0));    //随机种子

 

    HideCursor();   //隐藏光标

 

 

 

    Game game;

 

    int a = drawMenu();

 

    if(a == 2)

 

        game.rank = 20;

 

    system("cls");

 

    drawPlaying();

 

    game.Playing();

 

}

{

 

    COORD position[2];

 

    int flag;

 

}Frame;

 

void SetPos(COORD a)

 

{

 

    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);

 

    SetConsoleCursorPosition(out, a);

 

}

 

void SetPos(int i, int j)

 

{

 

    COORD pos={i, j};

 

    SetPos(pos);

 

}

 

void HideCursor()

 

{

 

    CONSOLE_CURSOR_INFO cursor_info = {1, 0};

 

    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

 

}

 

 

 

//把第y行,[x1, x2) 之间的坐标填充为 ch

 

void drawRow(int y, int x1, int x2, char ch)

 

{

 

    SetPos(x1,y);

 

    for(int i = 0; i <= (x2-x1); i++) cout<<ch;

 

}

 

 

 

//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch

 

void drawRow(COORD a, COORD b, char ch)

 

{

 

    if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch);

 

    else {

 

        SetPos(0, 25);

 

        cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";

 

        system("pause");

 

    }

 

}

 

 

 

//把第x列,[y1, y2] 之间的坐标填充为 ch

 

void drawCol(int x, int y1, int y2, char ch)

 

{

 

    int y=y1;

 

    while(y!=y2+1) {

 

        SetPos(x, y);

 

        cout<<ch;

 

        y++;

 

    }

 

}

 

 

 

//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch

 

void drawCol(COORD a, COORD b, char ch)

 

{

 

    if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch);

 

    else {

 

        SetPos(0, 25);

 

        cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";

 

        system("pause");

 

    }

 

}

 

 

 

//左上角坐标、右下角坐标、用row填充行、用col填充列

 

void drawFrame(COORD a, COORD  b, char row, char col)

 

{

 

    drawRow(a.Y, a.X+1, b.X-1, row);

 

    drawRow(b.Y, a.X+1, b.X-1, row);

 

    drawCol(a.X, a.Y+1, b.Y-1, col);

 

    drawCol(b.X, a.Y+1, b.Y-1, col);

 

}

 

 

 

void drawFrame(int x1, int y1, int x2, int y2, char row, char col)

 

{

 

    COORD a={x1, y1};

 

    COORD b={x2, y2};

 

    drawFrame(a, b, row, col);

 

}

 

 

 

void drawFrame(Frame frame, char row, char col)

 

{

 

    COORD a = frame.position[0];

 

    COORD b = frame.position[1];

 

    drawFrame(a, b, row, col);

 

}

 

 

 

void drawPlaying()

 

{

 

    drawFrame(0, 0, 48, 24, '=', '|');//    draw map frame;

 

    drawFrame(49, 0, 79, 4, '-', '|');//        draw output frame

 

    drawFrame(49, 4, 79, 9, '-', '|');//        draw score frame

 

    drawFrame(49, 9, 79, 20, '-', '|');//   draw operate frame

 

    drawFrame(49, 20, 79, 24, '-', '|');//  draw other message frame

 

    SetPos(52, 6);

 

    cout<<"得分:";

 

    SetPos(52, 7);

 

    cout<<"称号:";

 

    SetPos(52,10);

 

    cout<<"操作方式:";

 

    SetPos(52,12);

 

    cout<<"  a,s,d,w 控制战机移动。";

 

    SetPos(52,14);

 

    cout<<"  p 暂停游戏。";

 

    SetPos(52,16);

 

    cout<<"  e 退出游戏。";

 

}

 

 

 

//在[a, b)之间产生一个随机整数

 

int random(int a, int b)

 

{

 

    int c=(rand() % (a-b))+ a;

 

    return c;

 

}

 

 

 

//在两个坐标包括的矩形框内随机产生一个坐标

 

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. 牛X的敌人";

 

    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<<"牛X的敌人:";

 

                   SetPos(51, 13);

 

                   cout<<"牛X的敌人移动速度较快。";

 

                }

 

                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<<"P掉了";

 

                drawFrame(enemy[i], '+', '+');

 

                Sleep(1000);

 

                GameOver();

 

                break;

 

            }

 

}

 

 

 

void Game::drawThisBulletToNull( COORD c)

 

{

 

    SetPos(c);

 

    cout<<" ";

 

}

 

 

 

void Game::drawThisEnemyToNull( Frame f )

 

{

 

    drawFrame(f, ' ', ' ');

 

}

 

 

 

void Game::judgeEnemy()

 

{

 

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

 

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

 

            if( judgeCoordInFrame(enemy[i], bullet[j]) )

 

            {

 

                score += 5;

 

                drawThisEnemyToNull( enemy[i] );

 

                COORD a={1, 1};

 

                COORD b={45, 3};

 

                enemy[i].position[0] = random(a, b);

 

                enemy[i].position[1].X = enemy[i].position[0].X + 3;

 

                enemy[i].position[1].Y = enemy[i].position[0].Y + 2;                   

 

                drawThisBulletToNull( bullet[j] );

 

                bullet[j].Y = 30;

 

            }

 

}

 

 

 

void Game::Shoot()

 

{

 

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

 

        if(bullet[i].Y == 30)

 

        {

 

            bullet[i].X = position[5].X;

 

            bullet[i].Y = position[5].Y-1;

 

            break;

 

        }

 

}

 

 

 

void Game::printScore()

 

{

 

    if(score == 120 && flag_rank == 0)

 

    {

 

        rank -= 3;

 

        flag_rank = 1;

 

    }

 

 

 

    else if( score == 360 && flag_rank == 1)

 

    {

 

        rank -= 5;

 

        flag_rank = 2;

 

    }

 

    else if( score == 480 && flag_rank == 2)

 

    {

 

        rank -= 5;

 

        flag_rank = 3;

 

    }

 

    int x=rank/5;

 

    SetPos(60, 6);

 

    cout<<score;

 

 

 

    if( rank!=rankf )

 

    {

 

        SetPos(60, 7);

 

        if( x == 5)

 

            title="";

 

        else if( x == 4)

 

            title="辣鸡飞行员";

 

        else if( x == 3)

 

            title="白银飞行员";

 

        else if( x == 2 )

 

            title="黄金飞行员";

            else if(x==1)

            title="哎呦,不错哦";

            else if(x=0)

            title="这是疯啦!?";

 

        cout<<title;

 

    }

 

    rankf = rank;

 

}

 

 

 

void Game::Playing()

 

{

 

 

 

 

    drawEnemy();

 

    drawPlane();

 

 

 

    int flag_bullet = 0;

 

    int flag_enemy = 0;

 

 

 

    while(1)

 

    {

 

        Sleep(8);

 

        if(_kbhit())

 

        {

 

            char x = _getch();

 

            if ('a' == x || 's' == x || 'd' == x || 'w' == x)

 

            {

 

                drawPlaneToNull();

 

                planeMove(x);

 

                drawPlane();

 

                judgePlane();

 

            }          

 

            else if ('p' == x)

 

                Pause();

 

            else if( 'k' == x)

 

                Shoot();

 

            else if( 'e' == x)

 

            {

 

                //CloseHandle(MFUN);

 

                GameOver();

 

                break;

 

            }

 

 

 

        }

 

        /* 处理子弹 */

 

        if( 0 == flag_bullet )

 

        {

 

            bulletMove();

 

            drawBulletToNull();

 

            drawBullet();

 

            judgeEnemy();

 

        }          

 

        flag_bullet++;

 

        if( 5 == flag_bullet )

 

            flag_bullet = 0;

 

 

 

        /* 处理敌人 */

 

        if( 0 == flag_enemy )

 

        {

 

            drawEnemyToNull();

 

            enemyMove();           

 

            drawEnemy();

 

            judgePlane();

 

        }

 

        flag_enemy++;

 

        if( flag_enemy >= rank )

 

            flag_enemy = 0;

 

 

 

        /* 输出得分 */

 

        printScore();

 

    }

 

}

 

 

 

void Game::GameOver()

 

{

 

    system("cls");             

 

    COORD p1={28,9};

 

    COORD p2={53,15};

 

    drawFrame(p1, p2, '=', '|');

 

    SetPos(36,12);

 

    string str="Game Over!";

 

    for(int i=0; i<str.size(); i++)

 

    {

 

        Sleep(80);

 

        cout<<str[i];

 

    }

 

    Sleep(1000);

 

    system("cls");

 

    drawFrame(p1, p2, '=', '|');

 

    SetPos(31, 11);

 

    cout<<"击落敌机:"<<score/5<<" 架";

 

    SetPos(31, 12);

 

    cout<<"得  分:"<<score<<" 分";

 

    SetPos(31, 13);

 

    cout<<"获得称号:"<<title;

 

    SetPos(30, 16);

 

    Sleep(1000);

 

    cout<<"继续? 是(y)| 否(n)";

 

as:

 

    char x=_getch();

 

    if (x == 'n')

 

        exit(0);

 

    else if (x == 'y')

 

    {

 

        system("cls");

 

        Game game;

 

        int a = drawMenu();

 

        if(a == 2)

 

            game.rank = 20;

 

        system("cls");

 

        drawPlaying();

 

        game.Playing();

 

    }

 

    else goto as;

 

}

 

 

 

/*================== the main function ==================*/

 

int main()

 

{

 

    //游戏准备

 

    srand((int)time(0));    //随机种子

 

    HideCursor();   //隐藏光标

 

 

 

    Game game;

 

    int a = drawMenu();

 

    if(a == 2)

 

        game.rank = 20;

 

    system("cls");

 

    drawPlaying();

 

    game.Playing();

 

}

{

 

    COORD position[2];

 

    int flag;

 

}Frame;

 

void SetPos(COORD a)

 

{

 

    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);

 

    SetConsoleCursorPosition(out, a);

 

}

 

void SetPos(int i, int j)

 

{

 

    COORD pos={i, j};

 

    SetPos(pos);

 

}

 

void HideCursor()

 

{

 

    CONSOLE_CURSOR_INFO cursor_info = {1, 0};

 

    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

 

}

 

 

 

//把第y行,[x1, x2) 之间的坐标填充为 ch

 

void drawRow(int y, int x1, int x2, char ch)

 

{

 

    SetPos(x1,y);

 

    for(int i = 0; i <= (x2-x1); i++) cout<<ch;

 

}

 

 

 

//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch

 

void drawRow(COORD a, COORD b, char ch)

 

{

 

    if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch);

 

    else {

 

        SetPos(0, 25);

 

        cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";

 

        system("pause");

 

    }

 

}

 

 

 

//把第x列,[y1, y2] 之间的坐标填充为 ch

 

void drawCol(int x, int y1, int y2, char ch)

 

{

 

    int y=y1;

 

    while(y!=y2+1) {

 

        SetPos(x, y);

 

        cout<<ch;

 

        y++;

 

    }

 

}

 

 

 

//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch

 

void drawCol(COORD a, COORD b, char ch)

 

{

 

    if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch);

 

    else {

 

        SetPos(0, 25);

 

        cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";

 

        system("pause");

 

    }

 

}

 

 

 

//左上角坐标、右下角坐标、用row填充行、用col填充列

 

void drawFrame(COORD a, COORD  b, char row, char col)

 

{

 

    drawRow(a.Y, a.X+1, b.X-1, row);

 

    drawRow(b.Y, a.X+1, b.X-1, row);

 

    drawCol(a.X, a.Y+1, b.Y-1, col);

 

    drawCol(b.X, a.Y+1, b.Y-1, col);

 

}

 

 

 

void drawFrame(int x1, int y1, int x2, int y2, char row, char col)

 

{

 

    COORD a={x1, y1};

 

    COORD b={x2, y2};

 

    drawFrame(a, b, row, col);

 

}

 

 

 

void drawFrame(Frame frame, char row, char col)

 

{

 

    COORD a = frame.position[0];

 

    COORD b = frame.position[1];

 

    drawFrame(a, b, row, col);

 

}

 

 

 

void drawPlaying()

 

{

 

    drawFrame(0, 0, 48, 24, '=', '|');//    draw map frame;

 

    drawFrame(49, 0, 79, 4, '-', '|');//        draw output frame

 

    drawFrame(49, 4, 79, 9, '-', '|');//        draw score frame

 

    drawFrame(49, 9, 79, 20, '-', '|');//   draw operate frame

 

    drawFrame(49, 20, 79, 24, '-', '|');//  draw other message frame

 

    SetPos(52, 6);

 

    cout<<"得分:";

 

    SetPos(52, 7);

 

    cout<<"称号:";

 

    SetPos(52,10);

 

    cout<<"操作方式:";

 

    SetPos(52,12);

 

    cout<<"  a,s,d,w 控制战机移动。";

 

    SetPos(52,14);

 

    cout<<"  p 暂停游戏。";

 

    SetPos(52,16);

 

    cout<<"  e 退出游戏。";

 

}

 

 

 

//在[a, b)之间产生一个随机整数

 

int random(int a, int b)

 

{

 

    int c=(rand() % (a-b))+ a;

 

    return c;

 

}

 

 

 

//在两个坐标包括的矩形框内随机产生一个坐标

 

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. 牛X的敌人";

 

    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<<"牛X的敌人:";

 

                   SetPos(51, 13);

 

                   cout<<"牛X的敌人移动速度较快。";

 

                }

 

                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<<"P掉了";

 

                drawFrame(enemy[i], '+', '+');

 

                Sleep(1000);

 

                GameOver();

 

                break;

 

            }

 

}

 

 

 

void Game::drawThisBulletToNull( COORD c)

 

{

 

    SetPos(c);

 

    cout<<" ";

 

}

 

 

 

void Game::drawThisEnemyToNull( Frame f )

 

{

 

    drawFrame(f, ' ', ' ');

 

}

 

 

 

void Game::judgeEnemy()

 

{

 

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

 

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

 

            if( judgeCoordInFrame(enemy[i], bullet[j]) )

 

            {

 

                score += 5;

 

                drawThisEnemyToNull( enemy[i] );

 

                COORD a={1, 1};

 

                COORD b={45, 3};

 

                enemy[i].position[0] = random(a, b);

 

                enemy[i].position[1].X = enemy[i].position[0].X + 3;

 

                enemy[i].position[1].Y = enemy[i].position[0].Y + 2;                   

 

                drawThisBulletToNull( bullet[j] );

 

                bullet[j].Y = 30;

 

            }

 

}

 

 

 

void Game::Shoot()

 

{

 

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

 

        if(bullet[i].Y == 30)

 

        {

 

            bullet[i].X = position[5].X;

 

            bullet[i].Y = position[5].Y-1;

 

            break;

 

        }

 

}

 

 

 

void Game::printScore()

 

{

 

    if(score == 120 && flag_rank == 0)

 

    {

 

        rank -= 3;

 

        flag_rank = 1;

 

    }

 

 

 

    else if( score == 360 && flag_rank == 1)

 

    {

 

        rank -= 5;

 

        flag_rank = 2;

 

    }

 

    else if( score == 480 && flag_rank == 2)

 

    {

 

        rank -= 5;

 

        flag_rank = 3;

 

    }

 

    int x=rank/5;

 

    SetPos(60, 6);

 

    cout<<score;

 

 

 

    if( rank!=rankf )

 

    {

 

        SetPos(60, 7);

 

        if( x == 5)

 

            title="";

 

        else if( x == 4)

 

            title="辣鸡飞行员";

 

        else if( x == 3)

 

            title="白银飞行员";

 

        else if( x == 2 )

 

            title="黄金飞行员";

            else if(x==1)

            title="哎呦,不错哦";

            else if(x=0)

            title="这是疯啦!?";

 

        cout<<title;

 

    }

 

    rankf = rank;

 

}

 

 

 

void Game::Playing()

 

{

 

 

 

 

    drawEnemy();

 

    drawPlane();

 

 

 

    int flag_bullet = 0;

 

    int flag_enemy = 0;

 

 

 

    while(1)

 

    {

 

        Sleep(8);

 

        if(_kbhit())

 

        {

 

            char x = _getch();

 

            if ('a' == x || 's' == x || 'd' == x || 'w' == x)

 

            {

 

                drawPlaneToNull();

 

                planeMove(x);

 

                drawPlane();

 

                judgePlane();

 

            }          

 

            else if ('p' == x)

 

                Pause();

 

            else if( 'k' == x)

 

                Shoot();

 

            else if( 'e' == x)

 

            {

 

                //CloseHandle(MFUN);

 

                GameOver();

 

                break;

 

            }

 

 

 

        }

 

        /* 处理子弹 */

 

        if( 0 == flag_bullet )

 

        {

 

            bulletMove();

 

            drawBulletToNull();

 

            drawBullet();

 

            judgeEnemy();

 

        }          

 

        flag_bullet++;

 

        if( 5 == flag_bullet )

 

            flag_bullet = 0;

 

 

 

        /* 处理敌人 */

 

        if( 0 == flag_enemy )

 

        {

 

            drawEnemyToNull();

 

            enemyMove();           

 

            drawEnemy();

 

            judgePlane();

 

        }

 

        flag_enemy++;

 

        if( flag_enemy >= rank )

 

            flag_enemy = 0;

 

 

 

        /* 输出得分 */

 

        printScore();

 

    }

 

}

 

 

 

void Game::GameOver()

 

{

 

    system("cls");             

 

    COORD p1={28,9};

 

    COORD p2={53,15};

 

    drawFrame(p1, p2, '=', '|');

 

    SetPos(36,12);

 

    string str="Game Over!";

 

    for(int i=0; i<str.size(); i++)

 

    {

 

        Sleep(80);

 

        cout<<str[i];

 

    }

 

    Sleep(1000);

 

    system("cls");

 

    drawFrame(p1, p2, '=', '|');

 

    SetPos(31, 11);

 

    cout<<"击落敌机:"<<score/5<<" 架";

 

    SetPos(31, 12);

 

    cout<<"得  分:"<<score<<" 分";

 

    SetPos(31, 13);

 

    cout<<"获得称号:"<<title;

 

    SetPos(30, 16);

 

    Sleep(1000);

 

    cout<<"继续? 是(y)| 否(n)";

 

as:

 

    char x=_getch();

 

    if (x == 'n')

 

        exit(0);

 

    else if (x == 'y')

 

    {

 

        system("cls");

 

        Game game;

 

        int a = drawMenu();

 

        if(a == 2)

 

            game.rank = 20;

 

        system("cls");

 

        drawPlaying();

 

        game.Playing();

 

    }

 

    else goto as;

 

}

 

 

 

/*================== the main function ==================*/

 

int main()

 

{

 

    //游戏准备

 

    srand((int)time(0));    //随机种子

 

    HideCursor();   //隐藏光标

 

 

 

    Game game;

 

    int a = drawMenu();

 

    if(a == 2)

 

        game.rank = 20;

 

    system("cls");

 

    drawPlaying();

 

    game.Playing();

 

}

1
储金洋
储金洋
新手光能
新手光能

 

void thunder(int Dif,int Row,int Column,char *USer)

 

{

 

int r,c,alls[22][22],backstage[22][22]={0};

 

srand((int)time(0));

 

for(r=1;r<=Row;r++) // 生成alls(0~1)1是雷

 

{

 

for(c=1;c<=Column;c++)

 

{

 

if(random(6)<1) {alls[r][c]=1;} else{alls[r][c]=0;};

 

}

 

};

 

for(r=0;r<=Row+1;r++) //生成 backstage(正确答案)

 

{

 

for(int c=0;c<=Column+1;c++)

 

{

 

if(alls[r][c]==1)

 

{

 

(int)backstage[r][c]='*'; //将1变为 * 代表雷

 

}

 

else

 

{

 

for(int i=r-1;i<=r+1;i++) //将0变为数字 (代表周围雷数)

 

for(int j=c-1;j<=c+1;j++)

 

{



 

if(alls[i][j]!=alls[r][c]&&alls[i][j]==1){backstage[r][c]++;};

 

}

 

}; //else 结束

 

}; // for 结束

 

}; // for 结束

 

cout<<"======================*********================================"<<endl;

 

char surface[22][22]; //生成surface(用户界面)

 

for(r=0;r<22;r++) //全部为零

 

for(c=0;c<22;c++)

 

{

 

surface[r][c]='0';

 

}

 

for(r=1;r<=Row;r++) //中间化 # 形成0包围#的形式 (通过数 #-->(*||数字) 的个数 赢的时候停止循环)

 

for(c=1;c<=Column;c++)

 

{

 

surface[r][c]='#';

 

}

 

for(r=1;r<=Row;r++) //输出 surface 界面 便于检查

 

{

 

for(c=1;c<=Column;c++) {cout<<" "<<surface[r][c];};

 

cout<<endl;

 

};

 

cout<<"请按格式输入"<<endl

 

<<"前两个数字为坐标,最后一个数字“1”表示此位置为雷,“0”则表示不是。"<<endl

 

<<"如:1 3 1 表示一行三列是雷;2 4 0 表示二行四列不是雷"<<endl

 

<<"提示:当数字周围雷都被扫出时,可再次按要求输入此位置,可得到周围数字。"<<endl;

 

long i=10000000L; //计算时间开始

 

clock_t start,finish;

 

double duration;

 

start=clock();

 

while(i--); //计算时间开始

 

int num=Row*Column; //计算#号个数

 

while(num!=0) //控制 是否点完所有位置

 

{

 

int x,y,judge;

 

cin>>x>>y>>judge;

 

if(alls[x][y]!=judge)

 

{

 

cout<<"you lose!!!"<<endl;

 

cout<<"The answer is:"<<endl;

 

for(r=1;r<=Row;r++) //输了 输出backstage 显示正确答案

 

{

 

for(int c=1;c<=Column;c++)

 

{

 

cout<<" "<<(char)(backstage[r][c]==42?backstage[r][c]:backstage[r][c]+'0'); //输出backstage

 

}

 

cout<<endl;

 

}

 

break;

 

}

 

else

 

{

 

if(alls[x][y]==1) {if(surface[x][y]=='#'){num--;}surface[x][y]='@'; } // 雷 判断正确 显示“@”;数“#”

 

else

 

{

 

if(backstage[x][y]!=0) // 数字 判断正确 显示数字

 

{

 

if(surface[x][y]=='#'){num--; surface[x][y]=backstage[x][y]+'0'; } // 数“#”

 

else

 

{

 

int lei_num=0;

 

for(int i=x-1;i<=x+1;i++) //数 数字周围 雷的个数

 

for(int j=y-1;j<=y+1;j++)

 

{

 

if(surface[i][j]=='@')

 

lei_num++;

 

}

 

if(backstage[x][y]==lei_num) // 看数字周围雷是否全部扫出 提示 显示数字周围

 

{

 

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

 

for(int j=y-1;j<=y+1;j++)

 

if(surface[i][j]=='#') //数“#”

 

{

 

surface[i][j]=backstage[i][j]+'0';

 

num--;

 

}

 

}

 

}

 

}

 

else // 数字为零时 显示零周围的零

 

{

 

if(surface[x][y]=='#'){num--;}; //数“#”

 

surface[x][y]=backstage[x][y]+'0';

 

for(int i=x-1;i<=x+1;i++) // 显示零周围的数字

 

for(int j=y-1;j<=y+1;j++)

 

if(surface[i][j]=='#') // 避免 死循环

 

{

 

surface[i][j]=backstage[i][j]+'0';

 

num--; //数“#”

 

}

 

for(int k=0;k<20;k++) //最多20层零 (点出最边上的零)

 

{

 

for (int R=1;R<=Row;R++) //检查所有零

 

for(int C=1;C<=Column;C++) //再次显示零周围的数字

 

{

 

if(surface[R][C]=='0')

 

{

 

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

 

for(int j=C-1;j<=C+1;j++)

 

{

 

if(surface[i][j]=='#') // 避免 死循环 数“#”

 

{

 

surface[i][j]=backstage[i][j]+'0';

 

num--;

 

}

 

}

 

}

 

} //匹配for 内

 

} //匹配 for 外

 

}//匹配else

 

}//匹配else

 

}//匹配els

 

cout<<endl;

 

cout<<"======================*********================================"<<endl;

 

for(r=1;r<=Row;r++) //输出界面(已修改)

 

{

 

for(c=1;c<=Column;c++) {cout<<" "<<surface[r][c];};

 

cout<<endl;

 

};

 

} //匹配while

 

finish=clock(); //计算时间结束

 

duration=(double)(finish-start)/CLOCKS_PER_SEC; //时间变量

 

if(num==0) //所有

 

{

 

cout<<" You win! Congratulations!! "<<endl;

 

cout<<" Your time is: "<<duration<<endl;

 

if(Dif==1) //读取 简单扫雷 的存储文件

 

{

 

string Name;

 

string name[6];

 

double Time,rang;

 

double times[6];

 

int i=0;

 

ifstream inf("扫雷 简单.txt");

 

for(i=0;i<5;i++) //文件中信息导入到数组里

 

{

 

inf>>Name;inf>>rang>>Time;

 

name[i]=Name;

 

times[i]=Time;

 

}

 

inf.close();

 

name[5]=USer; //本轮玩家信息

 

times[5]=duration;

 

double t1=0;

 

string t2;

 

for(int j=0;j<5;j++) //冒泡排序法

 

{

 

for(i=0;i<5-j;i++)

 

{

 

if(times[i]>times[i+1])

 

{

 

t1=times[i];

 

times[i]=times[i+1];

 

times[i+1]=t1;

 

t2=name[i];

 

name[i]=name[i+1];

 

name[i+1]=t2;

 

}

 

}

 

}

 

ofstream outf("扫雷 简单.txt");

 

for(i=0;i<5;i++) //将前五名玩家信息存储到文件中

 

{

 

cout<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;

 

outf<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;

 

}

 

outf.close();

 

}

 

if(Dif==2) //读取 一般扫雷 的存储文件

 

{

 

string Name;

 

string name[6];

 

double Time,rang;

 

double times[6];

 

int i=0;

 

ifstream inf("扫雷 一般.txt");

 

for(i=0;i<5;i++) //文件中信息导入到数组里

 

{

 

inf>>Name;inf>>rang>>Time;

 

name[i]=Name;

 

times[i]=Time;

 

}

 

inf.close();

 

name[5]=USer; //本轮玩家信息

 

times[5]=duration;

 

double t1=0;

 

string t2;

 

for(int j=0;j<5;j++) //冒泡排序法

 

{

 

for(i=0;i<5-j;i++)

 

{

 

if(times[i]>times[i+1])

 

{

 

t1=times[i];

 

times[i]=times[i+1];

 

times[i+1]=t1;

 

t2=name[i];

 

name[i]=name[i+1];

 

name[i+1]=t2;

 

}

 

}

 

}

 

ofstream outf("扫雷 一般.txt");

 

for(i=0;i<5;i++) //将前五名玩家信息存储到文件中 并输出

 

{

 

cout<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;

 

outf<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;

 

}

 

outf.close();

 

}

 

if(Dif==3) //读取 困难扫雷 的存储文件

 

{

 

string Name;

 

string name[6];

 

double Time,rang;

 

double times[6];

 

int i=0;

 

ifstream inf("扫雷 困难.txt");

 

for(i=0;i<5;i++) //文件中信息导入到数组里

 

{

 

inf>>Name;inf>>rang>>Time;

 

name[i]=Name;

 

times[i]=Time;

 

}

 

inf.close();

 

name[5]=USer; //本轮玩家信息

 

times[5]=duration;

 

double t1=0;

 

string t2;

 

for(int j=0;j<5;j++) //冒泡排序法

 

{

 

for(i=0;i<5-j;i++)

 

{

 

if(times[i]>times[i+1])

 

{

 

t1=times[i];

 

times[i]=times[i+1];

 

times[i+1]=t1;

 

t2=name[i];

 

name[i]=name[i+1];

 

name[i+1]=t2;

 

}

 

}

 

}

 

ofstream outf("扫雷 困难.txt");

 

for(i=0;i<5;i++) //将前五名玩家信息存储到文件中

 

{

 

cout<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;

 

outf<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;

 

}

 

outf.close();

 

}

 

}

 

}

 

void scale(int dif,char *User) //选择难度

 

{

 

int row,column;

 

if(dif==1) {row=3;column=3;}

 

if(dif==2) {row=7;column=7;}

 

if(dif==3) {row=10;column=10;}

 

cout<<"The scale is: "<<row<<"*"<<column<<endl;

 

thunder(dif,row,column,User);

 

};

 

int main()

 

{

 

int Continue=1;

 

int difficulty;

 

char user[10];

 

cout<<" Welcom to the game! "<<endl

 

<<" 请输入用户名! "<<endl;

 

cin>>user;

 

while(Continue==1)

 

{

 

cout<<"=======================*******************======================="<<endl

 

<<" 请选择难度! "<<endl

 

<<" 简单——1 "<<endl

 

<<" 一般——2 "<<endl

 

<<" 困难——3 "<<endl;

 

cin>>difficulty;

 

scale(difficulty,user);

 

cout<<"继续游戏——1 结束游戏——0"<<endl;

 

cin>>Continue;

 

}

 

 

0
0
夏子健
夏子健
初级光能
初级光能

#include <iostream>
#include <cstdio>
#include <windows.h>
#include <vector>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")
using namespace std;

#define GameW 10
#define GameH 20
const int CtrlLeft = GameW*2+4 + 3;

void out(int x){
    cout<<"游戏方式:"<<endl;
    cout<<"← 左移     → 右移"<<endl;
    cout<<"↓ 加速     ↑ 旋转"<<endl;
    cout<<"游戏规则:"<<endl;
    cout<<"连续消去1行得1分、2行得3分、3行得5分、4行得7分。"<<endl;
    cout<<"积分达到一定程度,会有换命的活动,命最多6条。"<<endl;
    cout<<"难度会随积分的上升逐渐上升,最多到6的难度。"<<endl<<"下面游戏正式开始";
    return;
}
struct Point {
    Point(){}
    Point(int x, int y) {_x = x, _y = y;}
    int _x, _y;
};

HANDLE g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE g_hInput  = GetStdHandle(STD_INPUT_HANDLE);

Point g_ptCursor(0,0);
BOOL isChecking = FALSE;
BOOL g_bGameOver = FALSE;
int g_nGameBack[GameH][GameW], Case;
int nowKeyInfo = -1;
int g_nDiff = 1;
int g_nLife = 2;
int g_nScore = 0;

void SetCursor(COORD cd) {
    SetConsoleCursorPosition(g_hOutput, cd);
}
void SetCursor(int x, int y){
    COORD cd = {x, y};
    SetCursor(cd);
}
void SetBlockCursor(int x, int y){
    COORD cd = {2*x + 2, y + 1};
    SetCursor(cd);
}

void SetBack(int x, int y, BOOL bk) {
    SetBlockCursor(x, y);
    if (bk) 
        printf("%s", "■");
    else
        printf(" ");
}

bool Out(int x, int y) {
    return x < 0 || y < 0 || x >= GameW || y >= GameH; 
}

struct xBlock {
public:
    int len;
    int nowRotateID;
    BOOL mask[4][4][4];
    static vector <xBlock> List;

    xBlock() { len = 0; }
    xBlock(int l, char *str) {
        int i, j, k;
        len = l;
        memset(mask, FALSE, sizeof(mask));
        for(i = 0; i < l; i++) {
            for(j = 0; j < l; j++) {
                mask[0][i][j] = str[i*l + j] - '0';
            }
        }
        for(k = 1; k < 4; k++) {
            for(i = 0; i < len; i++) {
                for(j = 0; j < len; j++) {
                    mask[k][i][j] = mask[k-1][j][len-1-i];
                }
            }
        }
        nowRotateID = rand() % 4;
    }

    void rotate() {
        nowRotateID ++;
        if (nowRotateID >= 4)
            nowRotateID = 0;
    }

    BOOL getUnit(int x, int y, int roID) {
        if (roID == -1) {
            roID = nowRotateID;
        }
        return mask[roID][y][x];
    }
};

vector <xBlock> xBlock::List;

class Block {
public:
    int x, y;
    int ID;
    xBlock bk;

    void reset(xBlock *pbk) {
        bk = *pbk;

        x = 4, y = 0;
        ID = ++ Case;

        if(collide(0,0)) {
            lifeDown();
        }
        draw();
        
        *pbk = xBlock::List[rand() % xBlock::List.size()];
    }
    
    void lifeDown() {
        int i, j;
        for(i = 0; i < GameH; i++) {
            for(j = 0; j < GameW; j++) {
                SetBack(j, i, TRUE);
                Sleep(10);
            }
        }
        if(g_nLife) {
            g_nLife --;
            for(i = g_nLife; i < 6; i++) {
                SetCursor(CtrlLeft + i, 15);
                printf("%c", ' ');
            }
            for(i = GameH-1; i >= 0; i--) {
                for(j = GameW-1; j >= 0; j--) {
                    SetBack(j, i, FALSE);
                    Sleep(10);
                    g_nGameBack[i][j] = 0;
                }
            }
        }else {
            g_bGameOver = TRUE;
        }
    }

    void erase() {
        int i, j;
        for(i = 0; i < bk.len; i++) {
            for(j = 0; j < bk.len; j++) {
                if (bk.getUnit(j, i, -1)) {
                    if(!Out(j+x, i+y) && g_nGameBack[i+y][j+x]) {
                        SetBack(j+x, i+y, FALSE);
                        g_nGameBack[i+y][j+x] = 0;
                    }
                }
            }
        }
    }
    void draw() {
        int i, j;
        for(i = 0; i < bk.len; i++) {
            for(j = 0; j < bk.len; j++) {
                if (bk.getUnit(j, i, -1)) {
                    if(!Out(j+x, i+y) && !g_nGameBack[i+y][j+x]) {
                        SetBack(j+x, i+y, TRUE);
                        g_nGameBack[i+y][j+x]  = ID;
                    }
                }
            }
        }
    }
    void draw(int x, int y) {
        int i, j;
        for(i = 0; i < 4; i++) {
            for(j = 0; j < 4; j++) {
                SetCursor(x + 2*j, y + i);
                if (bk.getUnit(j, i, -1)) {    
                    printf("%s", "■");
                }else 
                    printf(" ");
            }
        }
    }
    bool collide(int dx, int dy, int roID = -1) {
        int i, j;
        for(i = 0; i < bk.len; i++) {
            for(j = 0; j < bk.len; j++) {
                if (bk.getUnit(j, i, roID)) {
                    Point ptPos(j + x + dx, i + y + dy);
                    if(Out(ptPos._x, ptPos._y)
                    || g_nGameBack[ptPos._y][ptPos._x] && ID != g_nGameBack[ptPos._y][ptPos._x]) {
                        return TRUE;
                    }
                }
            }
        }
        return FALSE;
    }

    void rotate(int nTimes = 1) {
        int nextro = (bk.nowRotateID + nTimes) % 4;
        if(collide(0, 0, nextro)) {
            return ;
        }
        Beep(12000, 50);
        erase();
        bk.nowRotateID = nextro;
        draw();
    }

    BOOL changepos(int dx, int dy) {
        if(collide(dx, dy)) {
            return FALSE;
        }
        erase();
        x += dx;
        y += dy;
        draw();
        return TRUE;
    }
};

void GameInit() {
    CONSOLE_CURSOR_INFO cursor_info;
    cursor_info.bVisible = FALSE;
    cursor_info.dwSize   = 100;
    SetConsoleCursorInfo(g_hOutput, &cursor_info);
    xBlock::List.push_back(xBlock(3, "010111000"));
    xBlock::List.push_back(xBlock(3, "110110000"));
    xBlock::List.push_back(xBlock(3, "111001000"));
    xBlock::List.push_back(xBlock(3, "111100000"));
    xBlock::List.push_back(xBlock(3, "110011000"));
    xBlock::List.push_back(xBlock(3, "011110000"));
    xBlock::List.push_back(xBlock(4, "1000100010001000"));
}

void DrawFrame(int x, int y, int nWidth, int nHeight) {
    int i;
    for(i = 0; i < nWidth; i++) {
        SetCursor(x + 2*i + 2, y);
        printf("%s", "一");
        SetCursor(x + 2*i + 2, y + nHeight+1);
        printf("%s", "┄");
    }
    for(i = 0; i < nHeight; i++) {
        SetCursor(x, y + i + 1);
        printf("%s", "┆");
        SetCursor(x + nWidth*2+2, y + i + 1);
        printf("%s", "┆");
    }        
    SetCursor(x, y);
    printf("%s", "┌");    
    SetCursor(x, y + nHeight+1);
    printf("%s", "└");
    SetCursor(x + nWidth*2+2, y);
    printf("%s", "┐");    
    SetCursor(x + nWidth*2+2, y + nHeight+1);
    printf("%s", "┘");
}

void MissionInit() {
    memset(g_nGameBack, FALSE, sizeof(g_nGameBack));
    Case = 1;
    int i;
    DrawFrame(0, 0, GameW, GameH);
    DrawFrame(GameW*2+4, 0, 4, GameH);
    SetCursor(CtrlLeft, 2);
    printf("Next");
    
    SetCursor(CtrlLeft, 8);
    printf("Speed");
    for(i = 0; i < g_nDiff; i++) {
        SetCursor(CtrlLeft + i, 9);
        printf("%c", 1);
    }

    SetCursor(CtrlLeft, 11);
    printf("Score");
    SetCursor(CtrlLeft, 12);
    printf("%d", g_nScore);

    SetCursor(CtrlLeft, 14);
    printf("Life");
    for(i = 0; i < g_nLife; i++) {
        SetCursor(CtrlLeft + i, 15);
        printf("%c", 3);
    }

    SetCursor(CtrlLeft-1, 19);
    printf("by Zty");
    SetCursor(CtrlLeft-1, 20);
    printf("Baidu A*");
}

void Check() {
    isChecking = TRUE;
    int i, j, k;
    vector <int> line;
    for(i = 0; i < GameH; i++) {
        for(j = 0; j < GameW; j++) {
            if(!g_nGameBack[i][j])
                break;
        }
        if(j == GameW) {
            line.push_back(i);
        }
    }
    if(line.size()) {
        int nCount = 7;
        while(nCount --) {
            for(i = 0; i < line.size(); i++) {
                for(j = 0; j < GameW; j++) {
                    SetBack(j, line[i], nCount&1);
                }
            }
            Sleep(70);
        }
        for(i = 0; i < line.size(); i++) {
            for(j = 0; j < GameW; j++) {
                g_nGameBack[line[i]][j] = 0;
            }
        }

        for(i = 0; i < GameW; i++) {
            int next = GameH-1;
            for(j = GameH-1; j >= 0; j--) {
                for(k = next; k >= 0; k--) {
                    if(g_nGameBack[k][i]) 
                        break;
                }
                next = k - 1;
                BOOL is = (k >= 0);
                SetBack(i, j, is);
                g_nGameBack[j][i] = is;
            }
        }

        g_nScore += 2*line.size()-1;
        SetCursor(CtrlLeft, 12);
        printf("%d", g_nScore);

        if( g_nScore >= g_nDiff * g_nDiff * 10) {
            if(g_nDiff <= 6)
                g_nDiff ++;
        }
        if( g_nScore >= 50 * (g_nLife+1)) {
            if(g_nLife <= 6)
                g_nLife ++;
        }
    }

    isChecking = FALSE;
}
int main() { 
    Block* obj = new Block();
    Block* buf = new Block();
    

    BOOL bCreateNew = FALSE;
    int nTimer = GetTickCount();
    int LastKeyDownTime = GetTickCount();


    GameInit();
    MissionInit();
    
    buf->bk = xBlock::List[rand() % xBlock::List.size()];
    while(1) {
        if(!bCreateNew) {
            bCreateNew = TRUE;
            obj->reset(&buf->bk);
            if(g_bGameOver)
                break;
            buf->draw(CtrlLeft - 1, 4);
        }
        if (GetTickCount() - nTimer >= 1000 / g_nDiff) {
            nTimer = GetTickCount();
            if (!obj->collide(0, 1))
                obj->changepos(0, 1);
            else {
                Check();
                bCreateNew = FALSE;
            }
        }
        if (GetTickCount() - LastKeyDownTime >= 100) {
            if(FALSE == isChecking) {
                LastKeyDownTime = GetTickCount();
                if (GetAsyncKeyState(VK_UP)) {
                    obj->rotate();
                }
                if (GetAsyncKeyState(VK_LEFT)) {
                    obj->changepos(-1, 0);
                }
                if (GetAsyncKeyState(VK_RIGHT)) {
                    obj->changepos(1, 0);
                }
                if (GetAsyncKeyState(VK_DOWN)) {
                    if( FALSE == obj->changepos(0, 2) )
                        obj->changepos(0, 1);
                }
            }
        }
    }
    SetCursor(8, 10);
    printf("Game Over");

    SetCursor(0, GameH+3);
    printf("按ESC键退出游戏");

    while(1) {
        if (GetAsyncKeyState(VK_ESCAPE))
            break;
    }
    return 0;
}

俄罗斯方块

0
0
0
何沐阳
何沐阳
初级光能
初级光能


#include<iostream>

 

#include<windows.h>

 

#include<conio.h>

 

#include<time.h>

 

#include<string>

 

using namespace std;

 

typedef struct Frame

 

{

 

    COORD position[2];

 

    int flag;

 

}Frame;

 

void SetPos(COORD a)

 

{

 

    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);

 

    SetConsoleCursorPosition(out, a);

 

}

 

void SetPos(int i, int j)

 

{

 

    COORD pos={i, j};

 

    SetPos(pos);

 

}

 

void HideCursor()

 

{

 

    CONSOLE_CURSOR_INFO cursor_info = {1, 0};

 

    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

 

}

 

 

 

//把第y行,[x1, x2) 之间的坐标填充为 ch

 

void drawRow(int y, int x1, int x2, char ch)

 

{

 

    SetPos(x1,y);

 

    for(int i = 0; i <= (x2-x1); i++) cout<<ch;

 

}

 

 

 

//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch

 

void drawRow(COORD a, COORD b, char ch)

 

{

 

    if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch);

 

    else {

 

        SetPos(0, 25);

 

        cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";

 

        system("pause");

 

    }

 

}

 

 

 

//把第x列,[y1, y2] 之间的坐标填充为 ch

 

void drawCol(int x, int y1, int y2, char ch)

 

{

 

    int y=y1;

 

    while(y!=y2+1) {

 

        SetPos(x, y);

 

        cout<<ch;

 

        y++;

 

    }

 

}

 

 

 

//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch

 

void drawCol(COORD a, COORD b, char ch)

 

{

 

    if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch);

 

    else {

 

        SetPos(0, 25);

 

        cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";

 

        system("pause");

 

    }

 

}

 

 

 

//左上角坐标、右下角坐标、用row填充行、用col填充列

 

void drawFrame(COORD a, COORD  b, char row, char col)

 

{

 

    drawRow(a.Y, a.X+1, b.X-1, row);

 

    drawRow(b.Y, a.X+1, b.X-1, row);

 

    drawCol(a.X, a.Y+1, b.Y-1, col);

 

    drawCol(b.X, a.Y+1, b.Y-1, col);

 

}

 

 

 

void drawFrame(int x1, int y1, int x2, int y2, char row, char col)

 

{

 

    COORD a={x1, y1};

 

    COORD b={x2, y2};

 

    drawFrame(a, b, row, col);

 

}

 

 

 

void drawFrame(Frame frame, char row, char col)

 

{

 

    COORD a = frame.position[0];

 

    COORD b = frame.position[1];

 

    drawFrame(a, b, row, col);

 

}

 

 

 

void drawPlaying()

 

{

 

    drawFrame(0, 0, 48, 24, '=', '|');//    draw map frame;

 

    drawFrame(49, 0, 79, 4, '-', '|');//        draw output frame

 

    drawFrame(49, 4, 79, 9, '-', '|');//        draw score frame

 

    drawFrame(49, 9, 79, 20, '-', '|');//   draw operate frame

 

    drawFrame(49, 20, 79, 24, '-', '|');//  draw other message frame

 

    SetPos(52, 6);

 

    cout<<"得分:";

 

    SetPos(52, 7);

 

    cout<<"称号:";

 

    SetPos(52,10);

 

    cout<<"操作方式:";

 

    SetPos(52,12);

 

    cout<<"  a,s,d,w 控制战机移动。";

 

    SetPos(52,14);

 

    cout<<"  p 暂停游戏。";

 

    SetPos(52,16);

 

    cout<<"  e 退出游戏。";

 

}

 

 

 

//在[a, b)之间产生一个随机整数

 

int random(int a, int b)

 

{

 

    int c=(rand() % (a-b))+ a;

 

    return c;

 

}

 

 

 

//在两个坐标包括的矩形框内随机产生一个坐标

 

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. 牛X的敌人";

 

    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<<"牛X的敌人:";

 

                   SetPos(51, 13);

 

                   cout<<"牛X的敌人移动速度较快。";

 

                }

 

                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<<"P掉了";

 

                drawFrame(enemy[i], '+', '+');

 

                Sleep(1000);

 

                GameOver();

 

                break;

 

            }

 

}

 

 

 

void Game::drawThisBulletToNull( COORD c)

 

{

 

    SetPos(c);

 

    cout<<" ";

 

}

 

 

 

void Game::drawThisEnemyToNull( Frame f )

 

{

 

    drawFrame(f, ' ', ' ');

 

}

 

 

 

void Game::judgeEnemy()

 

{

 

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

 

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

 

            if( judgeCoordInFrame(enemy[i], bullet[j]) )

 

            {

 

                score += 5;

 

                drawThisEnemyToNull( enemy[i] );

 

                COORD a={1, 1};

 

                COORD b={45, 3};

 

                enemy[i].position[0] = random(a, b);

 

                enemy[i].position[1].X = enemy[i].position[0].X + 3;

 

                enemy[i].position[1].Y = enemy[i].position[0].Y + 2;                   

 

                drawThisBulletToNull( bullet[j] );

 

                bullet[j].Y = 30;

 

            }

 

}

 

 

 

void Game::Shoot()

 

{

 

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

 

        if(bullet[i].Y == 30)

 

        {

 

            bullet[i].X = position[5].X;

 

            bullet[i].Y = position[5].Y-1;

 

            break;

 

        }

 

}

 

 

 

void Game::printScore()

 

{

 

    if(score == 120 && flag_rank == 0)

 

    {

 

        rank -= 3;

 

        flag_rank = 1;

 

    }

 

 

 

    else if( score == 360 && flag_rank == 1)

 

    {

 

        rank -= 5;

 

        flag_rank = 2;

 

    }

 

    else if( score == 480 && flag_rank == 2)

 

    {

 

        rank -= 5;

 

        flag_rank = 3;

 

    }

 

    int x=rank/5;

 

    SetPos(60, 6);

 

    cout<<score;

 

 

 

    if( rank!=rankf )

 

    {

 

        SetPos(60, 7);

 

        if( x == 5)

 

            title="";

 

        else if( x == 4)

 

            title="辣鸡飞行员";

 

        else if( x == 3)

 

            title="白银飞行员";

 

        else if( x == 2 )

 

            title="黄金飞行员";

            else if(x==1)

            title="哎呦,不错哦";

            else if(x=0)

            title="这是疯啦!?";

 

        cout<<title;

 

    }

 

    rankf = rank;

 

}

 

 

 

void Game::Playing()

 

{

 

 

 

 

    drawEnemy();

 

    drawPlane();

 

 

 

    int flag_bullet = 0;

 

    int flag_enemy = 0;

 

 

 

    while(1)

 

    {

 

        Sleep(8);

 

        if(_kbhit())

 

        {

 

            char x = _getch();

 

            if ('a' == x || 's' == x || 'd' == x || 'w' == x)

 

            {

 

                drawPlaneToNull();

 

                planeMove(x);

 

                drawPlane();

 

                judgePlane();

 

            }          

 

            else if ('p' == x)

 

                Pause();

 

            else if( 'k' == x)

 

                Shoot();

 

            else if( 'e' == x)

 

            {

 

                //CloseHandle(MFUN);

 

                GameOver();

 

                break;

 

            }

 

 

 

        }

 

        /* 处理子弹 */

 

        if( 0 == flag_bullet )

 

        {

 

            bulletMove();

 

            drawBulletToNull();

 

            drawBullet();

 

            judgeEnemy();

 

        }          

 

        flag_bullet++;

 

        if( 5 == flag_bullet )

 

            flag_bullet = 0;

 

 

 

        /* 处理敌人 */

 

        if( 0 == flag_enemy )

 

        {

 

            drawEnemyToNull();

 

            enemyMove();           

 

            drawEnemy();

 

            judgePlane();

 

        }

 

        flag_enemy++;

 

        if( flag_enemy >= rank )

 

            flag_enemy = 0;

 

 

 

        /* 输出得分 */

 

        printScore();

 

    }

 

}

 

 

 

void Game::GameOver()

 

{

 

    system("cls");             

 

    COORD p1={28,9};

 

    COORD p2={53,15};

 

    drawFrame(p1, p2, '=', '|');

 

    SetPos(36,12);

 

    string str="Game Over!";

 

    for(int i=0; i<str.size(); i++)

 

    {

 

        Sleep(80);

 

        cout<<str[i];

 

    }

 

    Sleep(1000);

 

    system("cls");

 

    drawFrame(p1, p2, '=', '|');

 

    SetPos(31, 11);

 

    cout<<"击落敌机:"<<score/5<<" 架";

 

    SetPos(31, 12);

 

    cout<<"得  分:"<<score<<" 分";

 

    SetPos(31, 13);

 

    cout<<"获得称号:"<<title;

 

    SetPos(30, 16);

 

    Sleep(1000);

 

    cout<<"继续? 是(y)| 否(n)";

 

as:

 

    char x=_getch();

 

    if (x == 'n')

 

        exit(0);

 

    else if (x == 'y')

 

    {

 

        system("cls");

 

        Game game;

 

        int a = drawMenu();

 

        if(a == 2)

 

            game.rank = 20;

 

        system("cls");

 

        drawPlaying();

 

        game.Playing();

 

    }

 

    else goto as;

 

}

 

 

 

/*================== the main function ==================*/

 

int main()

 

{

 

    //游戏准备

 

    srand((int)time(0));    //随机种子

 

    HideCursor();   //隐藏光标

 

 

 

    Game game;

 

    int a = drawMenu();

 

    if(a == 2)

 

        game.rank = 20;

 

    system("cls");

 

    drawPlaying();

 

    game.Playing();

 

}

我要回答