俄罗斯方块移动2D阵列

Tetris shifting 2D array

本文关键字:阵列 2D 移动 方块 俄罗斯      更新时间:2023-10-16

我目前正在用C++编写一个俄罗斯方块,我正处于最后一个阶段,当它满了时,我需要删除一行。一旦一块掉落,它就会存储在布尔数组网格[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--)