C写的2048,玩到一半莫名崩掉,请问是什么原因?
#include "apue.h"
void display(int a[][4]);
int move(int b[]);
int check(int a[][4]);
int function(int a[][4],char c);
void get_new(int a[][4]);
void initial(int a[][4]);
int move(int b[])
{
int i;
int j;
int h;
int flag=0;
i=0;
j=1;
while(j<4)
{
if(b[i]==0&&b[j]!=0)
{
b[i]=b[j];
b[j]=0;
j++;
flag=1;
}
if(b[i]!=0)
i++;
if(b[j]==0)
j++;
if(i==j)
j=i+1;
}
i=0;
j=1;
while(j<4)
{
if(b[i]==b[j]&&b[i]!=0)
{
b[i]*=2;
for(h=j;h<3;h++)
b[h]=b[h+1];
b[h]=0;
flag=1;
break;
}
i++;
j++;
}
return flag;
}
int function(int a[][4],char c)
{
int b[4];
int i;
int j;
int fun_flag=0;
if(c=='d'||c=='a')
{
for(i=0;i<4;i++)
{
if(c=='a')
for(j=0;j<4;j++)
{
b[j]=a[i][j];
}
else
for(j=0;j<4;j++)
b[3-j]=a[i][j];
if(move(b)==1)
fun_flag=1;
if(c=='a')
for(j=0;j<4;j++)
{
a[i][j]=b[j];
}
else
for(j=0;j<4;j++)
a[i][j]=b[3-j];
}
}
if(c=='w'||c=='s')
{
for(j=0;j<4;j++)
{
if(c=='w')
for(i=0;i<4;i++)
{
b[i]=a[i][j];
}
else
for(i=0;i<4;i++)
b[3-i]=a[i][j];
if(move(b)==1)
fun_flag=1;
if(c=='w')
for(i=0;i<4;i++)
{
a[i][j]=b[i];
}
else
for(i=0;i<4;i++)
a[i][j]=b[3-i];
}
}
return fun_flag;
}
void get_new(int a[][4])
{
int i;
int j;
srand((unsigned)time(NULL));
do
{
i=rand()%3;
j=rand()%3;
}
while(a[i][j]!=0);
a[i][j]=2;
}
void initial(int a[][4])
{
int i;
int j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
a[i][j]=0;
srand((unsigned)time(NULL));
i=rand()%3;
j=rand()%3;
a[i][j]=2;
}
void main()
{
int a[4][4];
char c;
int f=1;
int main_flag=0;
initial(a);
display(a);
printf("\n");
while(f=1)
{
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
scanf("%c",&c);
main_flag=function(a,c);
if(main_flag==1)
get_new(a);
display(a);
f=check(a);
fflush(stdin);
getchar();
}
}
int check(int a[][4])
{
int i;
int j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(a[i][j]==0)
return 1;
return 0;
}
void display(int a[][4])
{
int i;
int j;
system("clear");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\n ___________________\n");
for(i=0;i<4;i++)
{
printf(" ");
for(j=0;j<4;j++)
{
if(a[i][j]==0)
printf("| ");
else
printf("|%4d",a[i][j]);
}
printf("|");
printf("\n |____|____|____|____|\n");
}
}