You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的p5.js生命游戏无法正常运行,求故障原因分析

生命游戏p5.js程序故障分析

问题现象

程序初始生成随机黑白方块作为初始状态,仅运行一帧后所有白色存活方块全部消失,之后画面不再变化,控制台无报错信息。

故障原因

核心问题是赋值运算符使用错误:在更新下一代网格next时,错误使用了比较运算符==而非赋值运算符=,导致next数组未被正确赋值。

具体错误出现在draw函数的状态更新逻辑中:

  • 判断死细胞复活时,代码写为next[i][j] == 1(这是比较操作,无实际赋值效果)
  • 判断活细胞死亡时,代码写为next[i][j] == 0(同样是比较操作,无实际赋值效果)

由于make2D函数创建的二维数组元素默认是undefined,未被正确赋值的next数组所有元素保持undefined。当grid = next执行后,后续帧中所有细胞状态都是undefined,渲染时会被判定为假值,显示为黑色,表现为所有存活细胞消失且画面不再变化。

修正方案

将状态更新逻辑中的两个比较运算符==改为赋值运算符=:

修正后的draw函数状态更新部分代码:

//processing
let next = make2D(col, row);
for (let i = 0; i < col; i++) {
  for (let j = 0; j < row; j++) {
    let nb = calculatePosition(grid, i, j);
    if (grid[i][j] == 0 && nb == 3) {
      next[i][j] = 1; // 替换==为=
    } else if (grid[i][j] == 1 && (nb > 3 || nb < 2)) {
      next[i][j] = 0; // 替换==为=
    } else {
      next[i][j] = grid[i][j];
    }
  }
}
grid = next;

额外优化建议

  • 移除calculatePosition函数中的console.log(sum),避免每帧输出大量日志占用性能
  • 将frameRate(1)移至setup函数中,无需每帧重复设置

内容的提问来源于stack exchange,提问作者hirbry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:18:18