Gu铆a Paso a Paso para Crear un Juego de Space Invaders con HTML, CSS y JavaScript

Contenido

Requisitos Previos

Estructura del Proyecto

HTML: Creando la Base del Juego

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Space Invaders</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="game-container">
        <div id="player"></div>
        <div id="invaders"></div>
        <div id="bullets"></div>
    </div>
    <script src="script.js"></script>
</body>
</html>

CSS: Estilizando el Juego

body {
    margin: 0;
    padding: 0;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    background-color: #000;
}

.game-container {
    position: relative;
    width: 600px;
    height: 400px;
    border: 2px solid #fff;
    overflow: hidden;
}

#player {
    position: absolute;
    bottom: 10px;
    left: 50%;
    width: 40px;
    height: 20px;
    background-color: #0f0;
    transform: translateX(-50%);
}

#invaders {
    position: absolute;
    top: 10px;
    left: 10px;
    width: 580px;
    height: 150px;
}

.invader {
    position: absolute;
    width: 40px;
    height: 20px;
    background-color: #f00;
}

#bullets {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

JavaScript: L贸gica del Juego

document.addEventListener('DOMContentLoaded', () => {
    const player = document.getElementById('player');
    const invadersContainer = document.getElementById('invaders');
    const bulletsContainer = document.getElementById('bullets');
    const gameContainer = document.querySelector('.game-container');

    let playerPosition = gameContainer.offsetWidth / 2 - player.offsetWidth / 2;
    let bulletArray = [];
    let invaderArray = [];

    // Crear invasores
    function createInvaders() {
        for (let i = 0; i < 5; i++) {
            for (let j = 0; j < 11; j++) {
                const invader = document.createElement('div');
                invader.classList.add('invader');
                invader.style.left = `${j * 50}px`;
                invader.style.top = `${i * 30}px`;
                invadersContainer.appendChild(invader);
                invaderArray.push(invader);
            }
        }
    }

    // Mover jugador
    document.addEventListener('keydown', (e) => {
        if (e.key === 'ArrowLeft' && playerPosition > 0) {
            playerPosition -= 10;
            player.style.left = `${playerPosition}px`;
        } else if (e.key === 'ArrowRight' && playerPosition < gameContainer.offsetWidth - player.offsetWidth) {
            playerPosition += 10;
            player.style.left = `${playerPosition}px`;
        } else if (e.key === ' ') {
            shoot();
        }
    });

    // Disparar balas
    function shoot() {
        const bullet = document.createElement('div');
        bullet.classList.add('bullet');
        bullet.style.left = `${playerPosition + player.offsetWidth / 2 - 2}px`;
        bullet.style.bottom = '30px';
        bulletsContainer.appendChild(bullet);
        bulletArray.push(bullet);
        moveBullet(bullet);
    }

    // Mover balas
    function moveBullet(bullet) {
        const bulletInterval = setInterval(() => {
            bullet.style.bottom = `${parseInt(bullet.style.bottom) + 10}px`;
            if (parseInt(bullet.style.bottom) > gameContainer.offsetHeight) {
                bullet.remove();
                clearInterval(bulletInterval);
            }
            checkCollision(bullet, bulletInterval);
        }, 30);
    }

    // Verificar colisi贸n
    function checkCollision(bullet, bulletInterval) {
        invaderArray.forEach((invader, index) => {
            const invaderRect = invader.getBoundingClientRect();
            const bulletRect = bullet.getBoundingClientRect();

            if (
                bulletRect.left < invaderRect.right &&
                bulletRect.right > invaderRect.left &&
                bulletRect.top < invaderRect.bottom &&
                bulletRect.bottom > invaderRect.top
            ) {
                invader.remove();
                bullet.remove();
                invaderArray.splice(index, 1);
                clearInterval(bulletInterval);
            }
        });
    }

    createInvaders();
});

OBSERVA EL FUNCIONAMIENTO DEL MISMO JUEGO AQU脥

Conclusi贸n

Deja un comentario

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *

Scroll al inicio