跑到蜀南竹海去耍了。。。作为一个懒得走路的人。。。
不过是换个地方继续上网罢了。。。
闲的无聊就玩玩2048。。。于是自己也写了一个。。。
#include<cstdio>
#include<cstring>
#include<time.h>
#include<conio.h>
#include<algorithm>
using namespace std;
int a[5][5];
int xx[]={0,0,1,-1};
int yy[]={1,-1,0,0};
int point;
void inta()
{
point=0;
memset(a,0,sizeof(a));
time_t t;
time(&t);
srand(t);
int tmp=rand()%16;
int i=tmp/4,j=tmp%4;
a[i][j]=2;
}
int check()
{
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(a[i][j]==2048)return 1;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
{
for(int k=0;k<4;k++)
{
int x=i+xx[k];
int y=j+yy[k];
if(x<0||x>=4)continue;
if(y<0||y>=4)continue;
if(!a[i][j]||a[x][y]==a[i][j])
return 0;
}
}
return -1;
}
bool union_b(char in)
{
bool flag=0;
if(in=='K')// left
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(a[i][j]==0)continue;
for(int k=j+1;k<4;k++)
{
if(a[i][k]==0)continue;
else if(a[i][k]==a[i][j])
{
a[i][j]<<=1;
a[i][k]=0;
point+=a[i][j];
flag=1;
break;
}
else break;
}
}
for(int j=0;j<4;j++)
{
if(a[i][j]!=0)continue;
for(int k=j+1;k<4;k++)
{
if(a[i][k]==0)continue;
swap(a[i][j],a[i][k]);
flag=1;
break;
}
}
}
}
else if(in=='M')//right
{
for(int i=0;i<4;i++)
{
for(int j=3;j>=0;j--)
{
if(a[i][j]==0)continue;
for(int k=j-1;k>=0;k--)
{
if(a[i][k]==0)continue;
else if(a[i][k]==a[i][j])
{
a[i][j]<<=1;
a[i][k]=0;
point+=a[i][j];
flag=1;
break;
}
else break;
}
}
for(int j=3;j>=0;j--)
{
if(a[i][j]!=0)continue;
for(int k=j-1;k>=0;k--)
{
if(a[i][k]==0)continue;
swap(a[i][j],a[i][k]);
flag=1;
break;
}
}
}
}
else if(in=='H')//up
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(a[j][i]==0)continue;
for(int k=j+1;k<4;k++)
{
if(a[k][i]==0)continue;
else if(a[k][i]==a[j][i])
{
a[j][i]<<=1;
a[k][i]=0;
point+=a[i][j];
flag=1;
break;
}
else break;
}
}
for(int j=0;j<4;j++)
{
if(a[j][i]!=0)continue;
for(int k=j+1;k<4;k++)
{
if(a[k][i]==0)continue;
swap(a[j][i],a[k][i]);
flag=1;
break;
}
}
}
}
else if(in=='P')//down
{
for(int i=0;i<4;i++)
{
for(int j=3;j>=0;j--)
{
if(a[j][i]==0)continue;
for(int k=j-1;k>=0;k--)
{
if(a[k][i]==0)continue;
else if(a[k][i]==a[j][i])
{
a[j][i]<<=1;
a[k][i]=0;
point+=a[i][j];
flag=1;
break;
}
else break;
}
}
for(int j=3;j>=0;j--)
{
if(a[j][i]!=0)continue;
for(int k=j-1;k>=0;k--)
{
if(a[k][i]==0)continue;
swap(a[j][i],a[k][i]);
flag=1;
break;
}
}
}
}
return flag;
}
void build()
{
while(1)
{
int tmp=rand()%16;
int i=tmp/4,j=tmp%4;
if(!a[i][j])
{
a[i][j]=2;
break;
}
}
}
void show()
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
printf("%-6d",a[i][j]);
printf("\n\n");
}
printf("\n\npoint: %d\n",point);
}
int main()
{
inta();
puts("you job is sum == 2048");
puts("input:\n up down left right\n");
system("pause");
int tmp;
char in;
while(1)
{
system("cls");
tmp=check();
show();
if(tmp==-1)
{
system("cls");
puts("Game Over\nYour point:");
printf("%d\n",point);
break;
}
else if(tmp==1)
{
system("cls");
puts("You win\nYour point:");
printf("%d\n",point);
break;
}
in=getch();printf("%c\n",in);
if(union_b(in))
build();
}
return 0;
}