{"id":1442,"date":"2024-11-05T20:56:13","date_gmt":"2024-11-05T20:56:13","guid":{"rendered":"https:\/\/ninquiet.com\/?p=1442"},"modified":"2024-11-05T20:57:46","modified_gmt":"2024-11-05T20:57:46","slug":"game-escapa-de-la-escuela-de-insultos","status":"publish","type":"post","link":"https:\/\/ninquiet.com\/index.php\/2024\/11\/05\/game-escapa-de-la-escuela-de-insultos\/","title":{"rendered":"Game: Escapa de la Escuela de Insultos"},"content":{"rendered":"\n<p>Repositorio: https:\/\/gitlab.com\/Ninquiet\/ninquietuoc-2d-pec1<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gitlab.com\/Ninquiet\/ninquietuoc-2d-pec1\/-\/wikis\/uploads\/f144651d6fb527a2fadd7efccd2ca767\/image.png\" alt=\"Portada\"\/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"tabla-de-contenidos\">Tabla de Contenidos<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#juego-en-webgl\">Juego En WebGl<\/a><\/li>\n\n\n\n<li><a href=\"#resumen\">Resumen<\/a><\/li>\n\n\n\n<li><a href=\"#mecanicas\">Mec\u00e1nicas<\/a>\n<ul class=\"wp-block-list\">\n<li><a href=\"#movimiento-por-los-escenarios\">Movimiento por los escenarios<\/a><\/li>\n\n\n\n<li><a href=\"#batallas-de-insultos\">Batallas de Insultos<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"#estructura-logica-del-codigo\">Estructura L\u00f3gica del C\u00f3digo<\/a>\n<ul class=\"wp-block-list\">\n<li><a href=\"#forma-en-que-escrib\u00ed-el-codigo\">Forma en que escrib\u00ed el c\u00f3digo<\/a><\/li>\n\n\n\n<li><a href=\"#librer\u00edas-externas\">Librer\u00edas externas<\/a><\/li>\n\n\n\n<li><a href=\"#estructura\">Estructura<\/a><\/li>\n\n\n\n<li><a href=\"#n\u00facleo-base\">N\u00facleo Base<\/a><\/li>\n\n\n\n<li><a href=\"#n\u00facleo-story\">N\u00facleo Story<\/a><\/li>\n\n\n\n<li><a href=\"#n\u00facleo-insultsbattle\">N\u00facleo InsultsBattle<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"#ilustraciones\">Ilustraciones<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"video-del-juego\">Video del juego<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Demo de Juego : Escape de La Escuela de Insultos\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/vO3QHNyNFLE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"juego-en-webgl\">Juego En WebGl<\/h2>\n\n\n\n<p>Para jugar, visita el siguiente enlace: <a href=\"https:\/\/simmer.io\/@Ninquiet\/escapa-de-la-escuela-de-insultos\">Juega &#8220;Escapa de la Escuela de Insultos&#8221; aqu\u00ed<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"resumen\">Resumen<\/h2>\n\n\n\n<p>Este es un juego que toma como base las batallas de insultos en Monkey Island, donde el contrincante te insultar\u00e1, tu tomar\u00e1s una alternativa y seg\u00fan esto responder\u00e1s bien o no a su ataque y ser\u00e1 tu turno de atacarlo a el.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mecanicas\">Mecanicas<\/h2>\n\n\n\n<p>El juego combina el movimiento por los escenarios con elecci\u00f3nes, con las batallas de insultos, de esta manera en cada escenario hay algo que encontrar o alg\u00fan enemigo que vencer para poder continuar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"movimiento-por-los-escenarios\">Movimiento por los escenarios<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gitlab.com\/Ninquiet\/ninquietuoc-2d-pec1\/-\/wikis\/uploads\/86f96f9146028758f01fd17c6127a9fe\/image.png\" alt=\"Escenario\"\/><\/figure>\n\n\n\n<p>Los escenarios son un papel fundamental en el juego, para moverte atraves de ellos solo debes oprimir el bot\u00f3n de tu escenario objetivo, estos son tu medio para moverte a lo largo del juego, en algunos encontrar\u00e1s 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.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"batallas-de-insultos\">Batallas de Insultos<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gitlab.com\/Ninquiet\/ninquietuoc-2d-pec1\/-\/wikis\/uploads\/466a8c3f17169540c6bf518d8440a9a5\/image.png\" alt=\"BatallaDeInsultos\"\/><\/figure>\n\n\n\n<p>En las batallas de insultos el enemigo iniciar\u00e1 el ataque, eligiendo de forma aleatoria un insulto, y el jugador deber\u00e1 elegir la respuesta correcta entre tres posibilidades, si el jugador elige correctamente el ataque enemigo no tendr\u00e1 efecto, sin embargo, si se equivoca, el ataque enemigo da\u00f1ar\u00e1 al jugador.<\/p>\n\n\n\n<p>Luego de esto, ser\u00e1 el turno del jugador para insultar a su enemigo, entonces, el jugador elegir\u00e1 un insulto de las posibilidades mostradas (elegidas de forma aleatoria de la lista de insultos), y el enemigo deber\u00e1 tratar de responder el insulto con la respuesta correcta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"estructura-logica-del-codigo\">Estructura Logica del Codigo<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"forma-en-que-escrib-el-codigo-\">Forma en que escrib\u00ed el codigo:<\/h3>\n\n\n\n<p>El codigo est\u00e1 escrito con la intenci\u00f3n de implementar el Self Comment Code (trato de seguir los lineamientos del libro Clean Code), tambien he escrito el codigo en ingl\u00e9s (a excepci\u00f3n de las partes relacionadas a algo que se vaya a mostrar al usuario, c\u00f3mo dialogos o textos) esto debido a que es una convenci\u00f3n estandar internacional hacerlo as\u00ed (espero no haya problema).<\/p>\n\n\n\n<p>Inicialmente cree el codigo para funcionar con el sistema de Task de C#, pero al finalizar el juego y exportarlo a WebGl, descubr\u00ed 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\u00ed que, uso ampliamente DoTween (librer\u00eda gratuita) y UniTask (librer\u00eda gratuita tambien)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"librerias-externas-\">Librerias externas:<\/h3>\n\n\n\n<p><a href=\"https:\/\/dotween.demigiant.com\"><strong>DoTween<\/strong><\/a><\/p>\n\n\n\n<p>He usado DoTween principalmente para gestionar animaciones simples, no soy muy fan de usar Animator para cosas simples, m\u00e1s que todo por su gran consumo en performance.<\/p>\n\n\n\n<p><a href=\"https:\/\/dotween.demigiant.com\"><strong>UniTask<\/strong><\/a><\/p>\n\n\n\n<p>Unitask es similar al sistema de Task de c#, pero optimizado para funcionar con Unity, as\u00ed que gracias a el pude solucionar los problemas con Delay en web sin necesidad de cambiar todo el proyecto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"estructura\">Estructura<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gitlab.com\/Ninquiet\/ninquietuoc-2d-pec1\/-\/wikis\/uploads\/e3a496f429e45468c449f07d6e798fb9\/Diagrama_Pec_1_2d.jpg\" alt=\"EstructuraDelCodigo\"\/><\/figure>\n\n\n\n<p>Tom\u00e9 como base el juego de aventuras, pues quer\u00eda crear un juego en que no fuera solo una batalla sino una peque\u00f1a aventura, sin embargo lo modifiqu\u00e9 bastante (tal vez ahora sea un paralelo muy lejano), esta estructura de modo Historia se nutre en tiempo real del documento <strong>Story<\/strong> ubicado al interior de la carpeta <strong>Resources<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"nucleo-base-\">Nucleo Base:<\/h3>\n\n\n\n<p>Este nucleo estar\u00eda compuesto por los Scripts generales y de control, (Los que se pueden encontar en &#8220;\/Scripts&#8221;), su principal exponente es <strong>GameplayManager<\/strong>, no es un script muy largo, pero su funcion es iniciar el juego y hacer de puente entre los distintos eventos que suceden, as\u00ed conecta el modo historia con las batallas de insultos, y viceversa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"nucleo-story-\">Nucleo Story:<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gitlab.com\/Ninquiet\/ninquietuoc-2d-pec1\/-\/wikis\/uploads\/c787f32f46e7fab98b04bd10796d6562\/image.png\" alt=\"StoryJson\"\/><\/figure>\n\n\n\n<p>El nucleo Story se compone por todos los Scripts al interior de <strong>&#8220;\/Scripts\/Story&#8221;<\/strong>, el manejador principal es <strong>StoryGameplayManager<\/strong>, este se encarga de gestionar la historia y su loop. Cuando se inicializa, hace uso de <strong>StoryManager<\/strong> para traducir la informaci\u00f3n del Json Story a nodos, luego de esto inicia el texto y las opciones, para mostrar el texto usa <strong>StoryUIManager<\/strong> 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.<\/p>\n\n\n\n<p>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 &#8220;UIManager&#8221; para activar la interfaz de batalla y notifica a &#8220;InsultsBattleManager&#8221; para que inicialize la batalla con el enemigo indicado.<\/p>\n\n\n\n<p>Una vez que la batalla finaliza, GameplayManager notifica a StoryGameplayManager y este continua con el modo historia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"nucleo-insultsbattle\">Nucleo InsultsBattle<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gitlab.com\/Ninquiet\/ninquietuoc-2d-pec1\/-\/wikis\/uploads\/d6d61e0736f5a670b998386c0c8b99b2\/image.png\" alt=\"InsultsJson\"\/><\/figure>\n\n\n\n<p>Este nucleo se encarga de gestionar todo lo relacionado con batallas, se le notifica que enemigo es el con el cual se batallar\u00e1, y este se encarga de organizar todo lo relacionado a inciar el enemigo, y controlar la interfaz con ayuda de &#8220;StoryUIManager&#8221;, 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.<\/p>\n\n\n\n<p>Los insultos son cargados del archivo <strong>TestingInsults<\/strong> en la carpeta \/Resources, el encargado de deserializar estos archivos y convertirlo a los DTO y posteriormente a los formatos de clases finales es <strong>Insults Manager<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ilustraciones\">Ilustraciones<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gitlab.com\/Ninquiet\/ninquietuoc-2d-pec1\/-\/wikis\/uploads\/fc246c1a9723443efad7354352fb2b75\/image.png\" alt=\"Ilustracioens\"\/><\/figure>\n\n\n\n<p>Las ilustraciones las he hecho yo, no son muy bonitas pero fueron hechas con mucho amor &lt;3<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Repositorio: https:\/\/gitlab.com\/Ninquiet\/ninquietuoc-2d-pec1 Tabla de Contenidos Video del juego Juego En WebGl Para jugar, visita el siguiente enlace: Juega &#8220;Escapa de la Escuela de Insultos&#8221; aqu\u00ed Resumen Este es un juego que toma como base las batallas de insultos en Monkey Island, donde el contrincante te insultar\u00e1, tu tomar\u00e1s una alternativa y seg\u00fan esto responder\u00e1s bien [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1444,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[],"class_list":["post-1442","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-develop"],"_links":{"self":[{"href":"https:\/\/ninquiet.com\/index.php\/wp-json\/wp\/v2\/posts\/1442"}],"collection":[{"href":"https:\/\/ninquiet.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ninquiet.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ninquiet.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ninquiet.com\/index.php\/wp-json\/wp\/v2\/comments?post=1442"}],"version-history":[{"count":1,"href":"https:\/\/ninquiet.com\/index.php\/wp-json\/wp\/v2\/posts\/1442\/revisions"}],"predecessor-version":[{"id":1445,"href":"https:\/\/ninquiet.com\/index.php\/wp-json\/wp\/v2\/posts\/1442\/revisions\/1445"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ninquiet.com\/index.php\/wp-json\/wp\/v2\/media\/1444"}],"wp:attachment":[{"href":"https:\/\/ninquiet.com\/index.php\/wp-json\/wp\/v2\/media?parent=1442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ninquiet.com\/index.php\/wp-json\/wp\/v2\/categories?post=1442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ninquiet.com\/index.php\/wp-json\/wp\/v2\/tags?post=1442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}