我正在使用另外两条规则来处理康威的生活游戏。 第一条规则是我们有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;
}
答案 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,但我认为它说明了一点。希望这有帮助!