假设我有一个如下所示的一维游戏网格:
例如,27 号以南的单元格将是 35 号单元格,而 59 号以南的单元格将是 3(因为环绕)。这可以像这样实现:
var s = spot = 59
var r = row length = 8
var b = board size = 64
var south = (s+r) mod b
好的,现在让我们尝试找到另一个单元格以东的单元格。 27以东的单元格是28,31以东的单元格是24(也是因为wrap-around)。我能想到的最好的是:
var s = spot = 31
var r = row length = 8
var lc = left column = Math.floor(s / 8) * 8
var east = lc + ((s - lc + 1) % 8)
这要复杂得多,这让我觉得我遗漏了一些明显的东西。有没有更好的方法来做到这一点?
此外,我还没有实现,但我想找到像东北和东南这样的对 Angular 线单元格会更加复杂。
为了这个问题的目的,请假设这仅限于一维数组。此外,我想有一个按位解决方案,它对于 2 的幂的电路板尺寸可能更优雅,但最好该解决方案适用于任何电路板尺寸。
最佳答案
东:
i + 1 - ((i mod 8) div 7) * 8
西:
(i - 1) + (((i - 1) mod 8) div 7) * 8
or
(i - 1) + (((i + 7) mod 8) div 7) * 8
to avoid potential problems with negative dividend modulo in some languages
关于javascript - 使用环绕在一维阵列网格中查找邻居的更优雅的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47458895/