Skip to content

Willicami22/DeadWave2D-Back

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DeadWave - Backend

Descripción

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.

Características Principales

  • 🎮 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

Stack Tecnológico

Backend

  • 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

Base de Datos

  • MongoDB: Base de datos NoSQL para persistencia

Testing

  • JUnit 5: Framework de pruebas
  • Spring Boot Test: Pruebas de integración

Estructura del Proyecto

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

Requisitos Previos

  • Java JDK 17 o superior
  • Maven 3.8+
  • MongoDB 4.4+
  • Conexión a internet para descargar dependencias

Configuración

1. Clonar el Repositorio

git clone <url-del-repositorio>
cd DeadWave

2. Configurar MongoDB

El 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=Cluster0

Nota de Seguridad: En producción, estas credenciales deben moverse a variables de entorno.

3. Instalar Dependencias

./mvnw clean install

O en Windows:

mvnw.cmd clean install

Ejecución

Modo Desarrollo

./mvnw spring-boot:run

O en Windows:

mvnw.cmd spring-boot:run

La aplicación estará disponible en http://localhost:8080

Compilar JAR

./mvnw clean package
java -jar target/DeadWave-0.0.1-SNAPSHOT.jar

WebSocket

El servidor expone un endpoint WebSocket en:

ws://localhost:8080/ws/game

Conexión al WebSocket

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

API REST (Planificada)

Las siguientes rutas estarán disponibles:

  • Game Sessions

    • POST /api/game-sessions - Crear nueva sesión
    • GET /api/game-sessions - Listar sesiones públicas
    • GET /api/game-sessions/{id} - Obtener sesión específica
    • PUT /api/game-sessions/{id} - Actualizar sesión
    • DELETE /api/game-sessions/{id} - Eliminar sesión
  • Lobbies

    • GET /api/lobbies - Listar lobbies disponibles
    • GET /api/lobbies/{name} - Obtener lobby específico
  • Maps

    • GET /api/maps - Listar mapas disponibles
    • GET /api/maps/{name} - Obtener mapa específico

Testing

Ejecutar pruebas:

./mvnw test

Ejecutar con cobertura:

./mvnw test jacoco:report

Los reportes de cobertura se generarán en target/site/jacoco/index.html

Modelos de Datos

GameSession

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

Player

Representa a un jugador:

  • Nombre y posición
  • Vida y salud máxima
  • Puntuación
  • Arma equipada
  • Dirección y velocidad

Zombie

Clase abstracta con tres tipos:

  • NormalZombie: Velocidad y daño estándar
  • SpeedZombie: Mayor velocidad
  • StrongZombie: Mayor vida y daño

Map

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

Despliegue

Azure (Configurado)

El proyecto incluye un workflow de GitHub Actions para despliegue automático en Azure:

.github/workflows/main_deadwave-produccion.yml

Pasos del pipeline:

  1. Checkout del código
  2. Configuración de Java 17
  3. Compilación con Maven
  4. Subida de artefactos
  5. Despliegue en Azure Web App

Variables de Entorno para Producción

SPRING_DATA_MONGODB_URI=<tu-uri-de-mongodb>
SERVER_PORT=8080

Contribución

Sprint 1 - Implementado

De acuerdo con ZOMBIE_WAVE_SPRINT_1.docx, las siguientes historias de usuario están en desarrollo:

  1. ✅ Modo Multiplayer Online
  2. ✅ Visualizar y unirse a servidor público
  3. ✅ Movimiento en 4 direcciones con colisiones
  4. ✅ Sistema de disparo
  5. ✅ Sistema de daño a zombies
  6. ✅ Sistema de vida del jugador
  7. ✅ Navegación al menú principal
  8. ✅ Reinicio rápido de partidas
  9. ✅ Sala de espera interactiva
  10. ✅ Menú principal
  11. ✅ Visualización del mapa
  12. ✅ Visualización de jugadores
  13. ✅ Aparición progresiva de zombies
  14. ✅ Condición de victoria
  15. ✅ Condición de derrota
  16. ✅ Inicio de partida

Flujo de Trabajo

  1. Fork del repositorio
  2. Crear rama feature: git checkout -b feature/nueva-funcionalidad
  3. Commit de cambios: git commit -am 'Añadir nueva funcionalidad'
  4. Push a la rama: git push origin feature/nueva-funcionalidad
  5. Crear Pull Request

Convenciones de Código

  • Usar Lombok para reducir boilerplate
  • Seguir convenciones de nombres de Java
  • Documentar métodos públicos con JavaDoc
  • Escribir tests para nueva funcionalidad

Licencia

Este proyecto es parte del curso de Arquitecturas de Software (ARSW) de la Escuela Colombiana de Ingeniería Julio Garavito.

Equipo de Desarrollo

  • Integrantes del grupo (por definir en la Wiki de Azure DevOps)

Contacto y Soporte

Para preguntas, sugerencias o reportar problemas:

  • Crear un issue en el repositorio
  • Consultar la Wiki del proyecto en Azure DevOps

Recursos Adicionales


Última actualización: Noviembre 2025
Versión: 0.0.1-SNAPSHOT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages