Mario / script.js
Gregniuki's picture
Create script.js
ab20260 verified
const gameArea = document.getElementById('game-area');
const player = document.getElementById('player');
let playerX = window.innerWidth / 2;
let bullets = [];
let invaders = [];
let invaderDirection = 1;
let invaderSpeed = 1;
// Create player
player.style.left = `${playerX}px`;
// Create invaders
function createInvaders() {
for (let row = 0; row < 3; row++) {
for (let col = 0; col < 8; col++) {
const invader = document.createElement('div');
invader.classList.add('invader');
invader.style.left = `${col * 60 + 50}px`;
invader.style.top = `${row * 60 + 50}px`;
gameArea.appendChild(invader);
invaders.push(invader);
}
}
}
// Move player
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowLeft' && playerX > 0) {
playerX -= 10;
} else if (e.key === 'ArrowRight' && playerX < window.innerWidth - 50) {
playerX += 10;
} else if (e.key === ' ') {
shoot();
}
player.style.left = `${playerX}px`;
});
// Shoot bullet
function shoot() {
const bullet = document.createElement('div');
bullet.classList.add('bullet');
bullet.style.left = `${playerX + 22.5}px`;
bullet.style.bottom = '50px';
gameArea.appendChild(bullet);
bullets.push(bullet);
}
// Move bullets
function moveBullets() {
bullets.forEach((bullet, index) => {
const bottom = parseInt(bullet.style.bottom, 10);
if (bottom > window.innerHeight) {
bullet.remove();
bullets.splice(index, 1);
} else {
bullet.style.bottom = `${bottom + 10}px`;
}
});
}
// Move invaders
function moveInvaders() {
let edgeReached = false;
invaders.forEach(invader => {
const left = parseInt(invader.style.left, 10);
if (left + invaderDirection * invaderSpeed < 0 || left + invaderDirection * invaderSpeed > window.innerWidth - 40) {
edgeReached = true;
}
});
if (edgeReached) {
invaderDirection *= -1;
invaders.forEach(invader => {
const top = parseInt(invader.style.top, 10);
invader.style.top = `${top + 20}px`;
});
} else {
invaders.forEach(invader => {
const left = parseInt(invader.style.left, 10);
invader.style.left = `${left + invaderDirection * invaderSpeed}px`;
});
}
}
// Check for collisions
function checkCollisions() {
bullets.forEach((bullet, bulletIndex) => {
const bulletRect = bullet.getBoundingClientRect();
invaders.forEach((invader, invaderIndex) => {
const invaderRect = invader.getBoundingClientRect();
if (bulletRect.bottom > invaderRect.top &&
bulletRect.top < invaderRect.bottom &&
bulletRect.right > invaderRect.left &&
bulletRect.left < invaderRect.right) {
bullet.remove();
invader.remove();
bullets.splice(bulletIndex, 1);
invaders.splice(invaderIndex, 1);
}
});
});
}
// Game loop
function gameLoop() {
moveBullets();
moveInvaders();
checkCollisions();
requestAnimationFrame(gameLoop);
}
// Initialize game
createInvaders();
gameLoop();