我知道这有点模糊,但我一直在尝试用 JS 实现康威生命游戏的规则,但我得到的结果是一团糟(不是正确的康威生命游戏框架) 。谁能告诉我我执行规则有什么问题吗?
// Update state of selected cell
if ((neighbours < 2) && (cells[y][x].colour == "black")) {
// "Any live cell with fewer than two live neighbours dies, as if by underpopulation."
cells[y][x].colour = "white";
} else if ((2 <= neighbours <= 3) && (cells[y][x].colour == "black")) {
// "Any live cell with two or three live neighbours lives on to the next generation."
cells[y][x].colour = "black";
} else if ((neighbours == 3) && (cells[y][x].colour == "white")) {
// "Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction."
cells[y][x].colour = "black";
} else if ((3 < neighbours) && (cells[y][x].colour == "black")) {
// "Any live cell with more than three live neighbours dies, as if by overpopulation."
cells[y][x].colour = "white";
}
注意:我使用 2D 数组(矩阵)来存储游戏的状态,每个单元格都被建模为一个简单的对象 - 这里唯一相关的参数是它的状态(存储为颜色,实时为“黑色”) )。
最佳答案
您正在更新您所阅读的同一网格。您可能希望从两个网格开始:当前状态和新状态。迭代当前状态下的单元格以计算新状态,然后将新状态用于下一次迭代,依此类推。
您可以进行很多优化,但这将为您提供一个正确的起点。
此外,正如其他人指出的,成语 2 <= neighbours <= 3
不会像你想象的那样在 JS 中进行评估
关于javascript - 康威的生命游戏规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55695696/