假设我有一个像以下一维游戏网格:
例如,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(也是因为环绕)。我能想到的最好的是:
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)
这要复杂得多,这让我觉得我错过了一些明显的东西。有没有更好的方法来做到这一点?
另外,我还没有实现,但我想象一下,找东北和东南的对角线细胞仍然更加复杂。
出于这个问题的目的,请假设这仅限于1D阵列。此外,我认为有一个比较明智的解决方案,对于2的幂的电路板尺寸可能更优雅,但最好是解决方案适用于任何电路板尺寸。
答案 0 :(得分:1)
东:
if(checkLogCase != "^x"){
var equation = algebra.parse(one_one);
result = equation.solveFor("x");
}
西:
i + 1 - ((i mod 8) div 7) * 8
答案 1 :(得分:0)
以下列出了我在计算东方时使用的不同方法(在Javascript中):
east = s + 1 - (s + 1 & 7 ? 0 : 8)
east = s + 1 - ((s % 8) / 7 | 0) * 8
east = (s + 1) % 8 == 0 ? Math.floor(s / 8) * 8 : s + 1
east = (s & 0xFFF8) + ((s - (s & 0xFFF8) + 1) % 8)
lc = Math.floor(s / 8) * 8; east = lc + ((s - lc + 1) % 8)