← Volver al Índice

Traffic Control

Documentación Técnica

1. Ficha Técnica

  • Nombre: Traffic Control
  • ODS: ODS 11 - Ciudades y Comunidades Sostenibles
  • Objetivo: Gestionar los semáforos de un cruce clicando alternativamente en el centro de la intersección para prevenir accidentes y evitar atascos desmedidos prolongados.

2. Mecánica y Flujo de Juego

Las mecánicas emulan una vía de un sólo carril por dirección cortada perpendicularmente (Intersección Tipo Cruz).

  1. El semáforo interno y visual es estrictamente Binario (True = Horizontal fluye, Vertical Pare; False = la inversa). Los ciclos de verde, ámbar, rojo estandarizados simplifican a Verde y Rojo puro.
  2. Coches spawnan proceduralmente fuera de la pantalla (Coords -10% o 110%) en uno de 4 vectores fijos (Right, Left, Up, Down).
  3. Adquieren un loop de movimiento continuo, detestando frenar y evaluando las cajas hitboxes de los coches circundantes y semáforos colindantes.

3. Lógica de Programación

El código requiere una intensa verificación de reglas matemáticas para simular el Control de Flujo real y el "Pathfinding" atascado en un raíl.

Detección Frontal de Autonómos ("Smart Braking")

let carAhead = false; for (let j = 0; j < this.cars.length; j++) { if (i === j) continue; let other = this.cars[j]; if (car.dir === other.dir) { if (car.dir === 'right' && other.x > car.x && other.x - car.x < 12) carAhead = true; // Evalúa proximidad en la misma dirección } }

Los coches detienen todo incremento en su speed (Seteando car.stopped = true) si se topan con el nodo del Semáforo en estado rojo o si topan con un gemelo idéntico a pocos píxeles de morro a retaguardia, apilándose ordenadamente y originando la dinámica.

El Control Binario

Un evento Click anclado al objeto tcIntersection simplemente muta e invierte una variable booleana unificada `horizontalGreen = !horizontalGreen`, repintando inmediatamente las variables en DOM y CSS y re-anudando las condicionales de frenado del bucle superior.

4. Sistema de Victoria/Derrota

Victory: Traffic Control sobrescribe el método tradicional handleTimeout() de base-game.js. Acabar (sobrevivir) al contador universal dictamina la victoria automática, puesto que se aguantó el flujo estipulado.

Defeat: Provocada súbitamente de dos formas:

  • 1. triggerCrash(): Comprobación colisional entre dos coches, sin importar qué bando chocó. Si se intersectan, explotan en CSS y fracasas al intante.
  • 2. triggerTrafficJam(): Analizador continuo que verifica si se acumularon >3 coches en la cola de frenado de la misma dirección. Penaliza demorar el clic excesivamente. Ambos llaman a this.finish(false).