PEC1. Escapa de la Escuela de Insultos

Pública

PEC1. Escapa de la Escuela de Insultos

Repositorio: https://gitlab.com/Ninquiet/ninquietuoc-2d-pec1

Portada

Tabla de Contenidos

Video del juego

Juego En WebGl

Para jugar, visita el siguiente enlace: Juega «Escapa de la Escuela de Insultos» aquí

Resumen

Este es un juego que toma como base las batallas de insultos en Monkey Island, donde el contrincante te insultará, tu tomarás una alternativa y según esto responderás bien o no a su ataque y será tu turno de atacarlo a el.

Mecanicas

El juego combina el movimiento por los escenarios con elecciónes, con las batallas de insultos, de esta manera en cada escenario hay algo que encontrar o algún enemigo que vencer para poder continuar.

Movimiento por los escenarios

Escenario

Los escenarios son un papel fundamental en el juego, para moverte atraves de ellos solo debes oprimir el botón de tu escenario objetivo, estos son tu medio para moverte a lo largo del juego, en algunos encontrarás por ejemplo una llave, en muchos otros encontraras diversos enemigos que solo se encuentran en estos lugares, debes sortear los diferentes escenarios para poder llegar a la puerta con la llave y escapar.

Batallas de Insultos

BatallaDeInsultos

En las batallas de insultos el enemigo iniciará el ataque, eligiendo de forma aleatoria un insulto, y el jugador deberá elegir la respuesta correcta entre tres posibilidades, si el jugador elige correctamente el ataque enemigo no tendrá efecto, sin embargo, si se equivoca, el ataque enemigo dañará al jugador.

Luego de esto, será el turno del jugador para insultar a su enemigo, entonces, el jugador elegirá un insulto de las posibilidades mostradas (elegidas de forma aleatoria de la lista de insultos), y el enemigo deberá tratar de responder el insulto con la respuesta correcta.

Estructura Logica del Codigo

Forma en que escribí el codigo:

El codigo está escrito con la intención de implementar el Self Comment Code (trato de seguir los lineamientos del libro Clean Code), tambien he escrito el codigo en inglés (a excepción de las partes relacionadas a algo que se vaya a mostrar al usuario, cómo dialogos o textos) esto debido a que es una convención estandar internacional hacerlo así (espero no haya problema).

Inicialmente cree el codigo para funcionar con el sistema de Task de C#, pero al finalizar el juego y exportarlo a WebGl, descubrí que WebGl no trabaja muy bien (por no decir que para nada) con los Delay temporales, por lo tanto me vi obligado a buscar alternativas, así que, uso ampliamente DoTween (librería gratuita) y UniTask (librería gratuita tambien)

Librerias externas:

DoTween

He usado DoTween principalmente para gestionar animaciones simples, no soy muy fan de usar Animator para cosas simples, más que todo por su gran consumo en performance.

UniTask

Unitask es similar al sistema de Task de c#, pero optimizado para funcionar con Unity, así que gracias a el pude solucionar los problemas con Delay en web sin necesidad de cambiar todo el proyecto.

Estructura

EstructuraDelCodigo

Tomé como base el juego de aventuras, pues quería crear un juego en que no fuera solo una batalla sino una pequeña aventura, sin embargo lo modifiqué bastante (tal vez ahora sea un paralelo muy lejano), esta estructura de modo Historia se nutre en tiempo real del documento Story ubicado al interior de la carpeta Resources

Nucleo Base:

Este nucleo estaría compuesto por los Scripts generales y de control, (Los que se pueden encontar en «/Scripts»), su principal exponente es GameplayManager, no es un script muy largo, pero su funcion es iniciar el juego y hacer de puente entre los distintos eventos que suceden, así conecta el modo historia con las batallas de insultos, y viceversa.

Nucleo Story:

StoryJson

El nucleo Story se compone por todos los Scripts al interior de «/Scripts/Story», el manejador principal es StoryGameplayManager, este se encarga de gestionar la historia y su loop. Cuando se inicializa, hace uso de StoryManager para traducir la información del Json Story a nodos, luego de esto inicia el texto y las opciones, para mostrar el texto usa StoryUIManager que es el encargado de todo los UI correspondiente a Story, para interconectar todo hago uso de un sistema de Acciones a modo de evento.

Cuando el modulo Story se encuentra que en el escenario en el que se encuentra el jugador hay un Enemigo, notifica a GameplayManager que hay un enemigo y que tipo de enemigo es, GameplayManager usa «UIManager» para activar la interfaz de batalla y notifica a «InsultsBattleManager» para que inicialize la batalla con el enemigo indicado.

Una vez que la batalla finaliza, GameplayManager notifica a StoryGameplayManager y este continua con el modo historia.

Nucleo InsultsBattle

InsultsJson

Este nucleo se encarga de gestionar todo lo relacionado con batallas, se le notifica que enemigo es el con el cual se batallará, y este se encarga de organizar todo lo relacionado a inciar el enemigo, y controlar la interfaz con ayuda de «StoryUIManager», si el jugador muere se notifica la derrota a GameplayManager y este activa la pantalla derrota, por el contrario, si el jugador gana, tambien se notifica a GameplayManager y este cierra el modo batalla y continua con el modo historia.

Los insultos son cargados del archivo TestingInsults en la carpeta /Resources, el encargado de deserializar estos archivos y convertirlo a los DTO y posteriormente a los formatos de clases finales es Insults Manager

Ilustraciones

Ilustracioens

Las ilustraciones las he hecho yo, no son muy bonitas pero fueron hechas con mucho amor <3

Publicaciones Similares

Deja una respuesta