0

我正在编写一个 2048 克隆(一个简单的克隆),我正在研究的方法是尽可能沿指定方向滑动多维数组中的数字。我有这个向左滑动的代码,但我不知道如何让它向上、向下和向右滑动。

public void moveLeft(int[][] grid)
{
    int [][] copy = grid;
    for(int x = 0; x < copy.length; x++){
        int[] row = new int[4];
        for(int y = 0; y < copy[x].length; y++){

            if (copy[x][y] != 0)
            {
                int temp = 0;
                while(row[temp] != 0) {
                    temp++;
                }
                row[temp] = copy[x][y];
            }

        }
        copy[x] = row;
    }
    grid = copy;
}

有任何想法吗?非常感谢

4

1 回答 1

0

如评论中所述,请考虑您将如何使用该copy变量和clone()

该解决方案基于您的代码。我对其进行了一些更改,以便您可以在相同数字(2、4、8 等)彼此相邻时实现加法:

public void moveLeft(int[][] grid){
    int [][] copy = grid.clone();
    for(int x = 0; x < copy.length; x++){
        int[] row = new int[4];
        for(int y = 0; y < copy[x].length; y++){
            if (copy[x][y] != 0){
                int temp = 0;
                while(row[temp] != 0) {
                    temp++;
                }
                row[temp] = copy[x][y];
            }
        }
        for(int k=0; k<row.length-1; k++){
            if(row[k] == row[k+1]){
                row[k] = row[k]+row[k+1];
                row[k+1] = 0;
            }
        }
        copy[x] = row;
    }
    for(int x = 0; x < copy.length; x++){
        int[] row = new int[4];
        for(int y = 0; y < copy[x].length; y++){
            if (copy[x][y] != 0){
                int temp = 0;
                while(row[temp] != 0) {
                    temp++;
                }
                row[temp] = copy[x][y];
            }
        }
        copy[x] = row;
    }
    grid = copy;
}

如果你运行它:

int[][] b = {{0, 2, 0, 2},{2, 2, 0, 8},{4, 4, 4, 2},{4, 2, 4, 2}};
moveLeft(b);

您会得到以下信息:

4 0 0 0 
4 8 0 0 
8 4 2 0 
4 2 4 2 
于 2016-05-31T14:31:36.140 回答