俄罗斯方块明确线问题

本文关键字:问题 方块 俄罗斯 | 更新日期: 2023-09-27 18:31:13

我正在为一个项目制作俄罗斯方块克隆。我差不多完成了,但我的清晰线条课程有一个我无法摆脱的错误。我制作了一个 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;
        }
    }
}

如果有人能阐明该怎么做,我将不胜感激。我尝试了很多,但没有任何效果:(

俄罗斯方块明确线问题

看起来问题出在

            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是清除的行。