俄罗斯方块(c++版)

由不会IT的it个人制作,未经过作者同意,禁止私自转载

如需转载,联系作者qq:2437401610

程序:

#include<bits/stdc++.h> 
#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 gotoXY(HANDLE hOut,int x,int y)
{
    COORD pos;
    pos.X=x;
    pos.Y=y;
    SetConsoleCursorPosition(hOut,pos);
}
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 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 << "    ˹    ";
    gotoXY(hOut, 35, 19);
}
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 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);
}
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-=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+=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]=block04[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]=block04[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==0)
        {
            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;
}
int main()
{
    int map[21][12],blockA[4][4],blockB[4][4];
    int positionX, positionY,val,fraction=0,checkpoint=1,times;
    bool check=true;
    char key;
    HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
    initialWindow(hOut);
initial:
    gotoXY(hOut,0,0);
    initialPrint(hOut);
    val=50;
    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;
}

禁止盗用

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值