Capítulo 02

Estado y reinicio de partida

Objetivo: crear las entidades principales de Pong y definir una función reset() que deje la partida lista.

1. Paletas como objetos

Cada paleta necesita posición y marcador propio. La coordenada x es fija. La coordenada y cambia durante el juego.

Paletas
player = { x: 24, y: H / 2 - paddleH / 2, score: 0 };
computer = { x: W - 24 - paddleW, y: H / 2 - paddleH / 2, score: 0 };

player.x ubica la paleta izquierda. computer.x ubica la paleta derecha. Ambas usan H / 2 - paddleH / 2 para quedar centradas verticalmente.

2. Pelota como objeto

La pelota necesita posición y velocidad. vx controla movimiento horizontal. vy controla movimiento vertical.

Pelota
ball = {
    x: W / 2,
    y: H / 2,
    vx: 4 * serveDir,
    vy: p.random(-2, 2)
};

x e y colocan la pelota al centro. serveDir vale 1 o -1, por lo que decide si la pelota sale hacia la derecha o izquierda. p.random(-2, 2) evita que todos los saques tengan el mismo ángulo.

3. reset()

reset() reinicia una partida completa. Debe recrear paletas, pelota, score y efectos visuales temporales.

Reset de partida
function reset() {
    player = { x: 24, y: H / 2 - paddleH / 2, score: 0 };
    computer = { x: W - 24 - paddleW, y: H / 2 - paddleH / 2, score: 0 };
    ball = { x: W / 2, y: H / 2, vx: 4 * serveDir, vy: p.random(-2, 2) };
    score = 0;
    trail = [];
    ctx.onScore(0);
}

trail = [] elimina posiciones anteriores de la pelota. ctx.onScore(0) sincroniza el HUD externo con el nuevo estado.

4. resetBall()

Después de un punto no se debe reiniciar toda la partida. Solo se recentra la pelota y se limpia la estela.

Reset de pelota
function resetBall() {
    ball = {
        x: W / 2,
        y: H / 2,
        vx: 4 * serveDir,
        vy: p.random(-2, 2)
    };
    trail = [];
}

resetBall() conserva player.score y computer.score. Solo reinicia la pelota para iniciar el siguiente saque.

5. Llamada inicial

Luego de declarar reset(), se llama una vez para asegurar que todas las entidades existan antes del primer frame.

Inicialización
reset();