俄罗斯方块移动二维数组
Tetris shifting 2D array
我目前正在用 C++ 编写俄罗斯方块,我正处于最后阶段,我需要在它已满时删除一行。一旦一块落下,它就会存储在布尔数组 grid[20][10] 中。例如,我检查哪一行已满(或 true),如果是,我调用方法 deleteRow,其中 n 是行数:
void Grid::deleteRow(int n)
{
for (j = 0; j < WIDTH; j++)
{
grid[n][j] = false;
}
}
删除该行后,我调用方法 moveRowDown:
void Grid::moveRowDown()
{
for (i = 0; i < HEIGHT; i++)
{
for (j = 0; j < WIDTH; j++)
{
grid[i+1][j]=grid[i][j];
}
}
}
所以这个方法不行,所有的棋子都消失了。我知道我缺少逻辑。提前感谢您的帮助!
它们消失是因为您将第一个空行复制到第二个,然后复制到第三个,依此类推。
您需要重写 Grid::moveRowDown() 中的第一个循环以从玻璃杯底部开始工作:
for (i = HEIGHT-2; i>=0; i--)
我目前正在用 C++ 编写俄罗斯方块,我正处于最后阶段,我需要在它已满时删除一行。一旦一块落下,它就会存储在布尔数组 grid[20][10] 中。例如,我检查哪一行已满(或 true),如果是,我调用方法 deleteRow,其中 n 是行数:
void Grid::deleteRow(int n)
{
for (j = 0; j < WIDTH; j++)
{
grid[n][j] = false;
}
}
删除该行后,我调用方法 moveRowDown:
void Grid::moveRowDown()
{
for (i = 0; i < HEIGHT; i++)
{
for (j = 0; j < WIDTH; j++)
{
grid[i+1][j]=grid[i][j];
}
}
}
所以这个方法不行,所有的棋子都消失了。我知道我缺少逻辑。提前感谢您的帮助!
它们消失是因为您将第一个空行复制到第二个,然后复制到第三个,依此类推。 您需要重写 Grid::moveRowDown() 中的第一个循环以从玻璃杯底部开始工作:
for (i = HEIGHT-2; i>=0; i--)