javascript - 康威的生命游戏规则

标签 javascript conways-game-of-life

我知道这有点模糊,但我一直在尝试用 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 数组(矩阵)来存储游戏的状态,每个单元格都被建模为一个简单的对象 - 这里唯一相关的参数是它的状态(存储为颜色,实时为“黑色”) )。

此处的上下文代码:https://github.com/HughEvans01/GameOfLife

最佳答案

您正在更新您所阅读的同一网格。您可能希望从两个网格开始:当前状态和新状态。迭代当前状态下的单元格以计算新状态,然后将新状态用于下一次迭代,依此类推。

您可以进行很多优化,但这将为您提供一个正确的起点。

此外,正如其他人指出的,成语 2 <= neighbours <= 3不会像你想象的那样在 JS 中进行评估

关于javascript - 康威的生命游戏规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55695696/

相关文章:

javascript - 如何创建二维数组数组?

javascript - Magento:结帐滚动到页面顶部

javascript - 康威的生命游戏 - 算法不正确?

javascript - 理解 jQuery $.extend() 的正确用法

javascript - 在矩数组中查找 moment.js 对象?

java - 为什么我返回的计数值错误?

Javascript 未定义函数错误

c++ - C - 变量未初始化就被使用

javascript - <td> 的内容不可见

javascript - 如何从 AngularJS 指令中选择动态生成的元素?