Capítulo 03

Movimiento de paletas

Objetivo: mover la paleta del jugador con teclado y mover la paleta de la CPU siguiendo la pelota.

1. Función update()

update() contiene la lógica que cambia el estado del juego. En este capítulo solo modificará la posición vertical de las paletas.

Estructura de update
function update() {
    updatePlayerPaddle();
    updateComputerPaddle();
}

updatePlayerPaddle() modifica la paleta izquierda. updateComputerPaddle() modifica la paleta derecha. Ambas funciones cambian la propiedad y de su paleta correspondiente.

2. Paleta del jugador

La paleta del jugador tiene movimiento vertical. En la representación siguiente, el zoom muestra solo el sector izquierdo de la cancha. La paleta sube y baja dentro de los límites verticales.

Paleta del jugador
Lectura continua
function updatePlayerPaddle() {
    if (p.keyIsDown(p.UP_ARROW) || p.keyIsDown(87)) {
        player.y -= 5;
    }
    if (p.keyIsDown(p.DOWN_ARROW) || p.keyIsDown(83)) {
        player.y += 5;
    }
    player.y = p.constrain(player.y, 0, H - paddleH);
}

p.keyIsDown() detecta una tecla mantenida. player.y -= 5 mueve hacia arriba. player.y += 5 mueve hacia abajo. p.constrain(player.y, 0, H - paddleH) impide que la paleta salga del canvas.

3. Paleta de la CPU

La CPU calcula una posición objetivo a partir de la pelota. La paleta no se teletransporta; se acerca gradualmente al objetivo.

CPU siguiendo la pelota
Seguimiento proporcional
function updateComputerPaddle() {
    let target = ball.y - paddleH / 2;
    let diff = target - computer.y;
    computer.y += diff * 0.06;
    computer.y = p.constrain(computer.y, 0, H - paddleH);
}

target representa la posición vertical que centraría la paleta con la pelota. diff mide la distancia entre la posición actual y el objetivo. diff * 0.06 aplica una corrección parcial por frame.

4. update() integrado

La versión integrada mantiene ambas reglas dentro de una sola función. Es útil cuando el juego todavía es pequeño.

Movimiento integrado
function update() {
    if (p.keyIsDown(p.UP_ARROW) || p.keyIsDown(87)) player.y -= 5;
    if (p.keyIsDown(p.DOWN_ARROW) || p.keyIsDown(83)) player.y += 5;
    player.y = p.constrain(player.y, 0, H - paddleH);

    let target = ball.y - paddleH / 2;
    let diff = target - computer.y;
    computer.y += diff * 0.06;
    computer.y = p.constrain(computer.y, 0, H - paddleH);
}

Este bloque deja listas las paletas. La pelota se incorpora en el capítulo siguiente.