2048用C语言编写问题!

为2048的游戏写一个算法,输入一个元素只能为0,2或4的二维数组和一个操作,字符wsad代替上下左右,时间复杂度越小起好。(不用随机产生2和4)如,
输入:
0 0 2 2
2 0 0 0
0 0 0 0
4 4 2 2
a
输出:
4 0 0 0
2 0 0 0
0 0 0 0
8 4 0 0
下面这段代码如何更改才能实现?
#include
void main()
{

char turn ;
int s[4][4];
int a[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
int i,j;
int q=0;
int e=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{

    scanf("%d",s[i][j]);
}
}
scanf("%c",&turn);
switch(turn)
{

case 'w':
        {
            for(i=0;i<4;i++)
    {
    for(j=0;j<4;j++)
    {

        if(s[i][j]==s[i][j+1])
        {
        a[q][e]=s[i][j]+s[i][j+1];
        e++;
        j++;
        }
        else 
        {
        a[i][j]=s[i][j];
        }

    }
    }
            break;
    }
        case 's':
            {
                for(i=0;i<4;i++)
    {
    for(j=0;j<4;j++)
    {

        if(s[i][j]==s[i][j+1])
        {
            e=3;
        a[q][e]=s[i][j]+s[i][j+1];
        e--;
            j++;
        }
        else 
        {
        a[i][j]=s[i][j];
        }
    }
    }
                break;
    }
            case 'a':
            {
                for(j=0;j<4;i++)
    {
    for(i=0;i<4;j++)
    {

        if(s[i][j]==s[i+1][j])
        {
        a[q][e]=s[i][j]+s[i+1][j];
        q++;
        i++;
        }
        else 
        {
        a[i][j]=s[i][j];
        }

    }
    }
                break;
            }

                case 'd':
                    {
                        for(j=0;j<4;j++)
    {
    for(i=0;i<4;i++)
    {

        if(s[i][j]==s[i+1][j])
        {
            q=3;
        a[q][e]=s[i][j]+s[i+1][j];
        q--;
        i++;
        }
        else 
        {
        a[i][j]=s[i][j];
        }
        break;
    }
    }

break;
}
default:
printf("输入无效");
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{

    scanf("%d",a[i][j]);
}

}
}

首先,你的输入数组语句都少了'&',在第14行和倒数第四行,还有就是你这个2048有很大的问题啊,操作都没有循环的,而且没有判断输掉的条件,没有判断可以移动的条件,为什么一开始要输入数组的?结束时也是要输入,是为什么要这么设计呢?我到时有个好的方案,要是不介意时间关系的话,我这个星期天把代码给你看。只要你留个邮箱给我?因为最近事情有点多,只有周末有点空写了。可以的话就回复我咯。

表示强烈关注,持续围观中

首先scanf输入应为scanf("%d ",&s[i][j]);
其次最后的scanf应改为printf函数,
再者输出时应每四个数应换行故:
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d",a[i][j]);
}
putchar('\n');
}
}
我测试了一下可以通过。

参考代码
https://github.com/707wk/Senior-middle-school/tree/master/2048