我写了一个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/

10-09 22:19