Untitled
unknown
plain_text
a year ago
4.9 kB
7
Indexable
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Space Invaders</title>
<style>
body {
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: black;
}
canvas {
border: 1px solid white;
}
</style>
</head>
<body>
<canvas id="gameCanvas" width="480" height="320"></canvas>
<script>
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
// Define player properties
const playerWidth = 50;
const playerHeight = 10;
let playerX = (canvas.width - playerWidth) / 2;
const playerY = canvas.height - 20;
const playerSpeed = 7;
// Define bullet properties
const bulletWidth = 3;
const bulletHeight = 10;
let bulletX;
let bulletY = playerY - bulletHeight;
let bulletSpeed = 5;
let isBulletActive = false;
// Define enemy properties
const enemyRows = 5;
const enemyCols = 10;
const enemyWidth = 30;
const enemyHeight = 20;
const enemyPadding = 10;
const enemyOffsetTop = 30;
const enemyOffsetLeft = 30;
let enemies = [];
// Create enemies
for (let c = 0; c < enemyCols; c++) {
enemies[c] = [];
for (let r = 0; r < enemyRows; r++) {
enemies[c][r] = { x: 0, y: 0, status: 1 };
}
}
// Add event listeners
document.addEventListener('keydown', movePlayer);
document.addEventListener('keydown', shootBullet);
function movePlayer(event) {
if (event.key === 'ArrowLeft' && playerX > 0) {
playerX -= playerSpeed;
} else if (event.key === 'ArrowRight' && playerX < canvas.width - playerWidth) {
playerX += playerSpeed;
}
}
function shootBullet(event) {
if (event.key === ' ' && !isBulletActive) {
bulletX = playerX + (playerWidth / 2);
bulletY = playerY - bulletHeight;
isBulletActive = true;
}
}
function drawPlayer() {
ctx.beginPath();
ctx.rect(playerX, playerY, playerWidth, playerHeight);
ctx.fillStyle = 'white';
ctx.fill();
ctx.closePath();
}
function drawBullet() {
if (isBulletActive) {
ctx.beginPath();
ctx.rect(bulletX, bulletY, bulletWidth, bulletHeight);
ctx.fillStyle = 'white';
ctx.fill();
ctx.closePath();
}
}
function drawEnemies() {
for (let c = 0; c < enemyCols; c++) {
for (let r = 0; r < enemyRows; r++) {
if (enemies[c][r].status === 1) {
const enemyX = c * (enemyWidth + enemyPadding) + enemyOffsetLeft;
const enemyY = r * (enemyHeight + enemyPadding) + enemyOffsetTop;
enemies[c][r].x = enemyX;
enemies[c][r].y = enemyY;
ctx.beginPath();
ctx.rect(enemyX, enemyY, enemyWidth, enemyHeight);
ctx.fillStyle = 'white';
ctx.fill();
ctx.closePath();
}
}
}
}
function collisionDetection() {
for (let c = 0; c < enemyCols; c++) {
for (let r = 0; r < enemyRows; r++) {
const enemy = enemies[c][r];
if (enemy.status === 1) {
if (bulletX > enemy.x && bulletX < enemy.x + enemyWidth && bulletY > enemy.y && bulletY < enemy.y + enemyHeight) {
enemy.status = 0;
isBulletActive = false;
}
}
}
}
}
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawPlayer();
drawBullet();
drawEnemies();
collisionDetection();
// Move bullet
if (isBulletActive) {
bulletY -= bulletSpeed;
if (bulletY < 0) {
isBulletActive = false;
}
}
requestAnimationFrame(draw);
}
draw();
</script>
</body>
</html>Editor is loading...
Leave a Comment