Videojuego web multijugador retro-arcade inspirado en Bomberman, desarrollado con Laravel 13, Laravel Reverb (WebSockets), Laravel Echo, HTML5 Canvas y Tailwind CSS.
Incluye un Panel de Monitoreo Educativo de WebSockets en tiempo real diseñado para docentes, donde se visualiza el tráfico de eventos, marcas de tiempo, origen/destino lógico y estado de cada partida sin alterar el rendimiento del juego.
- PHP 8.2 o superior (probado y optimizado en PHP 8.3 / 8.4) con extensiones
pdo_sqlite(opdo_mysql),curl,mbstring,openssl,gd. - Composer 2.x.
- Node.js 18+ y npm.
- Laravel Reverb (servidor WebSocket oficial de Laravel).
-
Clonar e instalar dependencias backend:
composer install
-
Copiar variables de entorno y generar clave:
cp .env.example .env php artisan key:generate
-
Ejecutar migraciones de base de datos:
php artisan migrate
-
Instalar y compilar dependencias frontend (Vite & Tailwind CSS):
npm install npm run build
Asegúrate de contar con los siguientes parámetros en tu archivo .env:
APP_NAME="Bomber Arena"
APP_ENV=local
APP_DEBUG=true
APP_URL=http://127.0.0.1:8000
# Base de datos
DB_CONNECTION=sqlite
# Cola inmediata para broadcasting sin delay
QUEUE_CONNECTION=sync
# Configuración de Laravel Reverb (WebSockets)
BROADCAST_CONNECTION=reverb
REVERB_APP_ID=466440
REVERB_APP_KEY=lm7sk26ardtla9bwwuzd
REVERB_APP_SECRET=kep9l4bortajayuzvlcl
REVERB_HOST="127.0.0.1"
REVERB_PORT=8080
REVERB_SCHEME=http
# Parámetros expuestos al cliente Vite / Laravel Echo
VITE_REVERB_APP_KEY="${REVERB_APP_KEY}"
VITE_REVERB_HOST="${REVERB_HOST}"
VITE_REVERB_PORT="${REVERB_PORT}"
VITE_REVERB_SCHEME="${REVERB_SCHEME}"Para levantar el entorno completo se requieren dos servicios en terminales separadas:
php artisan serve --host=127.0.0.1 --port=8000Acceso web: http://127.0.0.1:8000
php artisan reverb:start --debugEscuchando en: ws://127.0.0.1:8080
(Opcional: Si vas a modificar CSS o JS en vivo, podés ejecutar npm run dev en una tercera terminal).
Para jugar con amigos o alumnos fuera de tu red local (a través de Internet en PCs, laptops o celulares con 4G):
-
Con los servidores de Laravel (
serve) y Reverb (reverb:start) corriendo, ejecutá:.\iniciar-tunel.bat(O manualmente:
node tunnel-gateway.cjsy en otra terminal.\cloudflared.exe tunnel --url http://127.0.0.1:8090) -
Cloudflare te generará una URL pública segura HTTPS gratuita (ej:
https://xxx.trycloudflare.com). -
Compartí ese enlace: los jugadores podrán conectarse directamente desde sus navegadores y teléfonos móviles con WebSockets SSL (
wss://) sin configuración adicional ni problemas de Mixed Content.
| Módulo | Ruta | Descripción |
|---|---|---|
| Lobby de Juego | http://127.0.0.1:8000/lobby |
Ingreso de apodo, creación de salas y unión mediante código de 6 caracteres. |
| Arena de Combate | http://127.0.0.1:8000/arena/{CODIGO} |
Tablero 13x11 interactivo en HTML5 Canvas con soporte para PC y móviles. |
| Panel Docente | http://127.0.0.1:8000/docente/monitoreo |
Telemetría WebSocket en vivo: paquetes, latencia, origen/destino y auditoría JSON. |
| Ejercicio Base | http://127.0.0.1:8000/receptor y /emisor |
Transmisión de texto y estilos CSS del ejercicio inicial del documento. |
El proyecto implementa una arquitectura modular con servidor autoritativo, donde el cliente envía comandos de intención y el servidor valida y emite el estado oficial:
┌────────────────────────────────────────────────────────┐
│ CLIENTE │
│ Lobby / HTML5 Canvas / Controles PC & Touch / Echo │
└────────────┬─────────────────────────────▲─────────────┘
│ Comandos HTTP │ Eventos WebSocket
│ (move, bomb, ready) │ (arena.{code})
▼ │
┌──────────────────────────────┐ │
│ BomberGameController │ │
└────────────┬─────────────────┘ │
▼ │
┌──────────────────────────────┐ │
│ RoomService │ │
│ - Gestión de ciclo de sala │ │
│ - Control de sesiones │ │
└────────────┬─────────────────┘ │
▼ │
┌──────────────────────────────┐ │
│ BomberGameEngine │ │
│ - Matriz 13x11 y spawn safe │ │
│ - Colisiones y bloqueos │ │
│ - Detonaciones en cruz │ │
│ - Reacciones en cadena │ │
│ - Power-ups y eliminaciones │ │
└────────────┬─────────────────┘ │
▼ │
┌──────────────────────────────┐ │
│ Laravel Reverb Server ├───────────┘
│ (Broadcaster en puerto 8080)│
└────────────┬─────────────────┘
│ Espejo de telemetría (instructor-monitor)
▼
┌──────────────────────────────┐
│ Panel Docente de Telemetría │
│ - Eventos, timestamps, ms │
│ - Inspector JSON de estado │
└──────────────────────────────┘
player_joined: Notifica cuando un nuevo jugador ingresa a la sala (hasta 4).player_ready: Estado de preparación de los jugadores.game_started: Inicia la partida con el snapshot inicial validado por el servidor.player_moved: Actualización incremental de coordenadas(x, y)y dirección.bomb_placed: Aparición de bomba con mecha de 2 segundos.bomb_exploded: Detonación en cruz, bloques rotos, power-ups generados y eliminaciones.game_over: Proclamación de ganador o empate con estadísticas de combate.
TelemetryEvent: Registra cada interacción en tiempo real con marca de tiempo precisa a milisegundos, latencia estimada, origen (Piloto X,Servidor), destino (arena.ABC123) y payload detallado para fines pedagógicos.
- Tablero: Cuadrícula de 13 columnas por 11 filas con bordes indestructibles, pilares fijos y bloques de energía rompibles.
- Spawns Protegidos: Las 4 esquinas disponen de 3 casillas despejadas para garantizar la seguridad inicial de los participantes.
- Bombas y Detonación:
- Cada jugador inicia con 1 bomba activa de alcance 2 casillas.
- Detona en cruz tras 2 segundos.
- Se detiene ante paredes fijas y destruye bloques destructibles.
- Reacción en cadena: Si el fuego alcanza otra bomba, ésta detona instantáneamente.
- Quien toque el fuego queda eliminado.
- Power-ups:
- ⚡ Velocidad: Mayor rapidez de desplazamiento.
- 💣 Bomba adicional: Incrementa la cantidad de bombas simultáneas.
- 🔥 Mayor alcance: Amplía la longitud de la explosión.
- Victoria: El último jugador en pie gana. Si expira el tiempo o mueren todos simultáneamente, se declara empate.
El proyecto incluye pruebas automatizadas para validar el motor y la lógica de salas:
php artisan testCobertura de pruebas:
- Generación de tablero y zonas seguras (
BomberGameEngineTest). - Movimiento y colisión contra paredes (
BomberGameEngineTest). - Límite de bombas por jugador (
BomberGameEngineTest). - Detonación, eliminación y condiciones de victoria (
BomberGameEngineTest). - Reacción en cadena de bombas adyacentes (
BomberGameEngineTest). - Creación de salas, código único y anfitrión (
RoomServiceTest). - Restricción de capacidad máxima de 4 jugadores (
RoomServiceTest). - Regla de mínimo 2 jugadores para iniciar partida (
RoomServiceTest).