返回

掌握 JavaScript 版生命游戏的奥秘:在网页中培育生命

前端

生命游戏,这个由约翰·康威构思的智力体操,以其简单的规则和令人惊讶的复杂性而闻名。如今,借助 JavaScript 的强大功能,你可以在网页上创造自己的生命游戏宇宙。

生命的规则

生命游戏在一个二维网格上进行,网格中的每个单元格要么是活着的(由一个符号表示),要么是死的(由另一个符号表示)。在每一次演化(或代)中,每个单元格的命运都会根据其邻居的状态而决定:

  • 一个活着的单元格,周围有少于 2 个或多于 3 个活着的邻居,会在下一代中死亡。
  • 一个活着的单元格,周围有 2 个或 3 个活着的邻居,会在下一代中存活。
  • 一个死的单元格,周围有正好 3 个活着的邻居,会在下一代中复活。

用 JavaScript 实现

要创建 JavaScript 版的生命游戏,我们需要一个网格来表示游戏世界,以及一个函数来根据生命规则演化网格。

首先,创建网格:

const grid = new Array(height);
for (let i = 0; i < height; i++) {
  grid[i] = new Array(width);
}

然后,定义游戏规则:

function evolve() {
  // 遍历每个单元格
  for (let i = 0; i < height; i++) {
    for (let j = 0; j < width; j++) {
      // 计算活邻居数
      let neighbors = countNeighbors(i, j);

      // 根据邻居数更新单元格状态
      if (grid[i][j] === 1) {
        if (neighbors < 2 || neighbors > 3) {
          grid[i][j] = 0;
        }
      } else if (neighbors === 3) {
        grid[i][j] = 1;
      }
    }
  }
}

运行游戏

有了网格和演化函数后,就可以运行游戏了。使用 setInterval() 函数定期调用 evolve() 函数,让网格不断演化:

setInterval(evolve, 100); // 每 100 毫秒演化一次

示例和扩展

你可以创建各种各样的图案,例如滑翔机、振荡器和稳定图案。使用不同的初始化条件可以探索不同的生命形式。

要扩展你的游戏,可以考虑添加以下功能:

  • 交互性,允许用户创建和放置单元格
  • 随机生成图案
  • 存储和加载游戏状态
  • 视觉效果,例如彩色单元格或动画

结论

JavaScript 版的生命游戏是一个迷人的项目,它展示了编程的强大功能。通过了解其简单的规则,你可以在网页上培育和观察一个不断变化的虚拟世界。释放你的创造力,创造出自己的生命游戏宇宙!