俄罗斯方块移动二维数组

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--)