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 }