HTML JavaScript 康威生命游戏

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>康威生命游戏</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      text-align: center;
    }

    #game-board {
      display: inline-block;
      border: 1px solid black;
    }

    .cell {
      width: 15px;
      height: 15px;
      float: left;
      border:1px solid black;
      background-color: white;
    }

    .cell.alive {
      background-color: black;
    }

    button {
      margin-top: 10px;
    }
  </style>
</head>
<body>
  <h1 style="font-size: 14px;">康威生命游戏 先点击设定初始图形,再点击开始</h1>
  <div id="game-board"></div>

  <button onclick="startGame()" style="width: 50px;">开始</button>
  <button onclick="clearBoard()" style="width: 50px;">清除</button>

  <script>
    const ROWS = 30;
    const COLS = 60;
    let board = [];
    let nextBoard = [];
    let gameInterval = null; // 添加一个全局变量来存储定时器的引用  

    function initializeBoard() {
      board = [];
      nextBoard = [];

      for (let i = 0; i < ROWS; i++) {
        board[i] = [];
        nextBoard[i] = [];

        for (let j = 0; j < COLS; j++) {
          board[i][j] = false;
          nextBoard[i][j] = false;
        }
      }
    }

    function drawBoard() {
      const gameBoard = document.getElementById('game-board');
      gameBoard.innerHTML = '';

      for (let i = 0; i < ROWS; i++) {
        for (let j = 0; j < COLS; j++) {
          const cell = document.createElement('div');
          cell.className = 'cell';

          if (board[i][j]) {
            cell.classList.add('alive');
          }

          cell.addEventListener('click', () => {
            board[i][j] = !board[i][j];
            drawBoard();
          });

          gameBoard.appendChild(cell);
        }

        const br = document.createElement('br');
        gameBoard.appendChild(br);
      }
    }

    function countNeighbors(row, col) {
      let count = 0;

      for (let i = -1; i <= 1; i++) {
        for (let j = -1; j <= 1; j++) {
          if (i === 0 && j === 0) {
            continue;
          }

          const neighborRow = row + i;
          const neighborCol = col + j;

          if (
            neighborRow >= 0 &&
            neighborRow < ROWS &&
            neighborCol >= 0 &&
            neighborCol < COLS &&
            board[neighborRow][neighborCol]
          ) {
            count++;
          }
        }
      }

      return count;
    }

    function updateBoard() {
      for (let i = 0; i < ROWS; i++) {
        for (let j = 0; j < COLS; j++) {
          const neighbors = countNeighbors(i, j);

          if (board[i][j]) {
            if (neighbors < 2 || neighbors > 3) {
              nextBoard[i][j] = false;
            } else {
              nextBoard[i][j] = true;
            }
          } else {
            if (neighbors === 3) {
              nextBoard[i][j] = true;
            }
          }
        }
      }

      for (let i = 0; i < ROWS; i++) {
        for (let j = 0; j < COLS; j++) {
          board[i][j] = nextBoard[i][j];
        }
      }
    }

    function startGame() {
      // 在启动新定时器之前,检查并清除可能存在的旧定时器  
      if (gameInterval !== null) {  
        clearInterval(gameInterval);  
        gameInterval = null;  
      }  
  
      // 启动新的定时器并保存在全局变量中  
      gameInterval = setInterval(() => {  
        updateBoard();  
        drawBoard();  
      }, 300);  
    }

    function clearBoard() {
       // 清除定时器  
       if (gameInterval !== null) {  
        clearInterval(gameInterval);  
        gameInterval = null;  
      }  
      initializeBoard();
      drawBoard();
    }

    initializeBoard();
    drawBoard();
  </script>
</body>
</html>

在这里插入图片描述

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python康威生命游戏是一个基于细胞自动机的游戏,它由约翰·康威发明。在这个游戏中,有一个二维的网格世界,每个网格上的细胞可以存在或死亡,它们的生死状态取决于周围八个格子中存活细胞的数量。 要实现这个游戏,你可以使用Python语言。首先,你需要定义一个二维数组来表示网格世界,其中每个元素表示一个细胞的状态(存活或死亡)。然后,你可以编写一个函数来计算每个细胞的下一次状态,根据周围细胞的存活情况进行判断。最后,你可以使用循环来不断更新网格中每个细胞的状态,从而模拟游戏的演化过程。 在你的代码中,你可以使用引用提供的主函数作为入口点,并将网格的大小和迭代次数作为参数传递给主函数。接下来,你可以在主函数中调用你编写的函数来更新网格的状态,并在每次迭代后打印出网格的当前状态,以便观察游戏的演化过程。 需要注意的是,康威生命游戏是一个零玩家游戏,也就是说它的演化是由初始状态决定的,不需要进一步的输入。因此,在运行程序之前,你需要定义一个初始的网格状态,可以手动设置一些细胞的存活状态,或者使用一些随机生成的初始状态。 通过以上步骤,你就可以编写一个简单的Python程序来实现康威生命游戏了。这个程序将模拟细胞的生命周期,并展示出不同存活规则下细胞群体的演化情况。你可以根据自己的需求来调整网格的大小和迭代次数,以及定义不同的初始状态,来观察不同情况下游戏的演化效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值