C++消消乐

2023-10-27

//键盘版
#include<bits/stdc++.h>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<cmath>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
int m[51][51];
int T,S,mS,Die;
int G,gx,sx;
void Color(int a)
{
    if(a==-1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);
    if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
    if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
    if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
    if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
    if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
    if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
    if(a==11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);
    if(a==12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
    if(a==13) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);
    if(a==14) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
    if(a==15) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);
    if(a==16) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
}
void SetPos(int x,int y)
{
    COORD pos;
    pos.X=y*2+2,pos.Y=18-x;
    if(y==-1) pos.X++;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void Map()
{
    if(mS<S) mS=S;Color(0);
    SetPos(17,1),cout<<"Score: "<<max(0,S)<<"      ";
    SetPos(16,1),cout<<"MaxScore: "<<mS<<"      ";
    for(int i=1;i<=11;i++)
    for(int j=1;j<=10;j++)
    {
        if(m[i][j]==0&&i!=11) SetPos(i,j),cout<<"  ";
        if(m[i][j]==1) SetPos(i,j),Color(5),cout<<"█",m[i][j]=0;
        if(m[i][j]==120) SetPos(i,j),Color(5),cout<<"★";
        else if(m[i][j]>=100)
        {
            int R=m[i][j]/100;
            SetPos(i,j),Color(m[i][j]%100);
            if(R==1) cout<<"▉";if(R==2) cout<<"█▉";if(R==3) cout<<"██▉";
            if(R==4) cout<<"███▉";if(R==5) cout<<"████▉";
            j+=R-1;
        }
    }
}
void Down(int a,int x)
{
    int B=0,s[11];
    if(a==0)
    {
        for(int i=2;i<=10;i++)
        for(int j=1;j<=10;j++)
        {
            if(m[i][j]>=100)
            {
                int b=0,R=m[i][j]/100;
                memset(s,0,sizeof(s));
                for(int k=1;k<=10;k++) {if(m[i-1][k]>=100) {int R=m[i-1][k]/100;for(int l=k;l<=k+R-1;l++) s[l]=1;k+=R-1;}}
                for(int k=j;k<j+R;k++) if(s[k]!=0) b=1;
                if(b==0) {x++;swap(m[i-1][j],m[i][j]);B=1;if(x>10) Sleep(10);else if(x>5) Sleep(50);else Sleep(100);Map();}
            }
        }
    }
    if(a==1)
    {
        for(int i=9;i>=1;i--)
        for(int j=1;j<=10;j++)
        {
            if(m[i][j]>=100)
            {
                int b=0,R=m[i][j]/100;
                memset(s,0,sizeof(s));
                for(int k=1;k<=10;k++) {if(m[i+1][k]>=100) {int R=m[i+1][k]/100;for(int l=k;l<=k+R-1;l++) s[l]=1;k+=R-1;}}
                for(int k=j;k<j+R;k++) if(s[k]!=0) b=1;
                if(b==0) {x++;swap(m[i+1][j],m[i][j]);B=1;if(x>10) Sleep(10);else if(x>5) Sleep(50);else Sleep(100);Map();}
            }
        }
    }
    if(B!=0) Down(a,x);
}
void Ji(int y,int a);
void Sheng()
{
    int n=0,f=0;
    N: S++;n++;
    if(G==0) for(int i=12;i>0;i--) swap(m[i],m[i-1]);
    if(G==1) for(int k=1;k<=10;k++) if(m[1][k]>=100) f=1;
    if(f==1) return;
    M: int B,C; B=C=0;
    for(int i=1;i<=10;i++)
    {
        int r=rand()%6+1,R=rand()%max(10,30-S/20)+1; 
        if(T%2==0) r+=10; if(T>30&&R==6) R=rand()%2+3;
        if(R<=3||(T>5&&R==4)||(T>40&&R==5)) {B=1;if(10-i+1<R) R=10-i+1;m[1][i]=R*100+r;i+=R-1;}
        else C=1;
    }
    if(B==0||C==0) goto M;
    if(T!=0&&T%7==0&&n==1) {int rr=rand()%10+1;Ji(rr,1);m[1][rr]=120;}
    for(int k=1;k<=10;k++) if(m[8][k]>=100) return;
    if(T>20&&n<2) {Map();Sleep(500);goto N;}
    if(T>50&&n<3) {Map();Sleep(500);goto N;}
}
void Star(int x,int y);
int Lie()
{
    int f=0;
    for(int i=1;i<=10;i++)
    for(int j=1;j<=10;j++)
    {
        int R=m[i][j];
        if(m[i][j]>=400) f=1;
        if(m[i][j]>=510) m[i][j]=m[i][j+2]=m[i][j+4]=R-400,m[i][j+1]=m[i][j+3]=R-410;
        else if(m[i][j]>=500) m[i][j]=m[i][j+2]=m[i][j+4]=R-400,m[i][j+1]=m[i][j+3]=R-390;
        else if(m[i][j]>=410) m[i][j]=m[i][j+2]=R-300,m[i][j+1]=m[i][j+3]=R-310;
        else if(m[i][j]>=400) m[i][j]=m[i][j+2]=R-300,m[i][j+1]=m[i][j+3]=R-290;
    }return f;
}
void Ji(int y,int a)
{
    int st=0,t[11][2],x=10;
    if(a==1) x=1;
    for(int i=1;i<=x;i++)
    {
        if(m[i][y]==120) st++,t[st][0]=i,t[st][1]=y;
        else if(m[i][y]>=200) m[i][y+1]=m[i][y]-100;
        else if(m[i][y-4]>=500) m[i][y-4]-=100;
        else if(m[i][y-3]>=400) m[i][y-3]-=100;
        else if(m[i][y-2]>=300) m[i][y-2]-=100;
        else if(m[i][y-1]>=200) m[i][y-1]-=100;
        m[i][y]=1;
    }
    for(int i=1;i<=st;i++) Star(t[i][0],t[i][1]);
}
bool Kline();
void Star(int x,int y)
{
    K:
    int D;int R=rand()%5+1;Color(5);S+=5;
    SetPos(15,1); cout<<"                       ";SetPos(14,1); cout<<"                       ";SetPos(13,1); cout<<"                       ";
    if(R==1) {SetPos(14,1),cout<<"激光!";Sleep(1000);int r=y+(rand()%2)*2-1;if(y==1) r=y+1;if(y==10) r=y-1;Ji(y,0);Ji(r,0);Ji(y,0);Ji(r,0);Map();Sleep(500);Map();}
    if(R==2) {SetPos(14,1),cout<<"反重力!";Sleep(1000);gx+=6;G=1;Down(G,0);while(Kline());}
    if(R==3) {SetPos(14,1),cout<<"封冻时间!";Sleep(1000);sx+=6;Map();}
    if(R==4) {for(int i=1;i<=10;i++) if(m[10-G*9][i]!=0||m[9-G*7][i]!=0) {D=1;break;}if(D==1) goto K;SetPos(14,1),cout<<"下雨!";Sleep(1000);for(int i=1;i<=10;i++) {if(m[10-G*9][i]>=100) i+=m[10-G*9][i]/100-1; else m[10-G*9][i]=101+5*(i%3);}while(Kline());}
    if(R==5) {if(Lie()==0) goto K;SetPos(14,1),cout<<"四分五裂!";Sleep(1000);Map();while(Kline());}
}
bool Kline()
{
    int B=0,b,st=0,t[11][2];
    Down(G,0);
    for(int i=1;i<=10;i++)
    {
        b=0;
        for(int j=1;j<=10;j++)
        {
            if(m[i][j]>=100)
            {
                int R=m[i][j]/100;
                j+=R-1;
            }
            else b=1;
        }
        if(b==0)
        {
            for(int k=1;k<=10;k++) {if(m[i][k]==120) st++,t[st][0]=i,t[st][1]=k;m[i][k]=1;}
            B=1;S+=10;Map();Sleep(200);Map();Down(G,0);
        }
    }for(int i=1;i<=st;i++) Star(t[i][0],t[i][1]);
    return B;
}
void Move()
{
    int q,w,s[12],d,dd;
    char e;
    M:
    Color(0);SetPos(15,1); cout<<"请输入需要移动块的";
    SetPos(14,1); cout<<"任意方块的行,列数。      "; 
    SetPos(13,1); Color(5),cout<<"回车";Color(0),cout<<"确定,按 0";
    if(sx==0) cout<<" 跳过。";else Color(1),cout<<"终止冻结.";Color(0);
    SetPos(12,1); cout<<"   →              ";
    SetPos(12,4); Color(5);scanf("%d",&q);
    if(q==0&&sx!=0) sx=0;
    else if(q!=0)
    {
        scanf("%d",&w);
        if(m[q][w]>=100) w=w;
        else if(m[q][w-1]>=200) w--;
        else if(m[q][w-2]>=300) w-=2;
        else if(m[q][w-3]>=400) w-=3;
        else if(m[q][w-4]>=500) w-=4;
        else
        {
            Color(3); 
            SetPos(12,3); cout<<"无效输入。";Sleep(800);
            SetPos(12,1); cout<<"                   ";
            goto M;
        }
        d=dd=w;
        SetPos(q,w);Color(0);
        int R=m[q][w]/100;
        if(m[q][w]==120) cout<<"★";
        else{if(R==1) cout<<"▉";if(R==2) cout<<"█▉";if(R==3) cout<<"██▉";if(R==4) cout<<"███▉";if(R==5) cout<<"████▉";}

        SetPos(15,1); cout<<"                       ";SetPos(14,1); cout<<"                       ";SetPos(13,1); cout<<"                       ";
        SetPos(14,1); cout<<"按←→水平控制白亮块。";
        SetPos(13,1); cout<<"按↓确定,按↑撤销。";
        memset(s,0,sizeof(s));
        for(int i=1;i<=10;i++) {if(m[q][i]>=100&&i!=w) {R=m[q][i]/100;for(int j=i;j<=i+R-1;j++) s[j]=1;i+=R-1;}}
        R=m[q][w]/100;
        while(e!=80)
        {
            e=_getch();
            if(e==75&&s[d-1]==0&&d>1) swap(m[q][d],m[q][d-1]),d--,Map();
            if(e==77&&s[d+R]==0&&d+R<=10) swap(m[q][d],m[q][d+1]),d++,Map();
            if(e==72) {swap(m[q][d],m[q][dd]),Map();goto M;}
        }
    }SetPos(13,1); cout<<"                       ";SetPos(14,1);Color(0); cout<<"正在处理...请稍后...    ";SetPos(15,1); cout<<"                       ";
    while(Kline());
}   
void Start()
{
    system("cls");Color(0);
    SetPos(17,2); cout<<"重 力 消 消 乐 2.0";
    SetPos(16,2); cout<<"Gravity  Blast";Color(1); 
    SetPos(15,-1); cout<<"-------------[ 键盘操作 ]-";Color(0);
    SetPos(14,2); cout<<"这是胎神大大编的";
    SetPos(13,2); cout<<"第一个益智游戏。"; 
    SetPos(12,-1); cout<<"--------------------------";
    SetPos(11,-1); cout<<"游戏规则:";
    SetPos(10,0); cout<<"每一回合会从底部产生块。"; 
    SetPos(8,0); cout<<"选择一个块来水平移动,"; 
    SetPos(6,0); cout<<"落下后形成一行可消除得分!";
    SetPos(4,0); cout<<"若有块被刺破,游戏结束。"; 
    SetPos(3,-1); cout<<"--------------------------";
    SetPos(2,-1); cout<<"另:星星被消后有特殊效果!";
    SetPos(0,1); cout<<"按y开始游戏!";
    char e;while(e!='y') e=_getch();system("cls");
    SetPos(0,1); cout<<"1 2 3 4 5 6 7 8 9 10";
    for(int i=1;i<=10;i++) SetPos(i,11),cout<<' '<<i,SetPos(i,-1),cout<<setw(2)<<i;
    SetPos(14,1); cout<<"正在准备...请稍后...    ";
    SetPos(11,0);Color(4);
    cout<<"▼▼▼▼▼▼▼▼▼▼▼▼";
}
int main()
{
    system("mode con cols=28 lines=20");
    CONSOLE_CURSOR_INFO cursor_info={1,0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
    srand((unsigned)time(NULL));
    St: S=T=-5;Die=G=gx=sx=0;
    memset(m,0,sizeof(m)); Start();
    for(int i=1;i<=4;i++) {T++,Sheng(),Map();while(Kline());Sleep(500);}
    while(1)
    {
        T++;int f=0;
        if(gx!=0) gx--;if(gx==0) G=0;Down(G,0);
        if(sx!=0) sx--;else Sheng();Map();
        for(int i=1;i<=10;i++) {if(m[11][i]!=0) Die=1;} if(Die==1) break;
        while(Kline());Move();
        Sleep(500);
    }
    system("color 4F");Sleep(1000);
    SetPos(17,6),Color(0),cout<<" You Die! ";
    SetPos(16,6),cout<<" 按y重玩。";
    char e;while(e!='y') e=_getch(); goto St; 
    return 0;
}
//鼠标板
#include<bits/stdc++.h>
#include<windows.h>
#include<stdio.h>
#include<conio.h> 
#include<time.h>
#include<cmath>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
int m[51][51];
int T,S,mS,Die;
int G,gx,sx;
int mouse;
void Color(int a){if(a==-1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);if(a==11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);if(a==13) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);if(a==14) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);if(a==15) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);if(a==16) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);}
POINT Windowpos(){POINT pt;GetCursorPos(&pt);HWND h=GetForegroundWindow();ScreenToClient(h,&pt);pt.x=(pt.x+4)/16-1;pt.y=18-pt.y/16;swap(pt.x,pt.y);return pt;}
void SetPos(int x,int y){COORD pos;pos.X=y*2+2,pos.Y=18-x;if(y==-1) pos.X++;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}
void Map()
{
    if(mS<S) mS=S;Color(0);SetPos(17,1),cout<<"Score: "<<max(0,S)<<"      ";SetPos(16,1),cout<<"MaxScore: "<<mS<<"      ";
    for(int i=1;i<=11;i++)
    for(int j=1;j<=10;j++){if(m[i][j]==0&&i!=11) SetPos(i,j),cout<<"  ";if(m[i][j]==1) SetPos(i,j),Color(5),cout<<"█",m[i][j]=0;if(m[i][j]==120) SetPos(i,j),Color(5),cout<<"★";else if(m[i][j]>=100){int R=m[i][j]/100;SetPos(i,j),Color(m[i][j]%100);if(R==1) cout<<"▉";if(R==2) cout<<"█▉";if(R==3) cout<<"██▉";if(R==4) cout<<"███▉";if(R==5) cout<<"████▉";j+=R-1;}}
}
void Down(int a,int x)
{
    int B=0,s[11];
    if(a==0)
    {
        for(int i=2;i<=10;i++)
        for(int j=1;j<=10;j++)
        {
            if(m[i][j]>=100)
            {
                int b=0,R=m[i][j]/100;memset(s,0,sizeof(s));
                for(int k=1;k<=10;k++) {if(m[i-1][k]>=100) {int R=m[i-1][k]/100;for(int l=k;l<=k+R-1;l++) s[l]=1;k+=R-1;}}for(int k=j;k<j+R;k++) if(s[k]!=0) b=1;if(b==0) {x++;swap(m[i-1][j],m[i][j]);B=1;if(x>10) Sleep(10);else if(x>5) Sleep(50);else Sleep(100);Map();}
            }
        }
    }
    if(a==1)
    {
        for(int i=9;i>=1;i--)
        for(int j=1;j<=10;j++)
        if(m[i][j]>=100){int b=0,R=m[i][j]/100;memset(s,0,sizeof(s));for(int k=1;k<=10;k++) {if(m[i+1][k]>=100) {int R=m[i+1][k]/100;for(int l=k;l<=k+R-1;l++) s[l]=1;k+=R-1;}}for(int k=j;k<j+R;k++) if(s[k]!=0) b=1;if(b==0) {x++;swap(m[i+1][j],m[i][j]);B=1;if(x>10) Sleep(10);else if(x>5) Sleep(50);else Sleep(100);Map();}}
    }
    if(B!=0) Down(a,x);
}
void Ji(int y,int a);
void Sheng()
{
    int n=0,f=0;
    N: S++;n++;
    if(G==0) for(int i=12;i>0;i--) swap(m[i],m[i-1]);if(G==1) for(int k=1;k<=10;k++) if(m[1][k]>=100) f=1;
    if(f==1) return;
    M: int B,C; B=C=0;
    for(int i=1;i<=10;i++)
    {
        int r=rand()%6+1,R=rand()%max(10,30-S/20)+1; 
        if(T%2==0) r+=10; if(T>30&&R==6) R=rand()%2+3;
        if(R<=3||(T>5&&R==4)||(T>40&&R==5)) {B=1;if(10-i+1<R) R=10-i+1;m[1][i]=R*100+r;i+=R-1;}
        else C=1;
    }
    if(B==0||C==0) goto M;if(T!=0&&T%7==0&&n==1) {int rr=rand()%10+1;Ji(rr,1);m[1][rr]=120;}
    for(int k=1;k<=10;k++) if(m[8][k]>=100) return;if(T>20&&n<2) {Map();Sleep(500);goto N;}if(T>50&&n<3) {Map();Sleep(500);goto N;}
}
void Star(int x,int y);
int Lie()
{
    int f=0;
    for(int i=1;i<=10;i++)
    for(int j=1;j<=10;j++){int R=m[i][j];if(m[i][j]>=400) f=1;if(m[i][j]>=510) m[i][j]=m[i][j+2]=m[i][j+4]=R-400,m[i][j+1]=m[i][j+3]=R-410;else if(m[i][j]>=500) m[i][j]=m[i][j+2]=m[i][j+4]=R-400,m[i][j+1]=m[i][j+3]=R-390;else if(m[i][j]>=410) m[i][j]=m[i][j+2]=R-300,m[i][j+1]=m[i][j+3]=R-310;else if(m[i][j]>=400) m[i][j]=m[i][j+2]=R-300,m[i][j+1]=m[i][j+3]=R-290;}
    return f;
}
void Ji(int y,int a)
{
    int st=0,t[11][2],x=10;if(a==1) x=1;
    for(int i=1;i<=x;i++){if(m[i][y]==120) st++,t[st][0]=i,t[st][1]=y;else if(m[i][y]>=200) m[i][y+1]=m[i][y]-100;else if(m[i][y-4]>=500) m[i][y-4]-=100;else if(m[i][y-3]>=400) m[i][y-3]-=100;else if(m[i][y-2]>=300) m[i][y-2]-=100;else if(m[i][y-1]>=200) m[i][y-1]-=100;m[i][y]=1;}
    for(int i=1;i<=st;i++) Star(t[i][0],t[i][1]);
}
bool Kline();
void Star(int x,int y)
{
    K:
    int D;int R=rand()%5+1;Color(5);S+=5;
    SetPos(15,1); cout<<"                       ";SetPos(14,1); cout<<"                       ";SetPos(13,1); cout<<"                       ";
    if(R==1) {SetPos(14,1),cout<<"激光!";Sleep(1000);int r=y+(rand()%2)*2-1;if(y==1) r=y+1;if(y==10) r=y-1;Ji(y,0);Ji(r,0);Ji(y,0);Ji(r,0);Map();Sleep(500);Map();}
    if(R==2) {SetPos(14,1),cout<<"反重力!";Sleep(1000);gx+=6;G=1;Down(G,0);while(Kline());}
    if(R==3) {SetPos(14,1),cout<<"封冻时间!";Sleep(1000);sx+=6;Map();}
    if(R==4) {for(int i=1;i<=10;i++) if(m[10-G*9][i]!=0||m[9-G*7][i]!=0) {D=1;break;}if(D==1) goto K;SetPos(14,1),cout<<"下雨!";Sleep(1000);for(int i=1;i<=10;i++) {if(m[10-G*9][i]>=100) i+=m[10-G*9][i]/100-1; else m[10-G*9][i]=101+5*(i%3);}while(Kline());}
    if(R==5) {if(Lie()==0) goto K;SetPos(14,1),cout<<"四分五裂!";Sleep(1000);Map();while(Kline());}
}
bool Kline()
{
    int B=0,b,st=0,t[11][2];
    Down(G,0);
    for(int i=1;i<=10;i++)
    {
        b=0;
        for(int j=1;j<=10;j++){if(m[i][j]>=100){int R=m[i][j]/100;j+=R-1;}else b=1;}
        if(b==0){for(int k=1;k<=10;k++) {if(m[i][k]==120) st++,t[st][0]=i,t[st][1]=k;m[i][k]=1;}B=1;S+=10;Map();Sleep(200);Map();Down(G,0);}
    }for(int i=1;i<=st;i++) Star(t[i][0],t[i][1]);
    return B;
}
void Move()
{
    int q,w,s[12],d,dd;
    char e;
    M:
    POINT pt;
    Color(0);SetPos(14,1); cout<<"请双击需要移动块。   ";
    SetPos(13,1); cout<<"左键确定,按 ";Color(5);cout<<"这里";Color(0);
    if(sx==0) cout<<" 跳过。";else cout<<"终止冻结.";
    while(1) {mouse=GetAsyncKeyState(VK_LBUTTON)&0x8000;pt=Windowpos();if(mouse) break;}
    q=1;if(pt.x==13&&pt.y>=7&&pt.y<=8) q=0;
    if(q==0&&sx!=0) sx=0;
    else if(q!=0)
    {
        q=pt.x,w=pt.y;
        if(m[q][w]>=100) w=w;else if(m[q][w-1]>=200) w--;else if(m[q][w-2]>=300) w-=2;else if(m[q][w-3]>=400) w-=3;else if(m[q][w-4]>=500) w-=4;
        else{Color(3);SetPos(12,3); cout<<"无效点击。";Sleep(800);SetPos(12,1); cout<<"                   ";goto M;}
        d=dd=w;
        SetPos(q,w);Color(0);
        int R=m[q][w]/100;if(m[q][w]==120) cout<<"★";
        else{if(R==1) cout<<"▉";if(R==2) cout<<"█▉";if(R==3) cout<<"██▉";if(R==4) cout<<"███▉";if(R==5) cout<<"████▉";}
        SetPos(15,1); cout<<"                       ";SetPos(14,1); cout<<"                       ";SetPos(13,1); cout<<"                       ";
        SetPos(14,1); cout<<"按←→水平控制白亮块。";SetPos(13,1); cout<<"按↓确定,按↑撤销。";
        memset(s,0,sizeof(s));for(int i=1;i<=10;i++) {if(m[q][i]>=100&&i!=w) {R=m[q][i]/100;for(int j=i;j<=i+R-1;j++) s[j]=1;i+=R-1;}}
        R=m[q][w]/100;
        while(e!=80){e=_getch();if(e==75&&s[d-1]==0&&d>1) swap(m[q][d],m[q][d-1]),d--,Map();if(e==77&&s[d+R]==0&&d+R<=10) swap(m[q][d],m[q][d+1]),d++,Map();if(e==72) {swap(m[q][d],m[q][dd]),Map();goto M;}}
    }SetPos(13,1); cout<<"                       ";SetPos(14,1);Color(0); cout<<"正在处理...请稍后...    ";SetPos(15,1); cout<<"                       ";
    while(Kline());
}   
void Start(){system("cls");Color(0);SetPos(17,2); cout<<"重 力 消 消 乐 2.0";SetPos(16,2); cout<<"Gravity  Blast";SetPos(15,-1); cout<<"--------------------------";SetPos(14,2); cout<<"这是胎神大大编的";SetPos(13,2); cout<<"第一个益智游戏。"; SetPos(12,-1); cout<<"--------------------------";SetPos(11,-1); cout<<"游戏规则:";SetPos(10,0); cout<<"每一回合会从底部产生块。"; SetPos(8,0); cout<<"选择一个块来水平移动,"; SetPos(6,0); cout<<"落下后形成一行可消除得分!";SetPos(4,0); cout<<"若有块被刺破,游戏结束。"; SetPos(3,-1); cout<<"--------------------------";SetPos(2,-1); cout<<"另:星星被消后有特殊效果!";SetPos(0,1); cout<<"按y开始游戏!";char e;while(e!='y') e=_getch();system("cls");Color(-1);SetPos(0,0); cout<<"████████████";for(int i=1;i<=10;i++) SetPos(i,11),cout<<"█",SetPos(i,0),cout<<"█";Color(0);SetPos(14,1); cout<<"正在准备...请稍后...";SetPos(11,0);Color(4);cout<<"▼▼▼▼▼▼▼▼▼▼▼▼";}
int main()
{
    system("mode con cols=28 lines=20");CONSOLE_CURSOR_INFO cursor_info={1,0};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);srand((unsigned)time(NULL));
    St: S=T=-5;Die=G=gx=sx=0;
    memset(m,0,sizeof(m)); Start();
    for(int i=1;i<=4;i++) {T++,Sheng(),Map();while(Kline());Sleep(500);}
    while(1)
    {
        T++;int f=0;
        if(gx!=0) gx--;if(gx==0) G=0;Down(G,0);if(sx!=0) sx--;else Sheng();Map();
        for(int i=1;i<=10;i++) {if(m[11][i]!=0) Die=1;} if(Die==1) break;while(Kline());Move();
        Sleep(500);
    }system("color 4F");Sleep(1000);SetPos(17,6),Color(0),cout<<" You Die! ";SetPos(16,6),cout<<" 按y重玩。";
    char e;while(e!='y') e=_getch(); goto St; 
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++消消乐 的相关文章

  • 模板类包装任意类型/非类型模板类

    假设我有一个模板类base和一个班级wrapper其中包含一个实例化成员base 我想定义班级wrapper这样它依赖于模板参数包 该参数包只是 传递 给实例化成员base 例如 考虑下面的代码 它工作得很好 include
  • C#中如何检测字符串是否为货币

    通常当我需要转换时currency string 如 1200 55 z 或 1 249 到十进制值我这样做 if currencyString Contains z decimal value Decimal Parse dataToCh
  • 我可以使用反射更改 C# 中的私有只读字段吗?

    我想知道 由于很多事情都可以使用反射完成 我可以在构造函数完成执行后更改私有只读字段吗 注 只是好奇 public class Foo private readonly int bar public Foo int num bar num
  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • 处理 LINQ sum 表达式中的 null

    我正在使用 LINQ 查询来查找列的总和 并且在少数情况下该值有可能为空 我现在使用的查询是 int score dbContext domainmaps Where p gt p SchoolId schoolid Sum v gt v
  • 实体框架代码优先 - 在另一个文件中配置

    使用 Fluent API 将表到实体的映射分开的最佳方法是什么 以便它全部位于单独的类中 而不是内联在 OnModelCreating 方法中 我目前在做什么 public class FooContext DbContext prote
  • 我应该在单元测试中使用 AutoMapper 吗?

    我正在为 ASP NET MVC 控制器方法编写单元测试 这些控制器依赖于IMapper 我创建的用于抽象 AutoMapper 的接口 使用 Castle Windsor 通过构造函数注入传入 动作方法使用IMapper从领域对象映射到
  • 使用 VSTO 更改 Outlook 设置

    我刚刚花了大约 4 个小时试图弄清楚如何以编程方式检索 设置 Microsoft Outlook 2010 的 Outlook 设置 我所说的 设置 是指文件 选项 邮件下的设置 我想做的是检索用户设置的设置列表 自动化我们每天需要在某些消
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • 控制台应用程序 .net Core 2.0 的配置

    在 net Core 1 中我们可以这样做 IConfiguration config new ConfigurationBuilder AddJsonFile appsettings json true true Build 这样就可以使
  • C中有const吗?

    这个问题可能很幼稚 但是 有没有constC 中的关键字 从哪个版本开始 之间有任何语义和 或句法差异吗const在 C 和 C 中 C 和 C 之间在语法上没有差异const关键字 除了一个相当晦涩的关键字 在 C 中 自 C99 起 您
  • C++ Primer 5th Edition 错误 bool 值没有指定最小大小?

    bool 的最小大小不应该是 1 个字节吗 这有点学术性的东西 尽管它们会转换为数字 并且 与其他所有事物一样 它们最终将基本上由计算机内存中的数字表示 但布尔值不是数字 你的bool可以取值true 或值false 即使您确实需要至少 1
  • 在可观察项目生成时对其进行处理

    我有一个IObservable它会生成一次性物品 并且在其生命周期内可能会生成无限数量的物品 因此 我想在每次生成新项目时处理最后一个项目 因此Using http reactivex io documentation operators
  • 标准 C 中的 sizeof 与 sizeof()? [复制]

    这个问题在这里已经有答案了 我看到一些直接使用 sizeof 的代码 想知道它是否是标准 C 令我惊讶的是 它运行得很好 这是一个例子 include
  • 如何在 C++ 中使用 PI 常数

    我想在一些 C 程序中使用 PI 常数和三角函数 我得到三角函数include
  • 如何使用 Clang 查找内存泄漏

    我在我的机器 ubuntu 中安装了 Clang 以便发现我的 C 代码中的内存泄漏 我编写了一个示例代码来检查它的工作情况 如下所示 File hello c for leak detection include
  • OpenMP C 程序运行速度比顺序代码慢

    我是 OpenMP 的新手 正在尝试并行化 Jarvis 的算法 然而事实证明 与顺序代码相比 并行程序花费的时间要长 2 3 倍 难道问题本身就不能并行化吗 或者我并行化它的方式有问题 这是我针对该问题的 openMP 程序 其中有 2
  • 便携式终端

    有没有办法根据所使用的操作系统自动使用正确的 EOL 字符 我在想类似的事情std eol 我知道使用预处理器指令非常容易 但很好奇它是否已经可用 我感兴趣的是 我的应用程序中通常有一些消息 稍后我会将这些消息组合成一个字符串 并且我希望将
  • C# - 为什么我需要初始化 [Out] 参数

    我有几个从本机 dll 导入的方法 使用以下语法 internal static class DllClass DllImport Example dll EntryPoint ExampleFunction public static e
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include

随机推荐

  • libevent (一) socket属性设置与初始化操作

    socket属性设置与初始化操作 libevent是一个事件触发的网络库 适用于windows linux bsd等多种平台 内部使用select epoll kqueue等系统调用管理事件机制 著名分布式缓存软件memcached也是li
  • 小程序怎么搭建?学会这些技巧,开启创业之路

    随着移动互联网的发展 小程序成为了一种重要的创业工具 小程序具有开发周期短 运营成本低 用户体验好等特点 被越来越多的企业和个人用来实现商业价值 本文将通过一个案例来介绍小程序的搭建技巧 帮助创业者更好地开启创业之路 案例介绍 某家生鲜电商
  • CentOS下安装配置Phabricator

    1 下载快捷安装sh http download csdn net detail u012547633 9882697 把centos版的phabricator安装脚本下载到opt目录并安装 cd opt chmod 777 install
  • java版本号分段比较_版本号判断,例如:1.0.0比较1.0.1

    有的时候可能会判断客户端的版本号信息 多位数的版本号判断做个记录 代码分享者 zzp 注意 Java中应该吧分割的正则使用 来分割小数点字符串 分割 NSArray curVerArr currentVersion componentsSe
  • 了解Chat GPT

    CHATGPT是一款强大的人工智能语言模型 可以回答任何问题和开启有趣的对话 以下是一些使用CHATGPT的技巧和提示 提问明确 CHATGPT能够回答任何问题 但它需要清晰和明确的问题来给出准确的答案 因此 在提问时要尽可能明确和具体 尝
  • 【JDBC】-- Java连接数据库方法(Mysql8+idea)

    Java Database Connectivity 简称JDBC 是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口 提供了诸如查询和更新数据库中数据的方法 Java如何连接数据库 下面使用Mysql8版本 编译器使用ide
  • Flink_CDC搭建及简单使用

    Flink CDC搭建及简单使用 1 CDC简介 CDC Change Data Capture 在广义的概念上 只要能捕获数据变更的技术 都可以称为 CDC 但通常我们说的CDC 技术主要面向数据库 包括常见的mysql Oracle M
  • Dubbo-admin 新版本启动问题记录

    Dubbo admin 新版本启动问题记录 文章目录 Dubbo admin 新版本启动问题记录 1 安装步骤 a 下载zookeeper b 下载并编译dubbo 2 总结 1 安装步骤 直接按照官网下载下来的软件 并按照说明安装软件会存
  • Vagrant虚拟机安装,磁盘扩容以及局域网内访问教程

    1 下载vagrant以及virtualBox 配上vagrant virtualBox线上下载地址 vagrant下载地址 virtualBox下载地址 2 开始准备安装镜像文件 找到需要安装的系统镜像文件 配上vagrant镜像地址 v
  • Linux strace 命令 说明

    Strace是Linux中一个调试和跟踪工具 它可以接管被跟踪进程执行的系统调用和收到的信号 然后把每一个执行的系统调用的名字 参数和返回值打印出来 可以通过strace找到问题出现在user层还是kernel层 strace 显示这些调用
  • 集群基础3——haproxy负载均衡apache

    文章目录 一 环境说明 二 安装配置httpd 三 安装配置haproxy 四 验证http负载均衡 五 配置https负载均衡 六 haproxy网页监控 6 1 监控参数详解 6 2 页面操作 一 环境说明 使用haproxy对apac
  • jmeter中body data使用post请求的json格式提交

    之前介绍过jmeter中post的默认提交形式form表达提交 Content type application x www form urlencoded 使用直接 填写参数的形式 本次介绍的是jmeter中body data使用也就是j
  • 学历和工作年限决定了程序员的工资水平吗?

    根据中国互联网络信息中心 CNNIC 近日发布的第 45 次 中国互联网络发展状况统计报告 可知 截至 2020 年 03 月 中国网民规模为 9 04 亿 较 2018 年底增加 7508 万 其中农村网民规模达 2 55 亿 占网民整体
  • 时序预测

    时序预测 MATLAB实现SVM 支持向量机 时间序列多步预测 目录 时序预测 MATLAB实现SVM 支持向量机 时间序列多步预测 预测效果 模型描述 程序设计 学习总结 参考资料 预测效果 模型描述 Options 可用的选项即表示的涵
  • maven环境快速搭建

    最近 开发中要用到maven 所以对maven进行了简单的学习 因为有个maven高手在身边 所以 很快就上手了 我这里算是自我总结吧 关于maven是什么东东 请参考其它文章 准备工作 Jdk 1 5以上java开发环境 Eclipse
  • 图解TCP/IP

    第1章 网络基础知识 本章总结了深入理解TCP IP所必备的基础知识 其中包括计算机与网络发展的历史及其标准化过程 OSI参考模型 网络概念的本质 网络构建的设备等 1 5 4 OSI参考模型中各个分层的作用 应用层 为应用程序提供服务并规
  • Python爬虫入门6:模拟浏览器访问网页的http报文体压缩传输

    前往老猿Python博客 https blog csdn net LaoYuanPython 一 引言 在前面章节中介绍了使用urllib包的request模块访问网页的方法 但上节特别说明http报文头Accept Encoding最好不
  • pytorch和tensorflow有什么区别?

    PyTorch 是一种用于构建深度学习模型的功能完备框架 同时tensorflow也是常用的框架之一 大家在学习的时候 尝尝会用来做比较 那么pytorch和tensorflow有什么区别 大家所关心的问题 解答来了 pytorch和ten
  • vue拖拽实现

    拖拽介绍 目标是将左侧list中的item拖入右侧card中 如下所示 将list1和list3拖入右侧拖拽区 一 拖拽样式实现 使用vue vuetifyjs实现 页面布局可根据不同的UI库自行修改 html内容
  • C++消消乐

    键盘版 include