所以我有一个工作的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); }
}
它工作得很好,但当我在边缘时就挂了。
我不知道我是否应该逐案处理,还是我想太多了。现在我有一个自动的脚本移动点随机从十六进制到十六进制,有时它将其视为一个环面网格和跳转到另一边(不是我想要的,但我期望它与当前的代码)或只是挂在一个无限循环,我搜索。
在这种情况下,你的算法有问题,它可以更简单,使棋盘的所有方式的边缘大一个瓷砖。你当然会限制它们被用于位置,但你的邻居逻辑不需要在边缘上不同。