Este es un proyecto base para la asignatura de Arquitectura del Software en 2024/2025. Yovi es una aplicación centrada en el juego de conexión Y, permitiendo a los usuarios disfrutar de partidas interactivas tanto contra la inteligencia artificial como contra otros jugadores.
Wiki: https://github.com/Arquisoft/yovi_es3a/wiki
Docs: https://arquisoft.github.io/yovi_es3a/
Aplicación: http://158.179.212.71
| 👤Colaborador | 🌐Cuenta Git | 📧Email de contacto |
|---|---|---|
| Andrés Zhou Blanco Rodríguez | AndresZbr | UO300351@uniovi.es |
| Ben James Coleman Kheyyali | uo284238 | UO284238@uniovi.es |
| Carlos Cabrera Moral | uo288595 | UO288595@uniovi.es |
| Carmen Méndez Camino | Carmenmndzcmno | UO295526@uniovi.es |
| Emilio García Fernández | pispidu | UO287892@uniovi.es |
La funcionalidad central de YOVI es permitir a los usuarios jugar al juego de conexión Y sobre un tablero triangular. El objetivo es conectar los tres lados del triángulo con una cadena continua de piezas. La aplicación gestiona el estado del juego, valida los movimientos y determina el ganador siguiendo las reglas clásicas del juego.
- Sistema de Autenticación: Registro e inicio de sesión de usuarios para mantener un perfil personalizado.
- Estadísticas e Historial: Consulta de récords personales, partidas ganadas/perdidas e historial detallado de movimientos.
- Diferentes Niveles de Bots: Posibilidad de enfrentarse a distintos bots con variadas estrategias y niveles de dificultad.
- API Abierta: Acceso programático para consultar datos de usuarios y juegos, permitiendo incluso la integración de bots externos.
- Arquitectura Políglota: Combinación de la potencia de Rust para la lógica de juego y TypeScript para una experiencia web moderna y fluida.
El proyecto está dividido en tres componentes principales, cada uno en su propio directorio:
webapp/: Una aplicación frontend construida con React, Vite y TypeScript.users/: Un servicio backend para gestionar usuarios, construido con Node.js y Express.gamey/: Un motor de juego y servicio de bots en Rust.docs/: Fuentes de documentación de arquitectura siguiendo la plantilla Arc42.
Cada componente tiene su propio archivo package.json con los scripts necesarios para ejecutar y probar la aplicación.
- Registro de Usuarios: La aplicación web proporciona un formulario sencillo para registrar nuevos usuarios.
- Servicio de Usuarios: El servicio de usuarios recibe la solicitud de registro, simula cierto procesamiento y devuelve un mensaje de bienvenida.
- GameY: Un motor de juego básico que solo elige una pieza aleatoria.
La webapp es una aplicación de página única (SPA) creada con Vite y React.
src/App.tsx: El componente principal de la aplicación.src/RegisterForm.tsx: El componente que renderiza el formulario de registro de usuarios.package.json: Contiene scripts para ejecutar, construir y probar la webapp.vite.config.ts: Archivo de configuración para Vite.Dockerfile: Define la imagen Docker para la webapp.
El servicio users es una API REST sencilla construida con Node.js y Express.
users-service.js: El archivo principal para el servicio de usuarios. Define un endpoint/createuserpara manejar la creación de usuarios.package.json: Contiene scripts para iniciar el servicio.Dockerfile: Define la imagen Docker para el servicio de usuarios.
El componente gamey es un motor de juego basado en Rust con soporte para bots, construido con Rust y Cargo.
src/main.rs: Punto de entrada para la aplicación.src/lib.rs: Exportaciones de la librería para el motor gamey.src/bot/: Implementación y registro de bots.src/core/: Lógica central del juego, incluyendo acciones, coordenadas, estado del juego y gestión de jugadores.src/notation/: Soporte para notación de juego (YEN, YGN).src/web/: Componentes de la interfaz web.Cargo.toml: Manifiesto del proyecto con dependencias y metadatos.Dockerfile: Define la imagen Docker para el servicio gamey.
Puedes ejecutar este proyecto usando Docker (recomendado) o localmente sin Docker.
Esta es la forma más fácil de poner en marcha el proyecto. Necesitas tener instalados Docker y Docker Compose.
- Construir y ejecutar los contenedores: Desde el directorio raíz del proyecto, ejecuta:
docker-compose up --buildEste comando construirá las imágenes Docker tanto para la webapp como para el servicio de users y los iniciará.
- Acceder a la aplicación:
- Aplicación web: http://localhost
- API del servicio de usuarios: http://localhost:3000
- API de Gamey: http://localhost:4000
Para ejecutar el proyecto localmente sin Docker, necesitarás ejecutar cada componente en una terminal separada.
- Node.js y npm instalados.
Navega al directorio users:
cd usersInstala las dependencias:
npm installEjecuta el servicio:
npm startEl servicio de usuarios estará disponible en http://localhost:3000.
Navega al directorio webapp:
cd webappInstala las dependencias:
npm installEjecuta la aplicación:
npm run devLa aplicación web estará disponible en http://localhost:5173.
En este momento la aplicación GameY no es necesaria, pero una vez que lo sea, también deberías iniciarla desde la línea de comandos.
Cada componente tiene su propio conjunto de scripts definidos en su package.json. Aquí están algunos de los más importantes:
npm run dev: Inicia el servidor de desarrollo para la webapp.npm test: Ejecuta las pruebas unitarias.npm run test:e2e: Ejecuta las pruebas de extremo a extremo (e2e).npm run start:all: Un script de conveniencia para iniciar tanto lawebappcomo el serviciouserssimultáneamente.
npm start: Inicia el servicio de usuarios.npm test: Ejecuta las pruebas para el servicio.
cargo build: Construye la aplicación gamey.cargo test: Ejecuta las pruebas unitarias.cargo run: Ejecuta la aplicación gamey.cargo doc: Genera la documentación para la aplicación del motor GameY