C语言2048源代码

C语言2048源代码
C语言2048源代码

#include

#include

#include

#include

#define N 4

void Generat_picture(int d[N][N],char c[N][N][N],int s); void Control_synthesis(int a[N][N]);

void add_num(int a[N][N]);

void swap(int *a,int *b);

int score(int a[N][N]);

int moveup(int a[N][N]);

int movedown(int a[N][N]);

int moveleft(int a[N][N]);

int moveright(int a[N][N]);

int main()

{

int d[N][N];

char c[N][N][N];

int i,j,s=2;

system("COLOR 5F");

for(i=0; i

for(j=0; j

d[i][j]=0;

while(1)

{

add_num(d);

Generat_picture(d,c,s);

Control_synthesis(d);

s=score(d);

}

return 0;

}

void Generat_picture(int d[N][N],char c[N][N][N],int s) {

int i,j,k;

for(i=0; i

for(j=0; j

{

if(d[i][j]==0)

{

c[i][j][0]=' ';

c[i][j][1]=' ';

c[i][j][2]=' ';

c[i][j][3]=' ';

}

else

{

c[i][j][0]=(int)(d[i][j]/1000)%10+48; //4358

c[i][j][1]=(int)(d[i][j]/100)%10+48;

c[i][j][2]=(int)(d[i][j]/10)%10+48;

c[i][j][3]=d[i][j]%10+48;

for(k=0; k

if(c[i][j][k]==48)

c[i][j][k]=' ';

}

}

system("cls");

printf("得分:%d\n",s);

printf("┏━━┳━━┳━━┳━━┓\n");

printf("┃%c%c%c%c┃%c%c%c%c┃%c%c%c%c┃%c%c%c%c┃\n",c[0][0][0],c[0][0][1],c[0][0][2],c[0][0][3],c[0][1][0],c[0][1][1],c[0][1][2],c[0][1][3],c[0][2][0],c[0][2] [1],c[0][2][2],c[0][2][3],c[0][3][0],c[0][3][1],c[0][3][2],c[0][3][3]);

printf("┣━━╋━━╋━━╋━━┫\n");

printf("┃%c%c%c%c┃%c%c%c%c┃%c%c%c%c┃%c%c%c%c┃\n",c[1][0][0],c[1][0][1],c[1][0][2],c[1][0][3],c[1][1][0],c[1][1][1],c[1][1][2],c[1][1][3],c[1][2][0],c[1][2] [1],c[1][2][2],c[1][2][3],c[1][3][0],c[1][3][1],c[1][3][2],c[1][3][3]);

printf("┣━━╋━━╋━━╋━━┫\n");

printf("┃%c%c%c%c┃%c%c%c%c┃%c%c%c%c┃%c%c%c%c┃\n",c[2][0][0],c[2][0][1],c[2][0][2],c[2][0][3],c[2][1][0],c[2][1][1],c[2][1][2],c[2][1][3],c[2][2][0],c[2][2] [1],c[2][2][2],c[2][2][3],c[2][3][0],c[2][3][1],c[2][3][2],c[2][3][3]);

printf("┣━━╋━━╋━━╋━━┫\n");

printf("┃%c%c%c%c┃%c%c%c%c┃%c%c%c%c┃%c%c%c%c┃\n",c[3][0][0],c[3][0][1],c[3][0][2],c[3][0][3],c[3][1][0],c[3][1][1],c[3][1][2],c[3][1][3],c[3][2][0],c[3][2] [1],c[3][2][2],c[3][2][3],c[3][3][0],c[3][3][1],c[3][3][2],c[3][3][3]);

printf("┗━━┻━━┻━━┻━━┛\n");

printf("wsad控制方向\n");

}

void Control_synthesis(int a[N][N])

{

int c,flag;

label:

c=getch();

if(c=='w'||c=='W')

flag=moveup(a);

else if(c=='s'||c=='S')

flag=movedown(a);

else if(c=='a'||c=='A')

flag=moveleft(a);

else if(c=='d'||c=='D')

flag=moveright(a);

else

{

printf("重新输入:\n");

goto label;

}

if(flag==0)

goto label;

}

void add_num(int a[N][N])

{

int i,j,k,t=0;

int *p[16];

srand((unsigned int)time(0));

for(i=0; i

for(j=0; j

if(a[i][j]==0)

{

p[t]=&a[i][j];

t++;

}

k=rand()%t;

*p[k]=2;

}

int moveup(int a[N][N])

{

int t,p=0,q=0;

for(t=0; t

{

if(a[0][t]==a[1][t]&&a[2][t]==a[3][t]&&a[0][t]!=0&&a[2][t]!=0) {

a[1][t]*=2;

a[3][t]*=2;

a[0][t]=a[t][2]=0;

}

else if(a[0][t]==a[1][t]&&a[0][t]!=0)

{

a[0][t]=0;

a[1][t]*=2;

}

else if(a[0][t]==a[2][t]&&a[1][t]==0&&a[0][t]!=0)

{

a[0][t]=0;

a[2][t]*=2;

}

else if(a[1][t]==a[2][t]&&a[1][t]!=0)

{

a[1][t]=0;

a[2][t]*=2;

}

else if(a[0][t]==a[3][t]&&a[1][t]==0&&a[2][t]==0&&a[0][t]!=0) {

a[0][t]=0;

a[3][t]*=2;

}

else if(a[1][t]==a[3][t]&&a[2][t]==0&&a[1][t]!=0)

{

a[1][t]=0;

a[3][t]*=2;

}

else if(a[2][t]==a[3][t]&&a[2][t]!=0)

{

a[2][t]=0;

a[3][t]*=2;

}

else

p++;

int n=3;

while(n--)

{

if(a[2][t]==0&&a[3][t]!=0)

{

swap(&a[2][t],&a[3][t]);

q++;

}

if(a[1][t]==0&&a[2][t]!=0)

{

swap(&a[1][t],&a[2][t]);

q++;

}

if(a[0][t]==0&&a[1][t]!=0)

{

swap(&a[0][t],&a[1][t]);

q++;

}

}

}

if(4==p&&q==0)

return 0;

else

return 1;

}

int movedown(int a[N][N])

{

int t,p=0,q=0;

for(t=0; t

{

if(a[0][t]==a[1][t]&&a[2][t]==a[3][t]&&a[0][t]!=0&&a[2][t]!=0) {

a[1][t]*=2;

a[3][t]*=2;

a[0][t]=a[t][2]=0;

}

else if(a[2][t]==a[3][t]&&a[2][t]!=0)

{

a[2][t]=0;

a[3][t]*=2;

}

else if(a[1][t]==a[3][t]&&a[2][t]==0&&a[1][t]!=0)

{

a[1][t]=0;

a[3][t]*=2;

}

else if(a[0][t]==a[3][t]&&a[1][t]==0&&a[2][t]==0&&a[0][t]!=0) {

a[0][t]=0;

a[3][t]*=2;

}

else if(a[1][t]==a[2][t]&&a[1][t]!=0)

{

a[1][t]=0;

a[2][t]*=2;

}

else if(a[0][t]==a[2][t]&&a[1][t]==0&&a[0][t]!=0)

{

a[0][t]=0;

a[2][t]*=2;

}

else if(a[0][t]==a[1][t]&&a[0][t]!=0)

{

a[0][t]=0;

a[1][t]*=2;

}

else

p++;

int n=3;

while(n--)

{

if(a[1][t]==0&&a[0][t]!=0)

{

swap(&a[0][t],&a[1][t]);

q++;

}

if(a[2][t]==0&&a[1][t]!=0)

{

swap(&a[1][t],&a[2][t]);

q++;

}

if(a[3][t]==0&&a[2][t]!=0)

{

swap(&a[2][t],&a[3][t]);

q++;

}

}

}

if(4==p&&q==0)

return 0;

else

return 1;

}

int moveleft(int a[N][N])

{

int t,p=0,q=0;

for(t=0; t

{

if(a[t][0]==a[t][1]&&a[t][2]==a[t][3]&&a[t][0]!=0&&a[t][1]!=0) {

a[t][1]*=2;

a[t][3]*=2;

a[t][0]=a[t][2]=0;

}

else if(a[t][0]==a[t][1]&&a[t][0]!=0)

{

a[t][0]=0;

a[t][1]*=2;

}

else if(a[t][0]==a[t][2]&&a[t][1]==0&&a[t][0]!=0)

{

a[t][0]=0;

a[t][2]*=2;

}

else if(a[t][1]==a[t][2]&&a[t][1]!=0)

{

a[t][1]=0;

a[t][2]*=2;

}

else if(a[t][0]==a[t][3]&&a[t][1]==0&&a[t][2]==0&&a[t][0]!=0) {

a[t][0]=0;

a[t][3]*=2;

}

else if(a[t][1]==a[t][3]&&a[t][2]==0&&a[t][1]!=0)

{

a[t][1]=0;

a[t][3]*=2;

}

else if(a[t][2]==a[t][3]&&a[t][2]!=0)

{

a[t][2]=0;

a[t][3]*=2;

}

else

p++;

int n=3;

while(n--)

{

if(a[t][2]==0&&a[t][3]!=0)

{

swap(&a[t][2],&a[t][3]);

q++;

}

if(a[t][1]==0&&a[t][2]!=0)

{

swap(&a[t][1],&a[t][2]);

q++;

}

if(a[t][0]==0&&a[t][1]!=0)

{

swap(&a[t][0],&a[t][1]);

q++;

}

}

}

if(4==p&&q==0)

return 0;

else

return 1;

}

int moveright(int a[N][N])

{

int t,p=0,q=0;

for(t=0; t

{

if(a[t][0]==a[t][1]&&a[t][2]==a[t][3]&&a[t][0]!=0&&a[t][1]!=0) {

a[t][1]*=2;

a[t][3]*=2;

a[t][0]=a[t][2]=0;

}

else if(a[t][2]==a[t][3]&&a[t][2]!=0)

{

a[t][2]=0;

a[t][3]*=2;

}

else if(a[t][1]==a[t][3]&&a[t][2]==0&&a[t][1]!=0)

{

a[t][1]=0;

a[t][3]*=2;

}

else if(a[t][0]==a[t][3]&&a[t][1]==0&&a[t][2]==0&&a[t][0]!=0) {

a[t][0]=0;

a[t][3]*=2;

}

else if(a[t][1]==a[t][2]&&a[t][1]!=0)

{

a[t][1]=0;

a[t][2]*=2;

}

else if(a[t][0]==a[t][2]&&a[t][1]==0&&a[t][0]!=0)

{

a[t][0]=0;

a[t][2]*=2;

}

else if(a[t][0]==a[t][1]&&a[t][0]!=0) {

a[t][0]=0;

a[t][1]*=2;

}

else

p++;

int n=3;

while(n--)

{

if(a[t][1]==0&&a[t][0]!=0)

{

swap(&a[t][0],&a[t][1]);

q++;

}

if(a[t][2]==0&&a[t][1]!=0)

{

swap(&a[t][1],&a[t][2]);

q++;

}

if(a[t][3]==0&&a[t][2]!=0)

{

swap(&a[t][2],&a[t][3]);

q++;

}

}

}

if(4==p&&q==0)

return 0;

else

return 1;

}

void swap(int *a,int *b)

{

int t;

t=*a;

*a=*b;

*b=t;

}

int score(int a[N][N])

{

int i,j,s=0;

for(i=0; i

for(j=0; j

}

相关主题
相关文档
最新文档