このページでは、リンク以外の各種資料を掲載してゆきます。
下記のコードはAIで生成されたゲームです。意味はありませんが、生成コードママで動くゲームなんて、凄いことですよね。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Space Invaders</title>
<style>
body { display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #000; }
canvas { background: #000; display: block; }
</style>
</head>
<body>
<canvas id="gameCanvas" width="800" height="600"></canvas>
<script>
const canvas = document.getElementById('gameCanvas');
const context = canvas.getContext('2d');
const player = { x: canvas.width / 2 - 25, y: canvas.height - 60, width: 50, height: 50, speed: 5, bullets: [] };
const enemies = [];
const enemyRows = 5;
const enemyColumns = 10;
const enemyWidth = 40;
const enemyHeight = 40;
let score = 0;
let gameOver = false;
function drawPlayer() {
context.fillStyle = 'blue';
context.fillRect(player.x, player.y, player.width, player.height);
}
function drawEnemies() {
context.fillStyle = 'red';
for (const enemy of enemies) {
context.fillRect(enemy.x, enemy.y, enemy.width, enemy.height);
}
}
function drawBullets() {
context.fillStyle = 'yellow';
for (const bullet of player.bullets) {
context.fillRect(bullet.x, bullet.y, bullet.width, bullet.height);
}
}
function update() {
if (gameOver) {
context.fillStyle = 'white';
context.font = '48px sans-serif';
context.fillText('Game Over', canvas.width / 2 - 100, canvas.height / 2);
return;
}
context.clearRect(0, 0, canvas.width, canvas.height);
drawPlayer();
drawEnemies();
drawBullets();
player.bullets = player.bullets.filter(bullet => bullet.y > 0);
for (const bullet of player.bullets) {
bullet.y -= bullet.speed;
}
for (const enemy of enemies) {
enemy.y += enemy.speed;
if (enemy.y + enemy.height > canvas.height) {
gameOver = true;
}
}
for (const bullet of player.bullets) {
for (const enemy of enemies) {
if (
bullet.x < enemy.x + enemy.width &&
bullet.x + bullet.width > enemy.x &&
bullet.y < enemy.y + enemy.height &&
bullet.y + bullet.height > enemy.y
) {
enemies.splice(enemies.indexOf(enemy), 1);
player.bullets.splice(player.bullets.indexOf(bullet), 1);
score += 10;
}
}
}
context.fillStyle = 'white';
context.font = '16px sans-serif';
context.fillText(`Score: ${score}`, 10, 20);
requestAnimationFrame(update);
}
function createEnemies() {
for (let row = 0; row < enemyRows; row++) {
for (let col = 0; col < enemyColumns; col++) {
enemies.push({
x: col * (enemyWidth + 10),
y: row * (enemyHeight + 10),
width: enemyWidth,
height: enemyHeight,
speed: 0.1 // 敵のスピードを遅くします
});
}
}
}
document.addEventListener('keydown', event => {
if (event.key === 'ArrowLeft' && player.x > 0) {
player.x -= player.speed;
} else if (event.key === 'ArrowRight' && player.x + player.width < canvas.width) {
player.x += player.speed;
} else if (event.code === 'Space') { // スペースキーを反応させます
player.bullets.push({
x: player.x + player.width / 2 - 2.5,
y: player.y,
width: 5,
height: 10,
speed: 5
});
}
});
createEnemies();
update();
</script>
</body>
</html>