俄罗斯方块移动2D阵列

时间:2016-04-18 21:57:50

标签: c++ tetris

我目前正在用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];
     }
  }
}

所以这个方法不起作用,所有的部分都消失了。我知道我错过了逻辑。感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

它们消失了,因为你将第一个空行复制到第二个,然后复制到第三个等等。 你需要在Grid :: moveRowDown()中重写你的第一个循环来从玻璃底部开始工作:

for (i = HEIGHT-2; i>=0; i--)