我无法弄清楚如何处理绕回2d数组的边缘情况,以便超出界限的数字将环绕到网格的相对边缘。
这是我目前的代码,它有点工作,但我注意到它实际上并没有正确地包裹网格。
wrap: function (x, min, max){
if (x < min) {
return max + x
}
else if (x === min) {
return max - 10
}
else if (x > max) {
return min + 10
} else if (x <= max){
return max % x
}
// return x < 0 ? max + x : min
},
get_neighbour:function(x, y) {
if (g.grid[x] && g.grid[x][y]){
return g.grid[x][y].state
} else {
(g.grid[x]) ? x = x : x = g.func.wrap(x, 0, 500) ;
(g.grid[y]) ? y = y : y = g.func.wrap(y, 0, 500) ;
return g.grid[x][y].state
}
},
我在这里做错了什么?
答案 0 :(得分:0)
您的wrap
功能不完整。它处理x
小于0时的情况,但当x
不小于0时,它总是返回min
。此时,有两种情况:x
小于或等于max
,或x
大于max
,您需要处理它们。如果你使用if
和else if
而不是?:
运算符,它可能会更简单 - 代码肯定会更具可读性,并且更容易发现错误。
(此外,上面的代码min
始终为0,但原则上您应该检查x
是否小于min
而不是0。)