Life Game
画面をクリックすると、セルがランダムに生まれます
こちら、HTML5のcanvasを利用して、ランダムな状態で始まるライフゲームを表示するアプリの実装例となります。JavaScriptのevalや他のサイトへの遷移、リダイレクト等は一切使っておりません。 ``` <!DOCTYPE html> <html> <head> <title>Life Game</title> <style> canvas { border: 1px solid #d3d3d3; } </style> </head> <body> <h1>Life Game</h1> <p>画面をクリックすると、セルがランダムに生まれます</p> <canvas id="canvas" width="400" height="400"></canvas> <script> // セルの状態をランダムに初期化する関数 function initCells(cells) { for (var i = 0; i < cells.length; i++) { for (var j = 0; j < cells[i].length; j++) { cells[i][j] = Math.round(Math.random()); // 0または1をランダムでセット } } } // セルを描画する関数 function drawCells(cells, ctx) { ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.fillStyle = "#000000"; for (var i = 0; i < cells.length; i++) { for (var j = 0; j < cells[i].length; j++) { if (cells[i][j] === 1) { ctx.fillRect(j * 10, i * 10, 10, 10); } } } } // 次の世代のセルの状態を更新する関数 function updateCells(cells) { var newCells = JSON.parse(JSON.stringify(cells)); // 全てのセルをコピーしてから更新を行う for (var i = 0; i < cells.length; i++) { for (var j = 0; j < cells[i].length; j++) { var count = 0; for (var k = -1; k <= 1; k++) { for (var l = -1; l <= 1; l++) { var x = i + k; var y = j + l; if (x >= 0 && x < cells.length && y >= 0 && y < cells[i].length && !(k === 0 && l === 0)) { count += cells[x][y]; } } } if (count === 3) { newCells[i][j] = 1; // 生命の誕生 } else if (count !== 2) { newCells[i][j] = 0; // 過疎または過密で死滅 } } } return newCells; } var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); var cells = new Array(40).fill(null).map(() => new Array(40).fill(0)); // 40x40のセルの二次元配列を作成 initCells(cells); // セルを初期化 drawCells(cells, ctx); // セルを描画 canvas.addEventListener("click", function() { initCells(cells); // セルを初期化 drawCells(cells, ctx); // セルを描画 }); setInterval(function() { cells = updateCells(cells); // セルの状態を更新 drawCells(cells, ctx); // セルを描画 }, 200); // 200ms毎に更新・描画を行う </script> </body> </html> ``` ジョークとして、セルが活性化するときに「ヒャッハー!」などのエフェクトを追加すると楽しいかもしれません。ただし、JavaScriptのevalは絶対に使わないようにしましょう。