0

在C中实现俄罗斯方块时,我试图将二维数组的内容向下移动。这是为了向下移动块。该代码有效,但它只移动一次元素,请参见问题的图像(左上角的数字是确定块类型的随机数)。任何帮助表示赞赏。下面是数组移位代码:

//Declare size of board
    int board [22][10] = {};

 //Shift down
    for(i=2;i<20;i++)
    {
        for(z=1;z<10;z++)
        {
            board[i+1][z] = board[i][z];
        }
    }

http://i61.tinypic.com/xlb58g.jpg

4

1 回答 1

4

每当您移动数组的内容时,您必须以与移动相反的方向工作。在您的情况下,您需要反转外循环的方向:

int board [22][10] = {};

for(i = 20; i-- > 2; ) {
    for(z=1; z<9; z++) {
        board[i+1][z] = board[i][z];
    }
}

这允许未使用值的行在数组中像气泡一样上升。


编辑:
上面的代码是为了匹配问题中发布的代码的明显预期行为而编写的。如果要移动整个数组,请使用以下代码:

for(i = sizeof(board)/sizeof(*board) - 1; i--; ) {
    for(z = 0; z < sizeof(*board)/sizeof(**board); z++) {
        board[i+1][z] = board[i][z];
    }
}
于 2014-05-31T13:48:30.900 回答