0

私はパックマン ゲームを作っており、現在ゴースト AI に取り組んでいます。経路探索にはダイクストラのアルゴリズムを使用する予定です。私の問題は、ゲームが読み込まれると、グラフの頂点がマトリックスに格納されることです。このように各頂点にすべてのエッジを割り当てようとしています

    for(int x = 0; x<40; x++)
    {
        for(int y = 0; y<40; y++)
        {
            Vertex vertex = map[x][y];
            vertex.adjacencies = new Edge[]{new Edge(map[x-1][y], 1), new Edge(map[x+1][y], 1), new Edge(map[x][y-1], 1), new Edge(map[x][y+1], 1)};
        }
    }

問題は、配列の範囲外の例外がスローされることがあるということです。現在の頂点がグラフの端にあるかどうかを確認するために大量の if ステートメントを入れずに、これを修正するにはどうすればよいでしょうか?

4

2 に答える 2

0

次のように、「境界線」を 1 にしてループを開始する必要があります。

for(int x = 1; x < 39; x++)

ax が 0 から始まる map[x-1][y] でエッジを作成すると、配列インデックスとして -1 が使用されるため、Array Out of Bounds 例外がスローされます。

于 2013-05-18T13:10:05.103 に答える
0

簡単な方法の 1 つは、通過できない境界線をエッジの周りに含めることです。

たとえば、実際のマップが 40x40 の場合、42x42 配列を宣言できます。行 0 と n は、列 0 と n と同様にトラバースできません。

左側と右側の間のパックマンの円筒形の移動を処理する必要があります。

于 2013-05-18T13:10:30.993 に答える