Clicker IA: Cómo crear un juego 'Test de Reacción' con JavaScript

Aprende a programar un juego clicker o test de reacción con JS puro. Explicamos el Game Loop con setInterval, la dificultad dinámica y la manipulación del DOM.

⚠️ ATENCIÓN

Objetivo: El sistema genera amenazas (bots) en coordenadas aleatorias. Tienes 3 segundos iniciales, pero el tiempo límite se reduce con cada acierto. ¿Podrás superar tu propia latencia neuronal?

PUNTOS
000
TIEMPO LÍMITE
3.0s

PRUEBA DE LATENCIA

TIEMPO INICIAL: 3.0s

EL TIEMPO SE REDUCE CON CADA ACIERTO

Bienvenido al simulador de reflejos del laboratorio. Hoy vamos a desgranar el código de Clicker IA, un juego diseñado no solo para poner a prueba tu velocidad, sino para enseñarte los fundamentos de la gestión del tiempo y el estado en JavaScript.



¿Cómo funciona un Game Loop con setInterval?

Para crear un Game Loop basado en el tiempo, como una cuenta atrás, se utiliza la función nativa setInterval(). Esta actúa como un metrónomo que ejecuta una función de actualización a intervalos fijos (ej: cada 100 milisegundos), controlando la lógica del juego de forma predecible.

💡 TRUCO

Nota para Makers: setInterval vs requestAnimationFrame Aunque para este ‘Clicker’ usamos setInterval por su sencillez en la gestión del tiempo, para juegos con gráficos en movimiento suave (como nuestro tutorial del juego Snake), siempre preferiremos requestAnimationFrame por su sincronización con la tasa de refresco del monitor. Cada herramienta tiene su contexto, y elegir la correcta es señal de un desarrollador senior.

Anatomía Técnica de Clicker IA
MóduloImplementación NativaPropósito
Game LoopsetInterval()Ejecutar la lógica de la cuenta atrás cada 100ms.
RenderizadoManipulación del DOMMover un elemento `<button>` cambiando su `style.left` y `style.top`.
DificultadVariables de estadoReducir el tiempo límite (`maxTimeCurrent`) con cada acierto.
PersistencialocalStorageGuardar la puntuación máxima (High Score).

Desafíos técnicos: Dificultad Dinámica y Posicionamiento

El verdadero reto de un juego como este no es hacer clic en un botón, sino programar un sistema que se adapte al jugador y mantenga la tensión.

1. La curva de dificultad

En lugar de una dificultad fija, Clicker IA te castiga por ser bueno. Cada vez que aciertas, el tiempo máximo para el siguiente objetivo se reduce una fracción de segundo. Esto se logra con una simple variable que se actualiza en cada acierto:

// El corazón de la dificultad dinámica
hitBot() {
    this.score++;
    
    // Reducimos el tiempo máximo, con un tope mínimo
    this.maxTimeCurrent = Math.max(
        this.MIN_TIME, 
        this.maxTimeCurrent - this.TIME_DECREMENT
    );

    // Reiniciamos el reloj con el nuevo límite de tiempo
    this.timeLeft = this.maxTimeCurrent; 
    
    this.moveBot();
}

2. Posicionamiento Responsive

Para que el bot nunca aparezca fuera de la pantalla, calculamos el área de juego disponible en tiempo real usando las propiedades clientWidth y clientHeight del contenedor:

const maxX = this.els.canvas.clientWidth - this.els.bot.offsetWidth;
const maxY = this.els.canvas.clientHeight - this.els.bot.offsetHeight;

const x = Math.random() * maxX;
const y = Math.random() * maxY;

this.els.bot.style.left = `${x}px`;
this.els.bot.style.top = `${y}py`;

🚀 ¿Listo para proyectos más complejos?

Dominar un juego simple es el primer paso. Si quieres subir de nivel y construir sistemas más robustos, te recomiendo estos nodos de nuestro laboratorio:

  1. El siguiente nivel en GameDev: Crea un juego tipo ‘Tower Defense’ con Lógica Vectorial
  2. La base de todo: La Biblia de Docker para Makers: Tu Primer Contenedor

Hardware para Reflejos de Élite


Un juego de reacción exige precisión. Un ratón con un sensor de alta calidad puede ser la diferencia entre superar tu récord o fallar por un milisegundo. Este es el que usamos en el búnker para las sesiones de “alta velocidad”:

📦 Amazon

Logitech G G502 HERO

El estándar de oro para juegos de precisión. Su sensor HERO 25K garantiza un seguimiento perfecto sin retardos, ideal para juegos clicker donde cada milisegundo cuenta.


¿Cuál ha sido tu racha más larga? ¡Comparte tu puntuación máxima en nuestro canal de Telegram! 🛠️