我正在为一个项目制作一个俄罗斯方块克隆。我已经完成了很多但是我的明确的线条类有一个我无法动摇的错误。我制作了一个10 * 20网格,我将精灵绘制成。当我在地板上找到一条线时,它工作得很好但是在它之上它只是删除了线并且也将它下面的所有东西都移动了。这是我的明确行类的代码:
public static void ClearLines()
{
for (int CountY = Game1.LandedBlocks.GetLength(1) - 1; CountY >= 0; CountY--)
{
bool clearLine = true;
for (int CountX = 0; CountX < Game1.LandedBlocks.GetLength(0); CountX++)
{
clearLine &= Game1.LandedBlocks[CountX, CountY] != -1;
}
if (clearLine)
{
for (int CountX = 0; CountX < Game1.LandedBlocks.GetLength(0); CountX++)
{
Game1.LandedBlocks[CountX, CountY] = -1;
}
for (int y = Game1.LandedBlocks.GetLength(1) - 1; y > 0; y--)
{
for (int CountX = 0; CountX < Game1.LandedBlocks.GetLength(0); CountX++)
{
Game1.LandedBlocks[CountX, y] = Game1.LandedBlocks[CountX, y - 1];
}
}
CountY++;
Game1.rows++;
Game1.score += 100;
}
}
}
如果有人能说清楚该怎么做,我真的很感激。我已经尝试了很多,没有任何作用:(
答案 0 :(得分:2)
看起来问题出在
for (int y = Game1.LandedBlocks.GetLength(1) - 1; y > 0; y--)
{
for (int CountX = 0; CountX < Game1.LandedBlocks.GetLength(0); CountX++)
{
Game1.LandedBlocks[CountX, y] = Game1.LandedBlocks[CountX, y - 1];
}
}
这(我认为)将所有行向下移动一行。问题是循环边界始终是第0行。您应该只将线移动到要清除的行之上。将y > 0
更改为y > lineNumber
,其中lineNumber
是您清除的行。