我试图在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];
}
}
答案 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];
}
}