3

だから私は実用的な getNeighbors 関数を持っています:

(私のマップの大きさに基づいて静的であり、まだ動的にはしていません..それは問題ではありませんが)

その19x12

public int[] getNeighbors(int i) {

  int[] neighbors = new int[6];
  if (((i % xlength) % 2) == 0) {
      neighbors[0] = (i - 19);
      neighbors[1] = (i - 18);
      neighbors[2] = (i + 1);
      neighbors[3] = (i + 19);
      neighbors[4] = (i - 1);
      neighbors[5] = (i - 20);
  } else {
      neighbors[0] = (i - 19);
      neighbors[1] = (i + 1);
      neighbors[2] = (i + 20);
      neighbors[3] = (i + 19);
      neighbors[4] = (i + 18);
      neighbors[5] = (i - 1);
  }

}

それはすべてうまく機能しますが、端にいるとハングします。

ケースバイケースでやるべきなのか、それとも考えすぎなのかわかりません。現在、ドットを 16 進数から 16 進数にランダムに移動するための自動化されたスクリプトがあり、それをトーラス グリッドとして扱い、反対側にホップすることがあります (私が望むものではありませんが、現在のコードでは期待していました)。探している無限ループで。

4

1 に答える 1

3

このようなアルゴリズムに問題がある場合は、ボードをエッジ全体で 1 タイル大きくする方がはるかに簡単です。もちろん、それらが位置に使用されることを制限しますが、隣人のロジックはエッジで異なる必要はありません。

于 2012-12-30T07:29:52.110 に答える