2016-04-27 13 views
2

現在、C#でUnityに戦術的なRPGをコーディングしようとしています。そのために、パスファインディング、ダイクストラ、ノードのエッジなどを使用する必要があります。 2D領域エッジとノードの2次元領域での私のマップを表す文字の、ここでマップ:2Dエリアで不明なキャラクタ

map

#は、マップの境界線をマークするためにここにいると、範囲エラーのインデックスアウトをかわします。ここで

は、プロジェクトのコードです:

public Nodes[,] GenerateNodes(TextAsset lvl) 
{ 
    Nodes[,] nodeArray; 
    char[,] matrix = GenerateArray(lvl); 

    nodeArray = new Nodes[matrix.GetLength(0), matrix.GetLength(1)]; 

    for (int row = 0; row < matrix.GetLength(0); row++) 
    { 
     for (int col = 0; col < matrix.GetLength(1); col++) 
     { 
      char type = matrix[row, col]; 
      if (type != '#' && type != '\n') 
      { 
       Debug.LogError(type); 
       Nodes n = new Nodes(row, col, type); 
       nodeArray[row, col] = n; 
       findNeighbors(row, col, matrix, nodeArray); //assuming nodes and matrix variables are instance variables 
      } 
      else 
       nodeArray[row, col] = null; 
     } 
    } 
    return nodeArray; 
} 
public void findNeighbors(int row, int col, char[,] matrix, Nodes[,] nodeArray) 
{ 
    for (int r = -1; r <= 1; r++) 
    { 
     for (int c = -1; c <= 1; c++) 
     { 
      Debug.LogError(row); 
      Debug.LogError(col); 
      if (matrix[row + r, col + c] != '#') 
      { 
       nodeArray[row, col].addEdges(nodeArray[row + r, col + c]); 
      } 
     } 
    } 
} 

GenerateArray()方法が動作しています。私は以前それを使用していました。問題はfindNeighbors()から発生します。私はこのエラーがあります:

Array Out of range at the row 0 and the columns 19

問題は、私はちょうどここにいくつかの#を持っている、そしてここでもすることになっていないです。私はそのチャートを印刷しようとしましたが何も印刷しませんでしたので、行を書き直して\nなどを抑制しようとしましたが、何も得られません。

+2

サンプルファイルの行末はちょうど "\ n"ですか?またはそれらは "\ r \ n"ですか? –

+0

私は窓に、良い推測、それはその気が\ rだった、ありがとう! –

答えて

0

私が数えた限りでは、18個の列があり、列19にアクセスしようとしていますが、もちろんこの例外がスローされます。

このような場合は、あなたのfindneighborsのための第二の上に置く必要があります。

if(row == 0 && r == -1) 
    continue; 
if(col == matrix.GetLength(1) && c == 1) 
    continue; 

たぶん、あなたはイムにあなたを伝える何を行うには良い方法を見つけることができますが、ない場合は心に留めておくことができます存在しない配列のインデックスにアクセスしないでください。このエラーが発生し続けることになります。

編集。 私たちの仲間@yesによると、誤って数えているように、19列と18列ではありません。私が提供した解決策はまだ有効です:D

+0

は19行もありませんが、配列はゼロインデックスされているため、19 of cのインデックスは範囲外です。問題はあなたが述べたところで正確に発生します。エッジ上の隣人。最も左の列にcol + 1はありません。 – yes

関連する問題