如何将阵列的内容移动到超级2048?

时间:2015-03-21 03:40:53

标签: java

更具体地说,我如何移动数组的内容:

  

[2 0 2 8]

这样的事情:

  

[0 0 4 8]

编辑: 通过转移,我的意思是像Super 2048的游戏。将此阵列视为4x4游戏中的一行。当我输入命令“向右移动”时,左边的数字会查找等于它的数字,就像元素0等于元素2.元素0中的数字然后变为0,元素中的数字变为0然后,2将加起来为4.如果数字找不到相同的数字,它将停在不同数字的左侧。

我尝试直接操作数组的元素,就像下面的代码一样,但我没有成功。

for(int col = dimension-2; col >= 0; col--)
    {
        for(int tgtCol = col+1; tgtCol < dimension; tgtCol++)
        {
            if(initialState[tgtCol] == initialState[col])
            {
                initialState[tgtCol] += initialState[col];
                initialState[col] = 0;
            }
            /*if(initialState[tgtCol] == 0 && InitialState[col] != 0)
            {
                initialState[tgtCol] = initialState[col];
                initialState[col] = 0;
            }
            Code for later implementation
            */
            else
            {}
        }
    }

1 个答案:

答案 0 :(得分:0)

这适合你,

    int[] targetState = new int[dimension];
    int tCol = dimension - 1;

    for (int i = dimension - 1; i >= 0; i--) {
        if (initialState[i] == 0) {
            continue;
        } else {
            if ((targetState[tCol] == initialState[i])) {
                targetState[tCol] += initialState[i];
                tCol--;
            } else if (targetState[tCol] == 0){
                targetState[tCol] = initialState[i];
            } else {
                targetState[--tCol] = initialState[i];
            }
        }
    }
    initialState = targetState;

我认为现场转移在计算上非常昂贵。