在二维六边形网格上寻找邻居



所以我有一个工作的getNeighbors函数:

(它是静态的,基于我的地图有多大,还没有使它动态…虽然这应该不是问题)

19 x12的

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);
  }

}

它工作得很好,但当我在边缘时就挂了。

我不知道我是否应该逐案处理,还是我想太多了。现在我有一个自动的脚本移动点随机从十六进制到十六进制,有时它将其视为一个环面网格和跳转到另一边(不是我想要的,但我期望它与当前的代码)或只是挂在一个无限循环,我搜索。

在这种情况下,你的算法有问题,它可以更简单,使棋盘的所有方式的边缘大一个瓷砖。你当然会限制它们被用于位置,但你的邻居逻辑不需要在边缘上不同。

最新更新