问题标题: 请把C++的游戏代码发给我

0
0

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

#include<iostream> 

#include<windows.h> 

#include<conio.h> 

#include<time.h> 

#include<string> 

using namespace std; 

 

/*=============== all the structures ===============*/ 

 

typedef struct Frame 

    COORD position[2]; 

    int flag; 

}Frame; 

 

 

/*=============== all the functions ===============*/ 

 

void SetPos(COORD a)// set cursor  

    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE); 

    SetConsoleCursorPosition(out, a); 

 

void SetPos(int i, int j)// set cursor 

    COORD pos={i, j}; 

    SetPos(pos); 

 

void HideCursor() 

    CONSOLE_CURSOR_INFO cursor_info = {1, 0};  

    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); 

 

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

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

    SetPos(x1,y); 

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

        cout<<ch; 

 

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

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

    if(a.Y == b.Y) 

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

    else 

    { 

        SetPos(0, 25); 

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

        system("pause"); 

    } 

 

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

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

    int y=y1; 

    while(y!=y2+1) 

    { 

        SetPos(x, y); 

        cout<<ch; 

        y++; 

    } 

 

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

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

    if(a.X == b.X) 

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

    else 

    { 

        SetPos(0, 25); 

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

        system("pause"); 

    } 

 

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

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

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

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

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

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

 

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

    COORD a={x1, y1}; 

    COORD b={x2, y2}; 

    drawFrame(a, b, row, col); 

 

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

    COORD a = frame.position[0]; 

    COORD b = frame.position[1]; 

    drawFrame(a, b, row, col); 

 

void drawPlaying() 

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

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

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

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

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

    SetPos(52, 6); 

    cout<<"得分:"; 

    SetPos(52, 7); 

    cout<<"称号:"; 

    SetPos(52,10); 

    cout<<"操作方式:"; 

    SetPos(52,12); 

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

    SetPos(52,14); 

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

    SetPos(52,16); 

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

 

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

int random(int a, int b) 

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

    return c; 

 

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

COORD random(COORD a, COORD b) 

    int x=random(a.X, b.X); 

    int y=random(a.Y, b.Y); 

    COORD c={x, y}; 

    return c; 

 

bool  judgeCoordInFrame(Frame frame, COORD spot) 

    if(spot.X>=frame.position[0].X) 

        if(spot.X<=frame.position[1].X) 

            if(spot.Y>=frame.position[0].Y) 

                if(spot.Y<=frame.position[0].Y) 

                    return true; 

    return false; 

 

void printCoord(COORD a) 

    cout    <<"( "<<a.X<<" , "<<a.Y<<" )"; 

 

void printFrameCoord(Frame a) 

    printCoord(a.position[0]); 

    cout    <<" - "; 

    printCoord(a.position[1]); 

 

int drawMenu() 

    SetPos(30, 1); 

    cout<<"P l a n e  W a r"; 

    drawRow(3, 0, 79, '-'); 

    drawRow(5, 0, 79, '-'); 

    SetPos(28, 4); 

    cout<<"w 和 s 选择, k 确定"; 

    SetPos(15, 11); 

    cout<<"1. 简单的敌人"; 

    SetPos(15, 13); 

    cout<<"2. 冷酷的敌人"; 

    drawRow(20, 0, 79, '-'); 

    drawRow(22, 0, 79, '-'); 

    SetPos(47, 11); 

    cout<<"简单的敌人:"; 

    SetPos(51, 13); 

    cout<<"简单敌人有着较慢的移动速度。"; 

    SetPos(24, 21); 

    cout<<"制作:LJF神犇"; 

    int j=11; 

    SetPos(12, j); 

    cout<<">>"; 

 

    //drawFrame(45, 9, 79, 17, '=', '|'); 

 

    while(1) 

    {   if( _kbhit() ) 

        {    

            char x=_getch(); 

            switch (x) 

            { 

            case 'w' : 

                    {    

                        if( j == 13) 

                        { 

                            SetPos(12, j); 

                            cout<<" "; 

                            j = 11; 

                            SetPos(12, j); 

                            cout<<">>"; 

                            SetPos(51, 13); 

                            cout<<"            "; 

                            SetPos(47, 11); 

                            cout<<"简单的敌人:"; 

                            SetPos(51, 13); 

                            cout<<"简单敌人有着较慢的移动速度,比较容易对付"; 

                        } 

                        break; 

                    } 

            case 's' : 

                    {    

                        if( j == 11 ) 

                        { 

                            SetPos(12, j); 

                            cout<<" ";         

                            j = 13; 

                            SetPos(12, j); 

                            cout<<">>"; 

                            SetPos(51, 13); 

                            cout<<"              "; 

                            SetPos(47, 11); 

                            cout<<"冷酷的敌人:"; 

                            SetPos(51, 13); 

                            cout<<"冷酷的敌人移动速度较快,难对付哟。"; 

                        } 

                        break; 

                    } 

            case 'k' : 

                    {    

                        if (j == 8) return 1; 

                        else return 2; 

                    } 

            } 

        } 

    } 

 

/* 

DWORD WINAPI MusicFun(LPVOID lpParamte)

{

    //DWORD OBJ;

    sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC);

    return 0;

}

*/ 

 

 

/*================== the Game Class ==================*/ 

 

class Game 

public: 

    COORD position[10]; 

    COORD bullet[10]; 

    Frame enemy[8]; 

    int score; 

    int rank; 

    int rankf; 

    string title; 

    int flag_rank; 

 

    Game (); 

     

    //初始化所有 

    void initPlane(); 

    void initBullet(); 

    void initEnemy(); 

 

    //初始化其中一个 

    //void initThisBullet( COORD ); 

    //void initThisEnemy( Frame ); 

 

    void planeMove(char); 

    void bulletMove(); 

    void enemyMove(); 

     

    //填充所有 

    void drawPlane(); 

    void drawPlaneToNull(); 

    void drawBullet(); 

    void drawBulletToNull(); 

    void drawEnemy(); 

    void drawEnemyToNull(); 

 

    //填充其中一个 

    void drawThisBulletToNull( COORD ); 

    void drawThisEnemyToNull( Frame ); 

 

    void Pause(); 

    void Playing(); 

    void judgePlane(); 

    void judgeEnemy(); 

 

    void Shoot(); 

 

    void GameOver(); 

    void printScore(); 

}; 

 

Game::Game() 

    initPlane(); 

    initBullet(); 

    initEnemy(); 

    score = 0; 

    rank = 25; 

    rankf = 0; 

    flag_rank = 0; 

 

void Game::initPlane() 

    COORD centren={39, 22}; 

    position[0].X=position[5].X=position[7].X=position[9].X=centren.X; 

    position[1].X=centren.X-2;   

    position[2].X=position[6].X=centren.X-1; 

    position[3].X=position[8].X=centren.X+1; 

    position[4].X=centren.X+2; 

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

        position[i].Y=centren.Y; 

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

        position[i].Y=centren.Y+1; 

    position[5].Y=centren.Y-1; 

    position[9].Y=centren.Y-2; 

 

void Game::drawPlane() 

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

    { 

        SetPos(position[i]); 

        if(i!=5) 

            cout<<"O"; 

        else if(i==5) 

            cout<<"|";         

    } 

 

void Game::drawPlaneToNull() 

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

    { 

        SetPos(position[i]); 

        cout<<" "; 

    }    

 

void Game::initBullet() 

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

        bullet[i].Y = 30; 

 

void Game::drawBullet() 

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

    { 

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

        { 

            SetPos(bullet[i]); 

            cout<<"^";     

        } 

    } 

 

void Game::drawBulletToNull() 

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

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

            { 

                COORD pos={bullet[i].X, bullet[i].Y+1}; 

                SetPos(pos); 

                cout<<" "; 

            }    

 

void Game::initEnemy() 

    COORD a={1, 1}; 

    COORD b={45, 15}; 

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

    { 

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

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

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

    } 

 

void Game::drawEnemy() 

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

        drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|'); 

 

void Game::drawEnemyToNull() 

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

    { 

        drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' '); 

    }        

 

void Game::Pause() 

    SetPos(61,2); 

    cout<<"               "; 

    SetPos(61,2); 

    cout<<"暂停中..."; 

    char c=_getch(); 

    while(c!='p') 

        c=_getch(); 

    SetPos(61,2); 

    cout<<"         "; 

 

void Game::planeMove(char x) 

    if(x == 'a') 

        if(position[1].X != 1) 

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

                position[i].X -= 2; 

                 

    if(x == 's') 

        if(position[7].Y != 23) 

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

                position[i].Y += 1; 

 

    if(x == 'd') 

        if(position[4].X != 47) 

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

                position[i].X += 2; 

 

    if(x == 'w') 

        if(position[5].Y != 3) 

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

                position[i].Y -= 1; 

 

void Game::bulletMove() 

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

    { 

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

        { 

            bullet[i].Y -= 1; 

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

            { 

                COORD pos={bullet[i].X, bullet[i].Y+1}; 

                drawThisBulletToNull( pos ); 

                bullet[i].Y=30; 

            } 

                 

        } 

    } 

 

void Game::enemyMove() 

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

    { 

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

            enemy[i].position[j].Y++; 

 

        if(24 == enemy[i].position[1].Y) 

        { 

            COORD a={1, 1}; 

            COORD b={45, 3}; 

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

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

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

        } 

    } 

 

void Game::judgePlane() 

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

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

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

            { 

                SetPos(62, 1); 

                cout<<"坠毁"; 

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

                Sleep(1000); 

                GameOver(); 

                break; 

            } 

 

void Game::drawThisBulletToNull( COORD c) 

    SetPos(c); 

    cout<<" "; 

 

void Game::drawThisEnemyToNull( Frame f ) 

    drawFrame(f, ' ', ' '); 

 

void Game::judgeEnemy() 

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

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

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

            { 

                score += 5; 

                drawThisEnemyToNull( enemy[i] ); 

                COORD a={1, 1}; 

                COORD b={45, 3}; 

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

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

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

                drawThisBulletToNull( bullet[j] ); 

                bullet[j].Y = 30; 

            } 

 

void Game::Shoot() 

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

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

        { 

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

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

            break; 

        } 

 

void Game::printScore() 

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

    { 

        rank -= 3; 

        flag_rank = 1; 

    } 

 

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

    { 

        rank -= 5; 

        flag_rank = 2; 

    } 

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

    { 

        rank -= 5; 

        flag_rank = 3; 

    } 

    int x=rank/5; 

    SetPos(60, 6); 

    cout<<score; 

 

    if( rank!=rankf ) 

    { 

        SetPos(60, 7); 

        if( x == 5) 

            title="初级飞行员"; 

        else if( x == 4) 

            title="中级飞行员"; 

        else if( x == 3) 

            title="高级飞行员"; 

        else if( x == 2 ) 

            title="王牌飞行员"; 

        cout<<title; 

    } 

    rankf = rank; 

 

void Game::Playing() 

    //HANDLE MFUN; 

    //MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL);  

 

    drawEnemy(); 

    drawPlane(); 

 

    int flag_bullet = 0; 

    int flag_enemy = 0; 

 

    while(1) 

    { 

        Sleep(8); 

        if(_kbhit()) 

        { 

            char x = _getch(); 

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

            { 

                drawPlaneToNull(); 

                planeMove(x); 

                drawPlane(); 

                judgePlane(); 

            }            

            else if ('p' == x) 

                Pause(); 

            else if( 'k' == x) 

                Shoot(); 

            else if( 'e' == x) 

            { 

                //CloseHandle(MFUN); 

                GameOver(); 

                break; 

            } 

                 

        } 

        /* 处理子弹 */ 

        if( 0 == flag_bullet ) 

        { 

            bulletMove(); 

            drawBulletToNull(); 

            drawBullet(); 

            judgeEnemy(); 

        }            

        flag_bullet++; 

        if( 5 == flag_bullet ) 

            flag_bullet = 0; 

 

        /* 处理敌人 */ 

        if( 0 == flag_enemy ) 

        { 

            drawEnemyToNull(); 

            enemyMove();             

            drawEnemy(); 

            judgePlane(); 

        } 

        flag_enemy++; 

        if( flag_enemy >= rank ) 

            flag_enemy = 0; 

 

        /* 输出得分 */ 

        printScore(); 

    } 

 

void Game::GameOver() 

    system("cls");               

    COORD p1={28,9}; 

    COORD p2={53,15}; 

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

    SetPos(36,12); 

    string str="Game Over!"; 

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

    { 

        Sleep(80); 

        cout<<str[i]; 

    } 

    Sleep(1000); 

    system("cls"); 

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

    SetPos(31, 11); 

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

    SetPos(31, 12); 

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

    SetPos(31, 13); 

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

    SetPos(30, 16); 

    Sleep(1000); 

    cout<<"继续? 是(y)| 否(n)制作:最牛的LJF"; 

as: 

    char x=_getch(); 

    if (x == 'n') 

        exit(0); 

    else if (x == 'y') 

    { 

        system("cls"); 

        Game game; 

        int a = drawMenu(); 

        if(a == 2) 

            game.rank = 20; 

        system("cls"); 

        drawPlaying(); 

        game.Playing(); 

    } 

    else goto as; 

 

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

int main() 

    //游戏准备 

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

    HideCursor();   //隐藏光标 

     

    Game game; 

    int a = drawMenu(); 

    if(a == 2) 

        game.rank = 20; 

    system("cls"); 

    drawPlaying(); 

    game.Playing(); 

0
尹宗鑫
尹宗鑫
新手守护
新手守护

贪吃蛇:

#include <iostream>  
#include <cstdio>  
#include <cstdlib>  
#include <ctime>  
#include <conio.h>  
#include <cmath>  
#include <windows.h>  
using namespace std;  
  
/*** 光标定位 ***/  
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);  
COORD coord;  
  
void locate(int x,int y)  
{  
    coord.X=y;  
    coord.Y=x;  
    SetConsoleCursorPosition(hout,coord);  
};  
  
/*** 隐藏光标 ***/  
void hide()  
{  
    CONSOLE_CURSOR_INFO cursor_info={1,0};  
    SetConsoleCursorInfo(hout, &cursor_info);  
}  
  
/*** 生成随机数 ***/  
double random(double start, double end)  
{  
    return start+(end-start)*rand()/(RAND_MAX + 1.0);  
}  
  
/*** 定义地图的长宽,蛇的坐标,长度,方向,食物的位置 ***/  
int m,n;  
  
struct node  
{  
    int x,y;  
}snake[1000];  
  
int snake_length,dir;  
node food;  
int direct[4][2]={{-1,0},{1,0},{0,-1},{0,1}};  
  
/*** 输出墙 ***/  
void print_wall()  
{  
    cout << " ";  
    for (int i=1;i<=n;i++)  
        cout << "-";  
    cout << endl;  
    for (int j=0;j<=m-1;j++)  
    {  
        cout << "|";  
        for (int i=1;i<=n;i++) cout << " ";  
        cout << "|" << endl;  
    }  
    cout << " ";  
    for (int i=1;i<=n;i++)  
        cout << "-";  
}  
  
/*** 首次输出蛇,其中snake[0]代表头 ***/  
void print_snake()  
{  
    locate(snake[0].x,snake[0].y);  
    cout << "@";  
    for (int i=1;i<=snake_length-1;i++)  
    {  
        locate(snake[i].x,snake[i].y);  
        cout << "*";  
    }  
}  
  
/*** 判断是否撞墙或者自撞 ***/  
bool is_correct()  
{  
    if (snake[0].x==0 || snake[0].y==0 || snake[0].x==m+1 || snake[0].y==n+1) return false;  
    for (int i=1;i<=snake_length-1;i++)  
    {  
        if (snake[0].x==snake[i].x && snake[0].y==snake[i].y) return false;  
    }  
    return true;  
}  
  
/*** 随机生成并输出食物位置 ***/  
bool print_food()  
{  
    srand((unsigned)time(0));  
    bool e;  
    while (1)  
    {  
        e=true;  
        int i=(int) random(0,m)+1,j=(int) random(0,n)+1;  
        food.x=i;food.y=j;  
        for (int k=0;k<=snake_length-1;k++)  
        {  
            if (snake[k].x==food.x && snake[k].y==food.y)  
            {  
                e=false;break;  
            }  
        }  
        if (e) break;  
    }  
    locate(food.x,food.y);  
    cout << "$";  
    return true;  
}  
  
/*** 蛇的前进 ***/  
bool go_ahead()  
{  
    node temp;  
    bool e=false;  
    temp=snake[snake_length-1];  
    for (int i=snake_length-1;i>=1;i--)  
        snake[i]=snake[i-1];  
    snake[0].x+=direct[dir][0];  
    snake[0].y+=direct[dir][1];  
    locate(snake[1].x,snake[1].y);  
    cout << "*";  
    /*** 吃到了食物 ***/  
    if (snake[0].x==food.x && snake[0].y==food.y)  
    {  
        snake_length++;  
        e=true;  
        snake[snake_length-1]=temp;  
    }  
    /*** 输出此时蛇状态 ***/  
    if (!e)  
    {  
        locate(temp.x,temp.y);  
        cout << " ";  
    }  
    else  
        print_food();  
    locate(snake[0].x,snake[0].y);  
    cout << "@";  
    /*** 如果自撞 ***/  
    if (!is_correct())  
    {  
        system("cls");  
        cout << "You lose!" << endl << "Length: " << snake_length << endl;  
        return false;  
    }  
    return true;  
}  
  
/*** 主函数 ***/  
int main()  
{  
    cout << "--------------------贪吃蛇---------------------" << endl;  
    cout << "请先输入两个数,表示地图大小.要求长宽均不小于10." << endl;  
    cout << "请注意窗口大小,以免发生错位.建议将窗口调为最大." << endl;  
    cout << "再选择难度.请在1-10中输入1个数,1最简单,10则最难" << endl;  
    cout << "然后进入游戏画面,以方向键控制方向.祝你游戏愉快!" << endl;  
    cout << "-----------------------------------------------" << endl;  
    cin >> m >> n;  
    if (m<10 || n<10 || m>25 || n>40)  
    {  
        cout << "ERROR" << endl;  
        system("pause");  
        return 0;  
    }  
    int hard;  
    cin >> hard;  
    if (hard<=0 || hard>100)  
    {  
        cout << "ERROR" << endl;  
        system("pause");  
        return 0;  
    }  
    /*** 数据全部初始化,包括蛇长,位置,方向 ***/  
    snake_length=2;  
    clock_t a,b;  
    char ch;  
    double hard_len;  
    for (int i=0;i<=4;i++)  
    {  
        snake[i].x=1;  
        snake[i].y=5-i;  
    }  
    dir=3;  
    /*** 输出初始地图,蛇与食物 ***/  
    system("cls");  
    hide();  
    print_wall();  
    print_food();  
    print_snake();  
    locate(m+2,0);  
    cout << "Now length: ";  
    /*** 开始游戏 ***/  
    while (1)  
    {  
        /*** 难度随长度增加而提高 ***/  
        hard_len=(double)snake_length/(double) (m*n);  
        /*** 调节时间,单位是ms ***/  
        a=clock();  
        while (1)  
        {  
            b=clock();  
            if (b-a>=(int)(400-30*hard)*(1-sqrt(hard_len))) break;  
        }  
        /*** 接受键盘输入的上下左右,并以此改变方向 ***/  
        if (kbhit())  
        {  
            ch=getch();  
            if (ch==-32)  
            {  
                ch=getch();  
                switch(ch)  
                {  
                case 72:  
                    if (dir==2 || dir==3)  
                        dir=0;  
                    break;  
                case 80:  
                    if (dir==2 || dir==3)  
                        dir=1;  
                    break;  
                case 75:  
                    if (dir==0 || dir==1)  
                        dir=2;  
                    break;  
                case 77:  
                    if (dir==0 || dir==1)  
                        dir=3;  
                    break;  
                }  
            }  
        }  
        /*** 前进 ***/  
        if (!go_ahead()) break;  
        /*** 在最后输出此时长度 ***/  
        locate(m+2,12);  
        cout << snake_length;  
    }  
    system("pause");  
    return 0;  
}  

俄罗斯方块:

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <windows.h>
#include <conio.h>
using namespace std;
int block00[4][4] = { { 10,0,0,0 },{ 1,1,1,1 },{ 0,0,0,0 },{ 0,0,0,0 } };
int block01[4][4] = { { 11,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 } };
int block02[4][4] = { { 12,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,1,0,0 } };
int block03[4][4] = { { 13,0,0,0 },{ 0,1,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block04[4][4] = { { 14,0,0,0 },{ 0,0,0,0 },{ 0,1,0,0 },{ 1,1,1,0 } };
int block05[4][4] = { { 15,0,0,0 },{ 0,1,0,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block06[4][4] = { { 16,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 1,0,0,0 } };
int block07[4][4] = { { 17,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block08[4][4] = { { 18,0,0,0 },{ 0,0,0,0 },{ 0,0,1,0 },{ 1,1,1,0 } };
int block09[4][4] = { { 19,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 0,1,1,0 } };
int block10[4][4] = { { 20,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,0,1,0 } };
int block11[4][4] = { { 21,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 1,1,0,0 } };
int block12[4][4] = { { 22,0,0,0 },{ 0,0,0,0 },{ 1,0,0,0 },{ 1,1,1,0 } };
int block13[4][4] = { { 23,0,0,0 },{ 0,1,1,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block14[4][4] = { { 24,0,0,0 },{ 0,0,0,0 },{ 0,1,1,0 },{ 1,1,0,0 } };
int block15[4][4] = { { 25,0,0,0 },{ 1,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block16[4][4] = { { 26,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 0,1,1,0 } };
int block17[4][4] = { { 27,0,0,0 },{ 0,0,1,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block18[4][4] = { { 28,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 1,1,0,0 } };
 
void initialWindow(HANDLE hOut);//初始化窗口
void initialPrint(HANDLE hOut);//初始化界面
void gotoXY(HANDLE hOut, int x, int y);//移动光标
void roundBlock(HANDLE hOut, int block[4][4]);//随机生成方块并打印到下一个方块位置
bool collisionDetection(int block[4][4], int map[21][12], int x, int y);//检测碰撞
void printBlock(HANDLE hOut, int block[4][4], int x, int y);//打印方块
void clearBlock(HANDLE hOut, int block[4][4], int x, int y);//消除方块
void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//左移
void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//右移
void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//顺时针旋转90度
int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y);//加速下落
void myStop(HANDLE hOut, int block[4][4]);//游戏暂停
void gameOver(HANDLE hOut, int block[4][4], int map[21][12]);//游戏结束
void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint);//判断是否能消行并更新分值
int main()
{
    int map[21][12];
    int blockA[4][4];//候选区的方块
    int blockB[4][4];//下落中的方块
    int positionX, positionY;//方块左上角的坐标
    bool check;//检查方块还能不能下落
    char key;//用来存储按键
    int val;//用来控制下落速度
    int fraction;//用来存储得分
    int checkpoint;//用来存储关卡
    int times;
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄
    initialWindow(hOut);
initial:
    gotoXY(hOut, 0, 0);
    initialPrint(hOut);
    check = true;
    val = 50;
    fraction = 0;
    checkpoint = 1;
    times = val;
    for (int i = 0; i < 20; ++i)
    {
        for (int j = 1; j < 11; ++j)
        {
            map[i][j] = 0;
        }
    }
    for (int i = 0; i < 20; ++i)
    {
        map[i][0] = map[i][11] = 1;
    }
    for (int i = 0; i < 12; ++i)
    {
        map[20][i] = 1;
    }
 
    srand((unsigned)time(NULL));
    roundBlock(hOut, blockA);
    while (true)
    {
        if (check)
        {
            eliminateRow(hOut, map, val, fraction, checkpoint);
            check = false;
            positionX = -3;
            positionY = 4;
            if (collisionDetection(blockA, map, positionX, positionY))
            {
                for (int i = 0; i < 4; ++i)
                {
                    for (int j = 0; j < 4; ++j)
                    {
                        blockB[i][j] = blockA[i][j];
                    }
                }
                roundBlock(hOut, blockA);
            }
            else
            {
                gameOver(hOut, blockA, map);
                goto initial;
            }
        }
        printBlock(hOut, blockB, positionX, positionY);
        if (_kbhit())
        {
            key = _getch();
            switch (key)
            {
            case 72:
                myUp(hOut, blockB, map, positionX, positionY);
                break;
            case 75:
                myLeft(hOut, blockB, map, positionX, positionY);
                break;
            case 77:
                myRight(hOut, blockB, map, positionX, positionY);
                break;
            case 80:
                switch (myDown(hOut, blockB, map, positionX, positionY))
                {
                case 0:
                    check = false;
                    break;
                case 1:
                    check = true;
                    break;
                case 2:
                    gameOver(hOut, blockB, map);
                    goto initial;
                default:
                    break;
                }
                break;
            case 32:
                myStop(hOut, blockA);
                break;
            case 27:
                exit(0);
            default:
                break;
            }
        }
        Sleep(20);
        if (0 == --times)
        {
            switch (myDown(hOut, blockB, map, positionX, positionY))
            {
            case 0:
                check = false;
                break;
            case 1:
                check = true;
                break;
            case 2:
                gameOver(hOut, blockB, map);
                goto initial;
            default:
                break;
            }
            times = val;
        }
    }
    cin.get();
    return 0;
}
 
void initialWindow(HANDLE hOut)
{
    SetConsoleTitle("俄罗斯方块");
    COORD size = { 80, 25 };
    SetConsoleScreenBufferSize(hOut, size);
    SMALL_RECT rc = { 0, 0, 79, 24 };
    SetConsoleWindowInfo(hOut, true, &rc);
    CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
    SetConsoleCursorInfo(hOut, &cursor_info);
}
 
void initialPrint(HANDLE hOut)
{
    SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    for (int i = 0; i < 20; ++i)
    {
        cout << "■                    ■☆                      ☆" << endl;
    }
    gotoXY(hOut, 26, 0);
    cout << "☆☆☆☆☆☆☆☆☆☆☆";
    gotoXY(hOut, 0, 20);
    cout << "■■■■■■■■■■■■☆☆☆☆☆☆☆☆☆☆☆☆☆";
    gotoXY(hOut, 26, 1);
    cout << "分    数:      ";
    gotoXY(hOut, 26, 2);
    cout << "关    卡:      ";
    gotoXY(hOut, 26, 4);
    cout << "下一方块:";
    gotoXY(hOut, 26, 9);
    cout << "操作方法:";
    gotoXY(hOut, 30, 11);
    cout << "↑:旋转 ↓:速降";
    gotoXY(hOut, 30, 12);
    cout << "→:右移 ←:左移";
    gotoXY(hOut, 30, 13);
    cout << "空格键:开始/暂停";
    gotoXY(hOut, 30, 14);
    cout << "Esc 键:退出";
    gotoXY(hOut, 26, 16);
    cout << "关    于:";
    gotoXY(hOut, 30, 18);
    cout << "俄罗斯方块V1.0";
    gotoXY(hOut, 35, 19);
    cout << "作者:徐云皓";
}
 
void gotoXY(HANDLE hOut, int x, int y)
{
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(hOut, pos);
}
 
void roundBlock(HANDLE hOut, int block[4][4])
{
    clearBlock(hOut, block, 5, 15);
    switch (rand() % 19)
    {
    case 0:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block00[i][j];
            }
        }
        break;
    case 1:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block01[i][j];
            }
        }
        break;
    case 2:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block02[i][j];
            }
        }
        break;
    case 3:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block03[i][j];
            }
        }
        break;
    case 4:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block04[i][j];
            }
        }
        break;
    case 5:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block05[i][j];
            }
        }
        break;
    case 6:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block06[i][j];
            }
        }
        break;
    case 7:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block07[i][j];
            }
        }
        break;
    case 8:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block08[i][j];
            }
        }
        break;
    case 9:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block09[i][j];
            }
        }
        break;
    case 10:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block10[i][j];
            }
        }
        break;
    case 11:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block11[i][j];
            }
        }
        break;
    case 12:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block12[i][j];
            }
        }
        break;
    case 13:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block13[i][j];
            }
        }
        break;
    case 14:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block14[i][j];
            }
        }
        break;
    case 15:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block15[i][j];
            }
        }
        break;
    case 16:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block16[i][j];
            }
        }
        break;
    case 17:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block17[i][j];
            }
        }
        break;
    case 18:
        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                block[i][j] = block18[i][j];
            }
        }
        break;
    default:
        break;
    }
    printBlock(hOut, block, 5, 15);
}
 
bool collisionDetection(int block[4][4], int map[21][12], int x, int y)
{
    for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            if (x + i >= 0 && y + j >= 0 && map[x + i][y + j] == 1 && block[i][j] == 1)
            {
                return false;
            }
        }
    }
    return true;
}
 
void printBlock(HANDLE hOut, int block[4][4], int x, int y)
{
    switch (block[0][0])
    {
    case 10:
    case 11:
        SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
        break;
    case 12:
    case 13:
    case 14:
    case 15:
        SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
        break;
    case 16:
    case 17:
    case 18:
    case 19:
        SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
        break;
    case 20:
    case 21:
    case 22:
    case 23:
        SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
        break;
    case 24:
    case 25:
        SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
        break;
    case 26:
    case 27:
        SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
        break;
    case 28:
        SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
        break;
    default:
        break;
    }
    for (int i = 0; i < 4; ++i)
    {
        if (i + x >= 0)
        {
            for (int j = 0; j < 4; ++j)
            {
                if (block[i][j] == 1)
                {
 
                    gotoXY(hOut, 2 * (y + j), x + i);
                    cout << "■";
                }
            }
        }
    }
}
 
void clearBlock(HANDLE hOut, int block[4][4], int x, int y)
{
    for (int i = 0; i < 4; ++i)
    {
        if (i + x >= 0)
        {
            for (int j = 0; j < 4; ++j)
            {
                if (block[i][j] == 1)
                {
                    gotoXY(hOut, 2 * (y + j), x + i);
                    cout << "  ";
                }
            }
        }
    }
}
 
void gameOver(HANDLE hOut, int block[4][4], int map[21][12])
{
    SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
    gotoXY(hOut, 9, 8);
    cout << "GAME OVER";
    gotoXY(hOut, 8, 9);
    cout << "空格键:重来";
    gotoXY(hOut, 8, 10);
    cout << "ESC键:退出";
    char key;
    while (true)
    {
        key = _getch();
        if (key == 32)
        {
            return;
        }
        if (key == 27)
        {
            exit(0);
        }
    }
}
 
int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y)
{
    if (collisionDetection(block, map, x + 1, y))
    {
        clearBlock(hOut, block, x, y);
        ++x;
        return 0;
    }
    if (x < 0)
    {
        return 2;
    }
    for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            if (block[i][j] == 1)
            {
                map[x + i][y + j] = 1;
                SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
                gotoXY(hOut, 2 * (y + j), x + i);
                cout << "■";
            }
        }
    }
    return 1;
}
 
void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
    if (collisionDetection(block, map, x, y - 1))
    {
        clearBlock(hOut, block, x, y);
        --y;
    }
}
 
void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
    if (collisionDetection(block, map, x, y + 1))
    {
        clearBlock(hOut, block, x, y);
        ++y;
    }
}
 
void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
    switch (block[0][0])
    {
    case 10:
        if (collisionDetection(block01, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block01[i][j];
                }
            }
        }
        break;
    case 11:
        if (collisionDetection(block00, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block00[i][j];
                }
            }
        }
        else if (collisionDetection(block00, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block00[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block00, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block00[i][j];
                }
            }
            ++y;
        }
        else if (collisionDetection(block00, map, x, y - 2))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block00[i][j];
                }
            }
            y = y - 2;
        }
        else if (collisionDetection(block00, map, x, y + 2))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block00[i][j];
                }
            }
            y = y + 2;
        }
        break;
    case 12:
        if (collisionDetection(block03, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block03[i][j];
                }
            }
        }
        else if (collisionDetection(block03, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block03[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block03, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block03[i][j];
                }
            }
            ++y;
        }
        break;
    case 13:
        if (collisionDetection(block04, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block04[i][j];
                }
            }
        }
        else if (collisionDetection(block04, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block04[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block04, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block04[i][j];
                }
            }
            ++y;
        }
        break;
    case 14:
        if (collisionDetection(block05, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block05[i][j];
                }
            }
        }
        else if (collisionDetection(block05, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block05[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block05, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block05[i][j];
                }
            }
            ++y;
        }
        break;
    case 15:
        if (collisionDetection(block02, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block02[i][j];
                }
            }
        }
        else if (collisionDetection(block02, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block02[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block02, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block02[i][j];
                }
            }
            ++y;
        }
        break;
 
    case 16:
        if (collisionDetection(block07, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block07[i][j];
                }
            }
        }
        else if (collisionDetection(block07, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block07[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block07, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block07[i][j];
                }
            }
            ++y;
        }
        break;
    case 17:
        if (collisionDetection(block08, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block08[i][j];
                }
            }
        }
        else if (collisionDetection(block08, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block08[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block08, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block08[i][j];
                }
            }
            ++y;
        }
        break;
    case 18:
        if (collisionDetection(block09, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block09[i][j];
                }
            }
        }
        else if (collisionDetection(block09, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block09[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block09, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block09[i][j];
                }
            }
            ++y;
        }
        break;
    case 19:
        if (collisionDetection(block06, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block06[i][j];
                }
            }
        }
        else if (collisionDetection(block06, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block06[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block06, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block06[i][j];
                }
            }
            ++y;
        }
        break;
    case 20:
        if (collisionDetection(block11, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block11[i][j];
                }
            }
        }
        else if (collisionDetection(block11, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block11[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block11, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block11[i][j];
                }
            }
            ++y;
        }
        break;
    case 21:
        if (collisionDetection(block12, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block12[i][j];
                }
            }
        }
        else if (collisionDetection(block12, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block12[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block12, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block12[i][j];
                }
            }
            ++y;
        }
        break;
    case 22:
        if (collisionDetection(block13, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block13[i][j];
                }
            }
        }
        else if (collisionDetection(block13, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block13[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block13, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block13[i][j];
                }
            }
            ++y;
        }
        break;
    case 23:
        if (collisionDetection(block10, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block10[i][j];
                }
            }
        }
        else if (collisionDetection(block10, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block10[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block10, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block10[i][j];
                }
            }
            ++y;
        }
        break;
    case 24:
        if (collisionDetection(block15, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block15[i][j];
                }
            }
        }
        else if (collisionDetection(block15, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block15[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block15, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block15[i][j];
                }
            }
            ++y;
        }
        break;
    case 25:
        if (collisionDetection(block14, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block14[i][j];
                }
            }
        }
        else if (collisionDetection(block14, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block14[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block14, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block14[i][j];
                }
            }
            ++y;
        }
        break;
    case 26:
        if (collisionDetection(block17, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block17[i][j];
                }
            }
        }
        else if (collisionDetection(block17, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block17[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block17, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block17[i][j];
                }
            }
            ++y;
        }
        break;
    case 27:
        if (collisionDetection(block16, map, x, y))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block16[i][j];
                }
            }
        }
        else if (collisionDetection(block16, map, x, y - 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block16[i][j];
                }
            }
            --y;
        }
        else if (collisionDetection(block16, map, x, y + 1))
        {
            clearBlock(hOut, block, x, y);
            for (int i = 0; i < 4; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    block[i][j] = block16[i][j];
                }
            }
            ++y;
        }
        break;
    default:
        break;
    }
}
 
void myStop(HANDLE hOut, int block[4][4])
{
    clearBlock(hOut, block, 5, 15);
    SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
    gotoXY(hOut, 30, 7);
    cout << "游戏暂停";
    char key;
    while (true)
    {
        key = _getch();
        if (key == 32)
        {
            gotoXY(hOut, 30, 7);
            cout << "        ";
            printBlock(hOut, block, 5, 15);
            return;
        }
        if (key == 27)
        {
            exit(0);
        }
    }
}
 
void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint)
{
    SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
    for (int i = 19; i >= 0; --i)
    {
        int x = 0;
        for (int j = 1; j < 11; ++j)
        {
            x += map[i][j];
        }
        if (x == 10)
        {
            fraction += 100;
            if (val > 1 && fraction / 1000 + 1 != checkpoint)
            {
                checkpoint = fraction / 1000 + 1;
                val -= 5;
            }
            for (int m = i; m > 0; --m)
            {
                for (int n = 1; n < 11; ++n)
                {
                    map[m][n] = map[m - 1][n];
                    gotoXY(hOut, 2 * n, m);
                    if (map[m][n] == 1)
                    {
                        cout << "■";
                    }
                    else
                    {
                        cout << "  ";
                    }
                }
            }
            ++i;
        }
    }
    gotoXY(hOut, 36, 1);
    cout << fraction;
    gotoXY(hOut, 36, 2);
    cout << checkpoint;
}

走迷宫

#include <iostream>
#include <cstdio>
#include <deque>
#include <windows.h>
using namespace std;
class node
{
public:
    int x,y;
    int lastOpt;
};
deque<node> sta;
int x,y;
int endx,endy;
int mapW,mapH;
int steps;
int xopt[5]= {0,0,1,0,-1};
int yopt[5]= {0,1,0,-1,0};
int map[100][100]=
{
 
};
void init()
{
    x = 1;
    y = 1;
    endx = 1;
    endy = 9;
    mapH = 10;
    mapW = 10;
    for(int i=0; i<=mapH; i++)
        for(int j=0; j<=mapW; j++)
        {
            if(i==0 ||j==0 ||i==mapH||j==mapW)
                map[i][j]=-1;
        }
 
    steps=0;
    map[1][2]=-1;
    map[2][2]=-1;
    map[3][2]=-1;
    map[4][2]=-1;
 
    map[6][2]=-1;
    map[7][2]=-1;
    map[8][2]=-1;
    map[9][2]=-1;
    map[9][3]=-1;
    map[8][3]=-1;
    map[1][4]=-1;
    map[3][4]=-1;
    map[4][4]=-1;
    map[5][4]=-1;
    map[6][4]=-1;
    map[7][4]=-1;
    map[1][6]=-1;
    map[2][6]=-1;
    map[3][6]=-1;
    map[4][6]=-1;
    map[5][6]=-1;
    map[6][6]=-1;
    map[7][6]=-1;
    map[8][6]=-1;
    map[8][7]=-1;
    map[8][8]=-1;
    map[7][8]=-1;
    map[6][8]=-1;
    map[5][8]=-1;
    map[4][8]=-1;
    map[3][8]=-1;
    map[2][8]=-1;
    map[1][8]=-1;
 
    map[endx][endy]=5;
}
 
void dis()
{
    system("cls");
    int ori =  map[x][y];
    map[x][y]=1;
    for(int i=0; i<=mapH; ++i)
    {
        for(int j=0; j<=mapW; ++j)
        {
            if(map[i][j]==0)
                printf("  ");
            else if(map[i][j]==-1)
                printf(" #");
            else if(map[i][j]==1)
                printf(" @");
            else if(map[i][j]==2)
                printf(" .");
            else if(map[i][j]==5)
                printf(" !");
        }
        cout<<i<<endl;
    }
    for(int j=0; j<=mapW; ++j)
        cout<<j<<" ";
    printf("\n\n > steps:%d  Exit:(%d,%d)\n",steps,endx,endy);
    map[x][y] = ori;
}
int main()
{
    init();
}

0
0
徐云皓
徐云皓
新手天翼
新手天翼

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

 

 

 

 

 

 

贪吃蛇

 

0
0
黄昊轩
黄昊轩
新手守护
新手守护

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

我要回答