ローグライクなコンソール プログラムをコーディングしていますが、質問があります。
私のコードは例外をキャッチしません。私はvoid
withfor
ループとを持っています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 ブロックは実際に機能します。しかし、プログラムを起動したときはそうではありません.(プレーヤーの位置はランダムです.左画面の端に近い場合は、起動時に例外が発生します.)
別の編集:「マジックナンバー」(ゼロ以下ではなく、最大値を超えない)を修正しました。これは、何が起こっても常に機能します。