3

プロジェクトのテトリスクローンを作成しています。私はほとんど完了しましたが、私の明確な線のクラスには、私が振ることができないバグがあります。スプライトを描画する 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;
        }
    }
}

誰かが何をすべきかについて光を当てることができれば、本当に感謝しています。私はたくさん試しましたが、何もうまくいきません:(

4

1 に答える 1

3

問題はにあるようです

            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];
                }
            }

これは(私が思うに)すべての行を1行下に移動します。問題は、ループ境界が常に行0に移動することです。クリアする行のいずれかの上にのみ行を移動する必要があります。クリアした行がどこにあるかに変更しy > 0ます。y > lineNumberlineNumber

于 2012-04-13T16:04:43.080 に答える