我目前正在用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];
}
}
}
所以这个方法不起作用,所有的部分都消失了。我知道我错过了逻辑。感谢您的帮助!
答案 0 :(得分:1)
它们消失了,因为你将第一个空行复制到第二个,然后复制到第三个等等。 你需要在Grid :: moveRowDown()中重写你的第一个循环来从玻璃底部开始工作:
for (i = HEIGHT-2; i>=0; i--)