#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
#define getkey(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000)?1:0)
#define fur(Ac,a,b) for(int Ac=a;Ac<=b;Ac++)
#define _fur(Ac,a,b) for(int Ac=a;Ac>=b;Ac--)
int ti(float a) {return ((int)(a*10+5))/10;}
void Setpos(float x,float y){COORD pos;pos.X=ti(y*4)/2;pos.Y=ti(x);SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}
void Color(int a){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==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);if(a==9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_GREEN|BACKGROUND_BLUE);if(a==10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_BLUE);if(a==11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);if(a==12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);if(a==13) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);if(a==14) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);}
#define KG " "
#define ti 130
int a[5][5],b[5][5],c[5][5];
int main(){
int i,j,k;
system("mode con cols=90 lines=30");
ifstream fin("d:\\2048.txt");
int ma,df=0;
fin>>ma;fin.close();
stringstream of;
of<<"最高得分:"<<ma;
cout<<setw(25)<<of.str()<<setw(30)<<""<<"现在得分:";
printf("%06d\n",df);
cout<<setw(70)<<"-------------------------------------------------------"<<endl;
srand(time(0));
while(1){
Setpos(0,32.5);printf("%06d\n",df);;
int x,y;bool F=0;
fur(i,1,4)
fur(j,1,4)if(a[i][j]==0)F=1;
if(F){
while(a[x=rand()%4+1][y=rand()%4+1]);
a[x][y]=rand()%2?2:4;
}
Setpos(2,0);
fur(i,1,4){
cout<<KG;
fur(j,1,4)
printf("%11d",a[i][j]),b[i][j]=a[i][j],c[i][j]=a[i][j];
cout<<endl<<endl<<endl;
}
F=1;
fur(i,2,4){
fur(j,1,4){
int x=i,y=j;
while(x>1)
if(b[x][y]==b[x-1][y]){
b[x][y]=0;
df+=b[x-1][y];
b[x-1][y]*=2;
x--;
}else if(b[x-1][y]==0){
b[x-1][y]=b[x][y];
b[x][y]=0;
x--;
}else break;
}
}
fur(i,1,4)
fur(j,1,4)if(b[i][j]!=c[i][j]){F=0;break;
}
if(F){
_fur(i,3,1){
fur(j,1,4){
int x=i,y=j;
while(x<4)
if(b[x][y]==b[x+1][y]){
b[x][y]=0;
df+=b[x+1][y];
b[x+1][y]*=2;
x++;
}else if(b[x+1][y]==0){
b[x+1][y]=b[x][y];
b[x][y]=0;
x++;
}else break;
}
}
fur(i,1,4)
fur(j,1,4)if(b[i][j]!=c[i][j]){
F=0;break;
}
if(F){
fur(j,2,4){
fur(i,1,4){
int x=i,y=j;
while(y>1)
if(b[x][y]==b[x][y-1]){
b[x][y]=0;
df+=b[x][y-1];
b[x][y-1]*=2;
y--;
}else if(b[x][y-1]==0){
b[x][y-1]=b[x][y];
b[x][y]=0;
y--;
}else break;
}
}
fur(i,1,4)
fur(j,1,4)if(b[i][j]!=c[i][j]){
F=0;break;
}
if(F){
_fur(j,3,1){
fur(i,1,4){
int x=i,y=j;
while(y<4)
if(b[x][y]==b[x][y+1]){
b[x][y]=0;
df+=b[x][y+1];
b[x][y+1]*=2;
y++;
}else if(b[x][y+1]==0){
b[x][y+1]=b[x][y];
b[x][y]=0;
y++;
}else break;
}
}
fur(i,1,4)
fur(j,1,4)if(b[i][j]!=c[i][j]){F=0;break;
}
if(F){
Sleep(1000);
system("cls");
ofstream fout("d:\\2048.txt");
fout<<max(ma,df);fout.close();
string s="Game Over!\n最高分数已保存!";
Color(8);
fur(i,0,s.size()-1){
if(i==10)Color(10);
cout<<s[i];Sleep(200);
}
}
}
}
}
while(1){
if(getkey('W')){
fur(i,2,4){
fur(j,1,4){
int x=i,y=j;
while(x>1)
if(a[x][y]==a[x-1][y]){
a[x][y]=0;
df+=a[x-1][y];
a[x-1][y]*=2;
x--;
}else if(a[x-1][y]==0){
a[x-1][y]=a[x][y];
a[x][y]=0;
x--;
}else break;
}
}
Sleep(ti);break;
}else if(getkey('S')){
_fur(i,3,1){
fur(j,1,4){
int x=i,y=j;
while(x<4)
if(a[x][y]==a[x+1][y]){
a[x][y]=0;
df+=a[x+1][y];
a[x+1][y]*=2;
x++;
}else if(a[x+1][y]==0){
a[x+1][y]=a[x][y];
a[x][y]=0;
x++;
}else break;
}
}
Sleep(ti);break;
}else if(getkey('A')){
fur(j,2,4){
fur(i,1,4){
int x=i,y=j;
while(y>1)
if(a[x][y]==a[x][y-1]){
a[x][y]=0;
df+=a[x][y-1];
a[x][y-1]*=2;
y--;
}else if(a[x][y-1]==0){
a[x][y-1]=a[x][y];
a[x][y]=0;
y--;
}else break;
}
}
Sleep(ti);break;
}else if(getkey('D')){
_fur(j,3,1){
fur(i,1,4){
int x=i,y=j;
while(y<4)
if(a[x][y]==a[x][y+1]){
a[x][y]=0;
df+=a[x][y+1];
a[x][y+1]*=2;
y++;
}else if(a[x][y+1]==0){
a[x][y+1]=a[x][y];
a[x][y]=0;
y++;
}else break;
}
}
Sleep(ti);break;
}else if(getkey('E')){
system("cls");
ofstream fout("d:\\2048.txt");
fout<<max(ma,df);fout.close();
string s="最高分数已保存!";
Color(10);
fur(i,0,s.size()-1){
cout<<s[i];Sleep(200);
}
while(1);
}
}
}
return 0;
}
手写代码,可能有误,发现可提出