2016-04-02 15 views
0

私はボード上の各スペースのメモリを保持するために2次元配列を使うOthello/Reversiゲームを作っています。配列の範囲外のインデックスを避けるには?

有効な移動を確認するために、同じ行に沿って次のスペースを確認するためにr + 1を使用するif文を使用しています。しかし、配列が[8、8]だけ大きいので、rが8の状況に遭遇すると、配列の9番目の要素をチェックしようとしているのでエラーが発生します。これは私に範囲外のインデックスのエラーを与えます。

この問題を解決するにはどうすればよいでしょうか?私は多分リストにスワッピングすると思ったが、2d配列でもうまくいくかどうかは分かりません。

public box[,] grid = new box[8, 8]; 

if ((grid[r + 1, c].value == currentPlayer) 
     { 
      return true; 
     } 
+0

避ける方法?インデックスの境界外でないことを確認します。 :-) –

+0

'Length'プロパティまたは' Length() 'メソッドの使用を検討してください – Ian

+0

サイズを検証できるように、サイズをArrayにするconstを使用してください。 const int SIZE = 8; – jdweng

答えて

1

r + 1が法的なインデックスであることを確認してください。あなたはまだリストの範囲を超えてチェックしているので、リストを持つことは役に立ちません。したがって、あなたは単にあなたの配列のサイズを知っているので、

if (r + 1 > 7) return false; 

が必要です。

if (r + 1 > grid.GetUpperBound(0)) return false; 

あなたはcが境界内にあることを確認するために同じことを行うことができます:

if (c < 0 || c > grid.GetUpperBound(1)) return false; 
しかしあなたは、配列の最初の次元の上限を取得したほうが良いだろう「マジックナンバー」を避けるために、
関連する問題