求帮忙优化
/*
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
*/
#include <bits/stdc++.h>
#include <conio.h>
#include <windows.h>
#define sp(x1,y1,x2,y2) swap(a[x1][y1],a[x2][y2])
using namespace std;
int a[4][4];
int over=0;
void rgb_init()
{
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwInMode, dwOutMode;
GetConsoleMode(hIn, &dwInMode);
GetConsoleMode(hOut, &dwOutMode);
dwInMode |= 0x0200;
dwOutMode |= 0x0004;
SetConsoleMode(hIn, dwInMode);
SetConsoleMode(hOut, dwOutMode);
}
void rgb_set(int wr,int wg,int wb,int br,int bg,int bb)
{
printf("\033[38;2;%d;%d;%dm\033[48;2;%d;%d;%dm",wr,wg,wb,br,bg,bb);
}
void start()
{
cout<<"正在初始化...";
rgb_init();
srand(time(0));
memset(a,0,sizeof(a));
over=0;
system("cls");
}
void rd()
{
int h=rand()%4,w=rand()%4;
while(a[h][w])
{
h=rand()%4,w=rand()%4;
}
a[h][w]=2;
}
void print()
{
for(int i=0; i<4; ++i)
{
if(i)
{
cout<<"├";
}
else
{
cout<<"┌";
}
for(int j=0;j<4;++j)
{
cout<<"────";
if(i)
{
cout<<"┼";
}
else
{
cout<<"┬";
}
}
cout<<"\b";
if(i)
{
cout<<"┤";
}
else
{
cout<<"┐";
}
cout<<'\n';
for(int j=0; j<4; ++j)
{
cout<<"│";
switch(a[i][j])
{
case 2:
rgb_set(255,255,120,0,0,0);
break;
case 4:
rgb_set(80,120,0,0,0,0);
break;
case 8:
rgb_set(230,90,60,0,0,0);
break;
case 16:
rgb_set(0,0,255,0,0,0);
break;
case 32:
rgb_set(10,200,200,0,0,0);
break;
case 64:
rgb_set(255,200,200,0,0,0);
break;
case 128:
rgb_set(255,100,200,0,0,0);
break;
case 256:
rgb_set(255,100,0,0,0,0);
break;
case 512:
rgb_set(127,255,212,0,0,0);
break;
case 1024:
rgb_set(200,200,230,0,0,0);
break;
case 2048:
rgb_set(129,0,0,0,0,0);
break;
case 4096:
rgb_set(144,238,144,0,0,0);
break;
case 8192:
rgb_set(238,210,238,0,0,0);
break;
}
if(a[i][j])
{
cout<<setw(4)<<a[i][j];
}
else
{
cout<<" ";
}
rgb_set(255,255,255,0,0,0);
}
cout<<"│\n";
}
cout<<"└────┴────┴────┴────┘\n";
}
bool aa()
{
bool ok=0;
for(int k=0; k<4; ++k)
{
for(int i=0; i<4; ++i)
{
for(int j=1; j<4; ++j)
{
if(a[i][j]!=0&&a[i][j-1]==0)
{
ok=1;
sp(i,j,i,j-1);
}
}
}
}
return ok;
}
bool aaa()
{
bool ok=aa();
for(int i=0; i<4; ++i)
{
for(int j=1; j<4; ++j)
{
if(a[i][j]==a[i][j-1]&&a[i][j]!=0)
{
a[i][j-1]*=2;
ok=1;
a[i][j]=0;
}
}
}
return (aa()+ok>0);
}
bool dd()
{
bool ok=0;
for(int k=0; k<4; ++k)
{
for(int i=0; i<4; ++i)
{
for(int j=3; j>0; --j)
{
if(a[i][j-1]!=0&&a[i][j]==0)
{
ok=1;
sp(i,j-1,i,j);
}
}
}
}
return ok;
}
bool ddd()
{
bool ok=dd();
for(int i=0; i<4; ++i)
{
for(int j=3; j>0; --j)
{
if(a[i][j]==a[i][j-1]&&a[i][j]!=0)
{
a[i][j]*=2;
ok=1;
a[i][j-1]=0;
}
}
}
return (dd()+ok>0);
}
bool ww()
{
bool ok=0;
for(int k=0; k<4; ++k)
{
for(int i=0; i<4; ++i)
{
for(int j=1; j<4; ++j)
{
if(a[j][i]!=0&&a[j-1][i]==0)
{
ok=1;
sp(j,i,j-1,i);
}
}
}
}
return ok;
}
bool www()
{
bool ok=ww();
for(int i=0; i<4; ++i)
{
for(int j=1; j<4; ++j)
{
if(a[j][i]==a[j-1][i]&&a[j][i]!=0)
{
a[j-1][i]*=2;
ok=1;
a[j][i]=0;
}
}
}
return (ww()+ok>0);
}
bool ss()
{
bool ok=0;
for(int k=0; k<4; ++k)
{
for(int i=0; i<4; ++i)
{
for(int j=3; j>0; --j)
{
if(a[j-1][i]!=0&&a[j][i]==0)
{
ok=1;
sp(j-1,i,j,i);
}
}
}
}
return ok;
}
bool sss()
{
bool ok=ss();
for(int i=0; i<4; ++i)
{
for(int j=3; j>0; --j)
{
if(a[j][i]==a[j-1][i]&&a[j][i]!=0)
{
a[j][i]*=2;
ok=1;
a[j-1][i]=0;
}
}
}
return (ss()+ok>0);
}
int check()
{
bool o1=1,o2=0;
for(int i=0;i<4;i+=2)
{
for(int j=0;j<4;j+=2)
{
if(a[i][j]==a[i][j+1]||a[i][j]==a[i+1][j]||a[i+1][j+1]==a[i][j+1]||a[i+1][j+1]==a[i+1][j])
{
o1=0;
}
}
}
for(int i=0;i<4;++i)
{
for(int j=0;j<4;++j)
{
if(a[i][j]>=2048)
{
o2=1;
}
}
}
return (o1?o1:(o2-over)*2);
}
int main()
{
start();
system("pause");
system("cls");
rd();
print();
while(1)
{
switch(check())
{
case 1:
system("cls");
cout<<"你输了。\n想要再来一次吗?\n";
system("pause");
start();
rd();
print();
break;
case 2:
system("cls");
cout<<"你赢了。还要继续吗?";
system("pause");
system("cls");
cout<<"按a继续游戏,按b从新开始";
char c;
while(c=getchar())
{
if(c=='a')
{
print();
over=1;
break;
}
else
{
if(c=='b')
{
start();
rd();
print();
break;
}
}
}
break;
}
char c=getch();
switch(c)
{
case 'a':
if(aaa())
{
break;
}
else
{
continue;
}
case 'd':
if(ddd())
{
break;
}
else
{
continue;
}
case 'w':
if(www())
{
break;
}
else
{
continue;
}
case 's':
if(sss())
{
break;
}
else
{
continue;
}
default:
continue;
}
system("cls");
rd();
print();
}
return 0;
}