Skip to content

aleju03/distributed-snake-game

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Snake Game

Un juego clásico de Snake que implementa procesamiento distribuido, balanceo de carga dinámico y monitoreo en tiempo real.

Arquitectura del Sistema

📋 Para ver los diagramas detallados de arquitectura, consultar Arquitectura.md

El sistema está diseñado como microservicios distribuidos con balanceo de carga dinámico y monitoreo en tiempo real.

Características Principales

Gameplay

  • Multijugador en tiempo real (hasta 4 jugadores)
  • Oponentes con IA (opcional)
  • Sistema de puntuación
  • Modo espectador cuando muere
  • Controles con flechas o WASD

Técnicas

  • Arquitectura de Microservicios para separación de responsabilidades
  • Procesamiento Distribuido con Workers especializados para diferentes tareas
  • Comunicación en Tiempo Real con WebSocket para actualizaciones instantáneas
  • Balanceado de Carga Dinámico que distribuye tareas a workers según métricas
  • Dashboard con métricas del sistema

Requisitos Previos

  • Docker y Docker Compose
  • Python 3.11+
  • 4GB RAM recomendado

Instalación y Configuración

1. Clonar el Repositorio

2. Estructura del Proyecto

.
├── backend/
│   ├── game_coordinator/     # Servidor principal del juego
│   │   ├── app/
│   │   │   ├── main.py       # API y WebSocket endpoints
│   │   │   ├── game_logic.py # Lógica del juego
│   │   │   ├── game_state.py # Gestión de estados
│   │   │   └── ...
│   │   └── Dockerfile
│   ├── workers/              # Workers distribuidos
│   │   ├── worker.py         # Implementación de workers
│   │   └── Dockerfile
│   └── monitor/              # Sistema de monitoreo
│       ├── resource_monitor.py
│       └── Dockerfile
├── frontend/
│   ├── index.html            # Interfaz web
│   └── game.js               # Cliente JavaScript
└── docker-compose.yml        # Orquestación de servicios

3. Iniciar el Sistema

# Construir e iniciar todos los servicios
docker-compose up --build

# O en modo detached
docker-compose up -d --build

4. Verificar que los Servicios están Corriendo

docker-compose ps

Cómo Jugar

1. Acceder a la Interfaz

Abrir en el navegador: frontend/index.html directamente del explorador de archivos.

2. Crear o Unirse a un Juego

Opción A: Juego Individual

  1. En la pestaña "Setup", hacer clic en "Create Game"
  2. Opcionalmente, activar "Enable AI opponent" para jugar contra la IA
  3. El sistema te unirá automáticamente al juego
  4. Hacer clic en "Start Game" para comenzar

Opción B: Multijugador

  1. Jugador 1: Crear un juego y compartir el Game ID
  2. Otros jugadores: Ingresar el Game ID y hacer clic en "Join Game"
  3. El creador del juego hace clic en "Start Game" cuando todos estén listos

3. Controles

  • Flechas o WASD: Mover la serpiente
  • Espacio: Enviar ping (test de conexión)

4. Objetivo

  • Comer la comida para crecer y sumar puntos.
  • Evitar chocar con las paredes, la propia cola u otros jugadores.
  • El último jugador en vivo gana.

Configuración Avanzada

Variables de Entorno

Game Coordinator

REDIS_HOST=redis
REDIS_PORT=6379
GAME_TICK_RATE=100      # Velocidad del juego (ms)
MAX_PLAYERS_PER_GAME=4
GRID_SIZE=40x40

Workers

WORKER_TYPE=LOGIC       # Tipo: LOGIC, COLLISION, AI, FOOD
REDIS_HOST=redis
REDIS_PORT=6379

Escalado Manual de Workers

# Escalar workers de lógica a 3 instancias
docker-compose up -d --scale logic_worker=3

# Escalar workers de colisión a 2 instancias
docker-compose up -d --scale collision_worker=2

Monitoreo del Sistema

Dashboard de Monitoreo

  1. Cambiar a la pestaña "Monitoring Dashboard" en la interfaz
  2. Ver métricas en tiempo real:
    • Estado de workers por tipo
    • Uso de CPU y RAM
    • Profundidad de colas
    • Latencia promedio
    • Juegos activos y jugadores

API de Monitoreo

# Estado de workers
curl http://localhost:8000/api/monitor/workers

# Métricas del juego
curl http://localhost:8000/api/monitor/games

# Métricas de rendimiento
curl http://localhost:8000/api/monitor/performance

# Dashboard de monitoreo completo
curl http://localhost:8001/health

Endpoints de la API

Game Management

  • POST /api/games/create - Crear nuevo juego
  • POST /api/games/{game_id}/join - Unirse a un juego
  • POST /api/games/{game_id}/start - Iniciar juego
  • DELETE /api/games/{game_id}/leave - Abandonar juego
  • GET /api/games/list - Listar juegos activos
  • GET /api/games/{game_id}/state - Obtener estado del juego

Player Actions

  • POST /api/games/{game_id}/move - Enviar movimiento
  • PUT /api/games/{game_id}/players/{player_id}/color - Cambiar color

WebSocket

  • WS /ws/games/{game_id} - Conexión en tiempo real para actualizaciones del juego

Admin

  • POST /admin/reset - Reiniciar todo el sistema
  • POST /admin/reset/games - Reiniciar solo juegos
  • POST /admin/reset/queues - Limpiar colas de tareas

About

Proyecto 2 Curso de Sistemas Operativos: Juego con procesamiento de carga distribuido

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors