Conways Game of Life有更多规则

时间:2015-05-28 19:44:49

标签: javascript canvas conways-game-of-life

我正在使用另外两条规则来处理康威的生活游戏。 第一条规则是我们有10%生成绿色的细胞,我们的网格中可以生成所有细胞,并且我们有相同的百分比来生成红色的坏细胞,它会破坏周围的所有细胞。我无法理解如何实现这一点。 有没有人知道如何做到这一点?

通过鼠标绘图创建单元格:

var livingCells = me.cells.filter(function(c){
        return c.isAlive;
    }).forEach(function(c){
        ctx.fillStyle = me.cellColor;
        ctx.fillRect(c.x * width, c.y * height, width, height);

    });

然后我正在检测邻居并检查哪些细胞会死亡或活着:

me.getNeighbors = function(){

    return [grid.getCell(x-1, y-1),
            grid.getCell(x-1, y),
            grid.getCell(x-1, y+1),
            grid.getCell(x, y-1),
            grid.getCell(x, y+1),
            grid.getCell(x+1, y-1),
            grid.getCell(x+1, y),
            grid.getCell(x+1, y+1)];

}
me.shouldDie = function(){
    var livingNeighbors = me.getNeighbors().filter(function(c){
        return c.isAlive;
    });


    if(livingNeighbors.length < 2){
        return true;
    }

    if(livingNeighbors.length > 3){
        return true;
    }

    return false;
}


me.shouldBeBorn = function(){
    var livingNeighbors = me.getNeighbors().filter(function(c){
        return c.isAlive;
    });

    if(livingNeighbors.length === 3){
        return true;
    }
    return false;
}

My solution with original rules

1 个答案:

答案 0 :(得分:0)

假设您有一个使用原始规则的版本,您的设计包含一个中间缓冲区,用于存储仍在分析字段时的活动/死值。

为了实现新规则,您需要另一个缓冲区。

如:

field = Conway_field()

while True:
    buffer1 = apply_rule_1(field)
    buffer2 = apply_rule_2(buffer1)
    field = buffer2

所以,如果我理解你的问题,你需要根据常规规则计算下一代,然后根据你的新规则计算另一代。此外,您希望实施的新规则可能需要两个步骤,例如:

field = Conway_field()

while True:
    buffer1 = regular_rules(field)
    buffer2 = add_random_red_or_green_cells(buffer1)
    buffer3 = kill_red_neighbors_birth_green_neighbors(buffer2)
    field = buffer3

我知道你并没有使用python,但我认为它说明了一点。希望这有帮助!