Skip to content

juancrrn/snakewatch

Repository files navigation

Snakewatch Server

Snakewatch es una aplicación web dedicada al videojuego de la serpiente o Snake en versión online y multijugador.

Concretamente, Snakewatch Server es es la aplicación web que sirve el front end y mantiene en ejecución un back end para gestionar peticiones.

El proyecto está desarrollado dentro de la asignatura de Ingeniería Web del Grado en Ingeniería Informática de la Universidad Complutense de Madrid, y utiliza tecnologías como Spring, Maven y Thymeleaf.

Índice de contenidos

Autores

  • Daniel Marín Irún
  • Juan Carrión Molina
  • Mohamed Ghanem
  • Óscar Caro Navarro
  • Óscar Molano Buitrago

Propuesta de proyecto

La serpiente

En resumen, la dinámica del juego consiste en que el jugador controla una criatura larga y delgada, similar a una serpiente, que se mueve sobre un plano delimitado recogiendo alimentos. El jugador debe evitar que la serpiente se golpee contra su propia cola o contra las paredes que delimitan el plano.

Se pueden obtener más detalles en la página de Wikipedia de la serpiente.

Catch

¿Viciado al Elden Ring o al God of war Ragnarök? Si eres más de clásicos, ¡estás de suerte! Con Snakewatch podrás jugar al mítico y legendario Snake con tus amigos. Gracias a su entorno multijugador, la partida se sincronizará para que luchéis por ver quién es el amo del mapa. ¡Sé el último en sobrevivir y álzate con la victoria!

Funcionalidad

Funcionalidad de gestión de acceso, usuarios y roles

Estado: ✅ funcionalidad implementada

☕ Clases Java relacionadas: User, SecurityConfig, LoginSuccessHandler, IwUserDetailsService
📄 Ficheros JavaScript relacionados: (...)

A partir de la base proporcionada para la asignatura, se ha construido la funcionalidad de gestión de acceso, usuarios y roles.

Roles de usuario

  • Usuario invitado o guest:
    • Solo podrá ver las páginas públicas.
    • Con respecto a la lógica de juego, solo podrá unirse a una sesión existente y no podrá alojar la suya propia. No tendrá acceso a ninguna de las características secundarias, como equipar skins o aparecer en los rankings. No se guardará su información.
  • Usuario registrado:
    • Poseerá un perfil propio persistente.
    • Con respecto a la lógica de juego, podrá crear una sesión, participar en las clasificaciones o rankings, personalizar pieles o skins, consultar historiales de partidas, reportar a usuarios y configurar su cuenta.
  • Usuario espectador:
    • Pueden observar el desarrollo de una partida, ya sean invitados o registrados.
  • Administrador:
    • Tienen la capacidad de gestionar la plataforma, ver reportes y, especialmente, de actuar ante reportes de usuarios.

📝 Pendiente (TODO): crear página de registro.

📝 Pendiente (TODO): mostrar mensajes de error en los formularios de inicio de sesión y registro.

Funcionalidad de amistad entre usuarios

Estado: ✅ funcionalidad implementada

☕ Clases Java relacionadas: (...)
📄 Ficheros JavaScript relacionados: (...)

Funcionalidad de clasificaciones o rankings

Estado: ✅ funcionalidad implementada

☕ Clases Java relacionadas: (...)
📄 Ficheros JavaScript relacionados: (...)

Funcionalidad de base de juego

Estado: ✅ funcionalidad implementada

☕ Clases Java relacionadas: (...)
📄 Ficheros JavaScript relacionados: (...)

Funcionalidad de multijugador en juego

Estado: 🚧 funcionalidad en proceso de implementación

☕ Clases Java relacionadas: (...)
📄 Ficheros JavaScript relacionados: (...)

Funcionalidad de salas o rooms de juego

Estado: 🚧 funcionalidad en proceso de implementación

☕ Clases Java relacionadas: (...)
📄 Ficheros JavaScript relacionados: (...)

📝 Pendiente (TODO): crear nuevas salas.

📝 Pendiente (TODO): permitir al administrador de la sala comenzar una nueva partida.

📝 Pendiente (TODO): implementar estado de "espera" para las salas, anterior al juego en sí.

📝 Pendiente (TODO): lógica de salas privadas.

Funcionalidad de reporte de usuarios

Estado: 📅 funcionalidad planificada

☕ Clases Java relacionadas: (...)
📄 Ficheros JavaScript relacionados: (...)

Funcionalidad de niveles de juego

Estado: 📅 funcionalidad planificada

☕ Clases Java relacionadas: (...)
📄 Ficheros JavaScript relacionados: (...)

📝 Pendiente (TODO): añadir muros al juego.

📝 Pendiente (TODO): cargar el nivel correspondiente desde la pestaña de niveles.

📝 Pendiente (TODO): crear niveles por defecto.

📝 Pendiente (TODO): permitir al admin subir nuevos niveles como ficheros JSON.

Funcionalidad de skins de juego

Estado: 📅 funcionalidad planificada

☕ Clases Java relacionadas: (...)
📄 Ficheros JavaScript relacionados: (...)

Vistas

⚠️ Sección pendiente de actualización

Lobby

La pantalla de lobby es la pantalla de inicio del juego, donde un usuario una vez se ha registrado en la aplicación web podrá seleccionar como desee jugar, si multijugador (play online) o un jugador solo (levels), así como observar otras partidas (spectate). También podrá acceder a su perfil, a los rankings o en caso de ser administrador a la pantalla de administrador.

Perfil de usuario

La pantalla de perfil incluirá el perfil del usuario con su respectivo nombre y foto de perfil, así como los amigos que tiene, el número total de partidas jugadas y ganadas y un historial con las partidas recientes.

Niveles

La pantalla de niveles es la pantalla de un solo jugador, en la que el usuario podrá seleccionar el nivel al que desee jugar, donde habrá distintas dificultades por nivel, al seleccionar el nivel tendrá que superar la dificultad que incluya dicho nivel.

Administrador

La pantalla de administrador únicamente será accesible para aquellos usuarios con el rol de administrador, en la cual se incluirá una lista de aquellos usuarios que han sido reportados donde el administrador podrá ver el motivo de su reporte y si banea o no a dicho usuario.

Juego

La pantalla de juego es la pantalla de multijugador donde varios jugadores podrán entrar a jugar simultáneamente, se enfrentarán entre ellos y ganará aquel que sea el último en quedar de pie.

Rankings

La pantalla de rankings mostrará un top con los 100 mejores jugadores del juego o lo que es lo mismo, los jugadores que hayan ganado más veces en el modo de juego multijugador. Se mostrará el nombre del usuario junto a las victorias conseguidas y la posición que ocupa en el top.

Documentación del proyecto

Clases de Java de Spring Boot

Diagrama pseudo-UML de clases de Spring Boot

Diagrama pseudo-UML de clases de Java de Spring Boot

Este diagrama muestra, de forma resumida y con un formato parecido a UML, la funcionalidad de las clases de configuración y arranque de Spring Boot utilizadas en el proyecto.

Clases de Java de modelos del dominio

Diagrama pseudo-UML de clases de Java del dominio

Diagrama pseudo-UML de clases de Java del dominio

Clases de Java de controladores y lógica

Diagrama pseudo-UML de clases de Java de controladores y lógica

Diagrama pseudo-UML de clases de Java de controladores y lógica

Se ha seguido la plantilla de la asignatura en cuanto a implementar la lógica de servicios dentro de los controladores.

Lógica de JavaScript en el cliente

Diagrama pseudo-UML de la lógica de JavaScript en el cliente

Diagrama pseudo-UML de la lógica de JavaScript en el cliente

Desarrollo

Dependencias del proyecto de Java

El proyecto de Java se basa en las siguientes dependencias:

Dependencias de la lógica de JavaScript en el cliente

La lógica de JavaScript en el cliente se basa en las siguientes dependencias:

Herramientas

Para el desarrollo en equipo, se ha utilizado Visual Studio Code como editor. Como sistema de control de versiones, se ha utilizado Git o, más concretamente, GitHub. De GitHub también se ha utilizado la herramienta de proyectos para realizar la planificación y la distribución de tareas.

Además, se han utilizado las siguientes extensiones de VS Code:

Referencias, cheat sheets y shortcuts

Maven y ejecución

Ejecutar tests del proyecto:

$ mvn test

Spring y componentes

Thymeleaf

Guías de Spring

Base de datos

H2 Console

Acceso a H2 Console desde http://localhost:8080/h2/.

Importación en el arranque

A través de un import.sql.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published