qq_27164485 2015-04-08 12:32 采纳率: 16.7%
浏览 2007

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]);
}

}
}

  • 写回答

4条回答 默认 最新

  • 天命王子 2015-04-08 16:45
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料