-4

ローグライクなコンソール プログラムをコーディングしていますが、質問があります。

私のコードは例外をキャッチしません。私はvoidwithforループとを持っていますarrays。配列が範囲外の場合にエラーが発生します。これは、配列がゼロ以下か最大値を超えているかどうかを void がチェックしないために発生します。

    void lightUp(int pos)
    {
        //first and second
        for (int i = 1; i > -2; i--)
        {
            int lolPos = pos + (i * columns);
            for (int j = 0; j < 8; j++)
            {
                tiles[lolPos + j].isVisible = true;
                tiles[lolPos - j].isVisible = true;
            }
        }

        //third
        for (int i = 2; i > -3; i -= 4)
        {
            int lolPos = pos + (i * columns);
            for (int j = 0; j < 7; j++)
            {
                tiles[lolPos + j].isVisible = true;
                tiles[lolPos - j].isVisible = true;
            }
        }

        //fourth
        for (int i = 3; i > -4; i -= 6)
        {
            int lolPos = pos + (i * columns);
            for (int j = 0; j < 6; j++)
            {
                tiles[lolPos + j].isVisible = true;
                tiles[lolPos - j].isVisible = true;
            }
        }

        //fifth
        for (int i = 4; i > -5; i -= 8)
        {
            int lolPos = pos + (i * columns);
            for (int j = 0; j < 5; j++)
            {
                tiles[lolPos + j].isVisible = true;
                tiles[lolPos - j].isVisible = true;
            }
        }

        for (int i = 5; i > -6; i -= 10)
        {
            int lolPos = pos + (i * columns);
            for (int j = 0; j < 3; j++)
            {
                tiles[lolPos + j].isVisible = true;
                tiles[lolPos - j].isVisible = true;
            }
        }
    }

そのため、エラーが発生した場合にプログラムがクラッシュしないように、catch ブロックを作成しました。

            try
            {
                lightUp(player);
            }
            catch { }

しかし、私はまだIndexOutOfRange例外を取得しています。catch彼らはブロックに閉じ込められません。何故ですか?

編集:すべての回答をありがとう。考えてみれば、問題はデバッグ モード オプションにあるわけではありません。これは、プログラムの開始時にのみ発生することがわかりました。「範囲外」まで歩くだけかどうかをテストしました(ボイドがプレイヤーの近くのタイルを照らします)、catch ブロックは実際に機能します。しかし、プログラムを起動したときはそうではありません.(プレーヤーの位置はランダムです.左画面の端に近い場合は、起動時に例外が発生します.)

別の編集:「マジックナンバー」(ゼロ以下ではなく、最大値を超えない)を修正しました。これは、何が起こっても常に機能します。

4

3 に答える 3