如何在C中向下移动2d数组元素

时间:2014-05-31 13:43:12

标签: c arrays debugging tetris

我试图在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

1 个答案:

答案 0 :(得分:2)

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

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