DeadWave es un videojuego multijugador online de supervivencia contra hordas de zombies. Este repositorio contiene el backend desarrollado con Spring Boot, que gestiona toda la lógica del juego, comunicación en tiempo real mediante WebSockets, y persistencia de datos.
- 🎮 Modo Multijugador Online: Soporte para múltiples jugadores en tiempo real
- 🧟 Sistema de Zombies: Aparición progresiva y gestión de diferentes tipos de zombies
- 🏃 Sistema de Movimiento: Movimiento en 4 direcciones con detección de colisiones
- 💥 Sistema de Combate: Disparos, daño y eliminación de zombies
- ❤️ Sistema de Vida: Gestión de salud de jugadores
- 🏆 Condiciones de Victoria/Derrota: Sistema de puntuación y supervivencia
- 🎯 Salas de Espera: Lobby interactivo antes de iniciar partidas
- 🗺️ Sistema de Mapas: Múltiples mapas con obstáculos y coordenadas
- Java 17
- Spring Boot 3.5.7
- Spring WebSocket: Comunicación en tiempo real
- Maven: Gestión de dependencias
- Lombok: Reducción de código boilerplate
- MapStruct 1.5.5: Mapeo entre DTOs y entidades
- MongoDB: Base de datos NoSQL para persistencia
- JUnit 5: Framework de pruebas
- Spring Boot Test: Pruebas de integración
src/main/java/edu/eci/arsw/DeadWave/
├── Game/
│ ├── Config/
│ │ ├── GameSocketHandler.java # Manejador de WebSocket
│ │ └── WebSocketConfig.java # Configuración de WebSocket
│ ├── Controllers/
│ │ ├── GameLogicController.java
│ │ ├── GameSessionController.java
│ │ ├── LobbyController.java
│ │ └── WebSocketController.java
│ ├── DTO/
│ │ ├── GameSessionDTO.java
│ │ ├── LobbyDTO.java
│ │ ├── MapDTO.java
│ │ ├── PlayerDTO.java
│ │ └── ZombieDTO.java
│ ├── Mappers/
│ │ ├── GameSessionMapper.java
│ │ ├── LobbyMapper.java
│ │ ├── MapMapper.java
│ │ ├── PlayerMapper.java
│ │ └── ZombieMapper.java
│ ├── Model/
│ │ ├── Bullet.java
│ │ ├── Coordinate.java
│ │ ├── Direction.java # Enum de direcciones
│ │ ├── GameSession.java
│ │ ├── GameStatus.java # Enum de estados del juego
│ │ ├── Gun.java
│ │ ├── Lobby.java
│ │ ├── Map.java
│ │ ├── NormalZombie.java
│ │ ├── Obstacle.java
│ │ ├── Player.java
│ │ ├── SpeedZombie.java
│ │ ├── StrongZombie.java
│ │ ├── Weapon.java
│ │ └── Zombie.java
│ ├── Repository/
│ │ ├── GameSessionRepository.java
│ │ ├── LobbyRepository.java
│ │ └── MapRepository.java
│ └── Services/
│ ├── impl/
│ │ ├── CombatServiceImpl.java
│ │ ├── GameLogicServiceImpl.java
│ │ ├── GameSessionServiceImpl.java
│ │ ├── LobbyServiceImpl.java
│ │ ├── MapServiceImpl.java
│ │ ├── MovementServiceImpl.java
│ │ ├── PlayerServiceImpl.java
│ │ ├── WebSocketServiceImpl.java
│ │ └── ZombieServiceImpl.java
│ ├── CombatService.java
│ ├── GameLogicService.java
│ ├── GameSessionService.java
│ ├── LobbyService.java
│ ├── MapService.java
│ ├── MovementService.java
│ ├── PlayerService.java
│ ├── WebSocketService.java
│ └── ZombieService.java
└── DeadWaveApplication.java
- Java JDK 17 o superior
- Maven 3.8+
- MongoDB 4.4+
- Conexión a internet para descargar dependencias
git clone <url-del-repositorio>
cd DeadWaveEl proyecto está configurado para conectarse a MongoDB Atlas. La URI de conexión se encuentra en application.properties:
spring.data.mongodb.uri=mongodb+srv://willicami:cvds2025-1@cluster0.d9rbz.mongodb.net/DeadWave?appName=Cluster0Nota de Seguridad: En producción, estas credenciales deben moverse a variables de entorno.
./mvnw clean installO en Windows:
mvnw.cmd clean install./mvnw spring-boot:runO en Windows:
mvnw.cmd spring-boot:runLa aplicación estará disponible en http://localhost:8080
./mvnw clean package
java -jar target/DeadWave-0.0.1-SNAPSHOT.jarEl servidor expone un endpoint WebSocket en:
ws://localhost:8080/ws/game
Los clientes deben conectarse a este endpoint para interactuar en tiempo real. El handler procesa los siguientes eventos:
- Conexión de jugador
- Envío de mensajes de juego
- Desconexión de jugador
- Broadcast de eventos a todos los jugadores conectados
Las siguientes rutas estarán disponibles:
-
Game Sessions
POST /api/game-sessions- Crear nueva sesiónGET /api/game-sessions- Listar sesiones públicasGET /api/game-sessions/{id}- Obtener sesión específicaPUT /api/game-sessions/{id}- Actualizar sesiónDELETE /api/game-sessions/{id}- Eliminar sesión
-
Lobbies
GET /api/lobbies- Listar lobbies disponiblesGET /api/lobbies/{name}- Obtener lobby específico
-
Maps
GET /api/maps- Listar mapas disponiblesGET /api/maps/{name}- Obtener mapa específico
Ejecutar pruebas:
./mvnw testEjecutar con cobertura:
./mvnw test jacoco:reportLos reportes de cobertura se generarán en target/site/jacoco/index.html
Representa una sesión de juego activa:
- Lista de jugadores
- Lista de zombies
- Estado del juego (LOBBY, PLAYING, FINISHED)
- Configuración de tiempo y rondas
- Mapa asociado
Representa a un jugador:
- Nombre y posición
- Vida y salud máxima
- Puntuación
- Arma equipada
- Dirección y velocidad
Clase abstracta con tres tipos:
- NormalZombie: Velocidad y daño estándar
- SpeedZombie: Mayor velocidad
- StrongZombie: Mayor vida y daño
Define la estructura del mapa de juego:
- Dimensiones (altura y anchura)
- Matriz de estructura
- Puntos de spawn de jugadores
- Puntos de spawn de zombies
- Obstáculos
El proyecto incluye un workflow de GitHub Actions para despliegue automático en Azure:
.github/workflows/main_deadwave-produccion.yml
Pasos del pipeline:
- Checkout del código
- Configuración de Java 17
- Compilación con Maven
- Subida de artefactos
- Despliegue en Azure Web App
SPRING_DATA_MONGODB_URI=<tu-uri-de-mongodb>
SERVER_PORT=8080De acuerdo con ZOMBIE_WAVE_SPRINT_1.docx, las siguientes historias de usuario están en desarrollo:
- ✅ Modo Multiplayer Online
- ✅ Visualizar y unirse a servidor público
- ✅ Movimiento en 4 direcciones con colisiones
- ✅ Sistema de disparo
- ✅ Sistema de daño a zombies
- ✅ Sistema de vida del jugador
- ✅ Navegación al menú principal
- ✅ Reinicio rápido de partidas
- ✅ Sala de espera interactiva
- ✅ Menú principal
- ✅ Visualización del mapa
- ✅ Visualización de jugadores
- ✅ Aparición progresiva de zombies
- ✅ Condición de victoria
- ✅ Condición de derrota
- ✅ Inicio de partida
- Fork del repositorio
- Crear rama feature:
git checkout -b feature/nueva-funcionalidad - Commit de cambios:
git commit -am 'Añadir nueva funcionalidad' - Push a la rama:
git push origin feature/nueva-funcionalidad - Crear Pull Request
- Usar Lombok para reducir boilerplate
- Seguir convenciones de nombres de Java
- Documentar métodos públicos con JavaDoc
- Escribir tests para nueva funcionalidad
Este proyecto es parte del curso de Arquitecturas de Software (ARSW) de la Escuela Colombiana de Ingeniería Julio Garavito.
- Integrantes del grupo (por definir en la Wiki de Azure DevOps)
Para preguntas, sugerencias o reportar problemas:
- Crear un issue en el repositorio
- Consultar la Wiki del proyecto en Azure DevOps
- Documentación de Spring Boot
- Documentación de MongoDB
- WebSocket con Spring
- MapStruct Documentation
- Project Requirements
- Business Case
Última actualización: Noviembre 2025
Versión: 0.0.1-SNAPSHOT