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は絶対に使わないようにしましょう。