#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
int x[4][4]={0},i,j,k,score=0;
int empty()
{
int n=0;
for(i=0;i<16;i++)
{
if(x[i/4][i%4]==0)n++;
}
return n;
}
int check()
{
int a,b,f=0;
for(a=0;a<4;a++)
{
for(b=0;b<4;b++)
{
if(x[a][b]>=2048)return 1;
if(b<3)
{
if(x[a][b]==x[a][b+1]||x[b][a]==x[b+1][a])f=1;
}
}
}
if(f==1)return 0;else return -1;
}
void add(int p)
{
int rn=0,randp,randn;
srand((unsigned)time(NULL));
randp=rand()%empty();
if(p==1)
{
randn=2;
}else
{
if(rand()%2==1)randn=4;else randn=2;
}
for(i=0;i<16;i++)
{
if(x[i/4][i%4]==0)
{
if(rn==randp){x[i/4][i%4]=randn;break;}
rn++;
}
}
}
void out()
{
system("cls");
for(i=0;i<10;i++)
{
if(i==0)printf("┏━━┳━━┳━━┳━━┓\n┃ ┃ ┃ ┃ ┃\n┃");
else if(i==8)printf("┗━━┻━━┻━━┻━━┛\n");
else if(i==9)printf(" SCORE:%d\n",score);
else if(i%2==0)printf("┣━━╋━━╋━━╋━━┫\n┃ ┃ ┃ ┃ ┃\n┃");
else
{
for(j=0;j<4;j++)
{
if(x[i/2][j]!=0)printf("%4d",x[i/2][j]); else printf(" ");
printf("┃");
}
printf("\n");
}
}
}
void move(int d)
{
int f0=0,fb=0,fm=0,dx,dy,nx=0,ny=0;
//if(check()!=-1)
for(j=0;j<4;j++)
{
for(k=0;k<3;k++)
{if(fb==1){fb=0;break;}
for(i=0;i<3;i++)
{
switch(d)
{
case 1:dx=i;dy=j;nx=1;ny=0;break;
case 2:dx=j;dy=3-i;nx=0;ny=-1;break;
case 3:dx=3-i;dy=j;nx=-1;ny=0;break;
case 4:dx=j;dy=i;nx=0;ny=1;break;
}
if(x[dx][dy]==0)
{
if(x[dx+nx][dy+ny]!=0)f0=1;
x[dx][dy]=x[dx+nx][dy+ny];
x[dx+nx][dy+ny]=0;
}else
if(x[dx][dy]!=0&&x[dx][dy]==x[dx+nx][dy+ny])
{
x[dx][dy]=x[dx][dy]+x[dx+nx][dy+ny];
x[dx+nx][dy+ny]=0;
score+=x[dx][dy];
fb=1;fm=1;
}
}
}
}
if(empty()>0&&(f0==1||fm==1))add(0);
out();
if(check()==1)printf("\n YOU WIN!");
else if(check()==-1)printf("\n YOU LOSE!");
}
int main()
{
unsigned char key;
add(1);add(1);out();
while((key=getch())!=0x1b)
{
if(key == 0||key==0xE0)
{
key = getch();
switch(key)
{
case 72:move(1);break;
case 75:move(4);break;
case 77:move(2);break;
case 80:move(3);break;
}
}
}
return 0;
//C_2048 By:Blue [Email:zzx094@gmail.com]
}