我写了一个Conway的快速JS实现。
为了计算与给定单元相邻的“活动”单元的数量,我手动检查了8个单元中的每一个。
function getNeighbourCount(x, y){
var intCount = 0;
intCount = (getCell(x-1, y-1)? intCount+1 : intCount); //x-1, y-1
intCount = (getCell(x, y-1)? intCount+1 : intCount);//x, y-1
intCount = (getCell(x + 1, y-1)? intCount+1 : intCount);//x + 1, y-1
intCount = (getCell(x-1, y)? intCount+1 : intCount);//x-1, y
intCount = (getCell(x+1, y)? intCount+1 : intCount);//x+1, y
intCount = (getCell(x-1, y+1)? intCount+1 : intCount);//x-1, y+1
intCount = (getCell(x, y+1)? intCount+1 : intCount);//x, y+1
intCount = (getCell(x+1, y+1)? intCount+1 : intCount);//x-1, y+1
return intCount;
}
它有效,但看起来笨拙。还有另一种更优雅的技术可以实现相同的目的吗?优选地,一种适用于不同内核大小的技术。
这是一个带有工作示例的小提琴:
http://jsfiddle.net/3vpz14v7/
笔记:
游戏状态保存在2D布尔数组中(在此示例中为50 * 50)
getCell(x,y)返回带有坐标包装的单元格的值。
最佳答案
您可以以更紧凑,更直观的格式存储内核,例如,
var kernel = [
"111",
"101",
"111"]
然后,您将编写一个函数,将其解码为对getCell的调用,从而使内核易于读取和修改(“ 1”表示“如果该位置的单元还活着,则增加1”)。
关于javascript - 计算细胞自动机的邻近细胞,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32777682/