Download universidad central del ecuador facultad de ingeniería ciencias
Document related concepts
Transcript
UNIVERSIDAD CENTRAL DEL ECUADOR FACULTAD DE INGENIERÍA CIENCIAS FÍSICAS Y MATEMÁTICA CARRERA DE INGENIERÍA EN COMPUTACIÓN GRÁFICA INTELIGENCIA ARTIFICIAL DEL VIDEOJUEGO LA DAMA TRABAJO DE GRADUACIÓN PREVIO LA OBTENCIÓN DEL TÍTULO DE INGENIERO EN COMPUTACIÓN GRÁFICA AUTOR: WILMER PATRICIO PUJOS CASTRO TUTOR: Fis. GONZALO BAYARDO CAMPUZANO NIETO QUITO - 28 JUNIO 2016 DEDICATORIA Dedico este trabajo a mi madre Gardenia Castro, pues ella fue el principal cimiento para la construcción de mi vida profesional, sembró en mí los valores de la responsabilidad y deseos de superación, en ella tengo un espejo en el cual me quiero ver reflejado, sus virtudes son infinitas y el amor por sus hijos me llevan admirarla cada día más. ii AGRADECIMIENTOS En el presente proyecto integrador me gustaría primeramente agradecer a Dios, por bendecirme para llegar hasta donde he llegado, ya que hizo realidad este sueño anhelado. A la Universidad Central del Ecuador por darme la oportunidad de pertenecer a tan prestigiosa institución y ser un profesional. A mi tutor del proyecto de titulación Fis. Gonzalo Bayardo Campuzano Nieto, quien con su conocimiento, experiencia y paciencia ha logrado guiarme y así pueda terminar mis estudios con éxito. A mi familia Jaime Pujos, Gardenia Castro, Jenifer Pujos, Magaly Solís, Edgar Fuentes, Stalin Bonilla, Steven Tapia, Jorge Maldonado y David Sandoval, quienes fueron mi motor, mis pilares para que siempre siguiera adelante. Son muchas las personas que han formado parte de mi vida profesional, me encantaría agradecerles su amistad, consejos, apoyo y ánimos en los momentos más difíciles de mi vida. Para todos ellos: Muchas gracias y que Dios los bendiga. iii AUTORIZACIÓN DE LA AUTORÍA INTELECTUAL Yo, Wilmer Patricio Pujos Castro en calidad de autor del proyecto integrador realizado sobre: Inteligencia Artificial Del Videojuego La Dama, autorizo a la UNIVERSIDAD CENTRAL DEL ECUADOR hacer uso de todos los contenidos que me pertenece o parte de los que contiene esta obra, con fines estrictamente académicos o de investigación. Los derechos que como autores me corresponden, con excepción de la presente autorización, seguirán vigentes a mi favor, de conformidad con lo establecido en los artículos 5, 6, 8; 19 y demás pertinentes de la Ley de Propiedad Intelectual y su Reglamento. En la ciudad de Quito, a los 15 días del mes de junio del 2016 Wilmer Patricio Pujos Castro CC. 172224625-1 Telf. 0999039050 Email: patorugal@hotmail.com iv CERTIFICACIÓN DEL TUTOR Yo, Gonzalo Bayardo Campuzano Nieto en calidad de tutor del trabajo de titulación INTELIGENCIA ARTIFICIAL DEL VIDEOJUEGO LA DAMA, elaborado por el estudiante Wilmer Patricio Pujos Castro de la Carrera de Ingeniería en Computación Gráfica, Facultad de Ciencias Físicas y Matemáticas de la Universidad Central del Ecuador, considero que el mismo reúne los requisitos y méritos necesarios en el campo metodológico y en el campo epistemológico, para ser sometido a la evaluación por parte del jurado examinador que se designe, por lo que lo APRUEBO, a fin de que trabajo investigativo sea habilitado para continuar con el proceso de titulación determinado por la Universidad Central del Ecuador. En la ciudad de Quito, a los 15 días del mes junio de 2016. Gonzalo Bayardo Campuzano Nieto CC. 1708459118 v vi vii CONTENIDO RESUMEN .................................................................................................................... xiii ABSTRACT .................................................................................................................. xiv INTRODUCCIÓN ............................................................................................................ 1 1 PLANTEAMIENTO DEL PROBLEMA ..................................................................... 2 1.1 Antecedentes .......................................................................................................... 2 1.2 Formulación y descripción de problema. ............................................................... 3 1.3 Objetivos. ............................................................................................................... 3 1.3.1 Objetivo General. ............................................................................................ 3 1.3.2 Objetivos Específicos. ..................................................................................... 3 1.4 Justificación. .......................................................................................................... 4 1.5 Alcance .................................................................................................................. 4 1.6 Diseño Metodológico ............................................................................................. 5 2 MARCO TEÓRICO ..................................................................................................... 7 2.1 Definición Inteligencia artificial en videojuegos. .................................................. 7 2.2 Historia de la inteligencia artificial en los videojuegos. ....................................... 7 2.3 Técnicas de inteligencia artificial. ......................................................................... 8 2.3.1 Path Planning (Búsqueda de caminos) ........................................................... 8 2.3.2 Máquina de Estados Finitos ............................................................................ 9 2.3.3 Redes Neuronales Artificiales (RNA). .......................................................... 11 2.3.4 Árbol De Decisiones. .................................................................................... 12 2.3.5 Goal Oriented Action Planning (GOAP) ...................................................... 13 2.4 Estado del arte ...................................................................................................... 14 3 METODOLOGÍA ....................................................................................................... 16 3.1 Historia del videojuego “La Dama”. ..................................................................... 16 3.1.1 Introducción ................................................................................................... 16 3.1.2 Guion Literario ............................................................................................... 16 3.2 Análisis y diseño de las técnicas de inteligencia artificial. ................................... 19 3.2.1 Propósito ....................................................................................................... 19 3.2.2 Peatón ............................................................................................................ 19 3.2.3 Cantinero ........................................................................................................... 21 viii 3.2.4 Animales ........................................................................................................... 22 3.2.5 Enemigo (La Dama) .......................................................................................... 23 3.2.6 Diagramas de Estados Finitos de las inteligencias artificiales. ......................... 25 3.3 Herramientas ........................................................................................................ 27 4 PRUEBAS Y RESULTADOS .................................................................................... 29 4.1 Pruebas ................................................................................................................. 29 4.1.1 Proyecto de demostración ............................................................................. 29 4.1.2 Diagrama de Clases. ....................................................................................... 31 4.2 Programación y Resultados................................................................................... 33 4.2.1 Demostración de la Maquina de estados del Peatón tipo A. .......................... 33 4.2.2 Demostración de la Máquina de estados del Peatón tipo B. .......................... 34 4.2.3 Demostración de la Maquina de estados del Cantinero. ................................ 37 4.2.4 Demostración de la Maquina de estados del Enemigo. .................................. 39 4.2.5 Rendimiento ................................................................................................... 43 5 CONCLUSIONES Y RECOMENDACIONES ......................................................... 46 5.1 Conclusiones ......................................................................................................... 46 5.2 Recomendaciones ................................................................................................. 47 BIBLIOGRAFÍA ............................................................................................................ 48 GLOSARIO .................................................................................................................... 50 ANEXOS ........................................................................................................................ 51 ix LISTA DE FIGURAS Figura 2.1. Ejemplo de diagrama de Estados Finitos. ...................................................... 9 Figura 2.2. Ejemplo de un esquema de RNA. ................................................................ 11 Figura 2.3. Ejemplo de un diagrama de árboles de decisiones. ...................................... 12 Figura 2.4. Ejemplo de precondición – efectos. ............................................................. 13 Figura 2.5. Pasos que realiza un GOAP ......................................................................... 14 Figura 3.1. Esquema de puntos randómicos en el mapa. ................................................ 20 Figura 3.2. El camino que debería tomar el peatón A ................................................... 20 Figura 3.3. El camino que NO debería tomar el Peatón A ............................................ 20 Figura 3.4. Esquema del peatón tipo B inactivo. ............................................................ 21 Figura 3.5. Esquema del peatón tipo B cuando se activa. .............................................. 21 Figura 3.6. Rutina que la IA del cantinero ejecutará. ..................................................... 22 Figura 3.7. Interacción del cantinero con el jugador. ..................................................... 22 Figura 3.8. Animal antes de la interacción con el jugador. ............................................ 23 Figura 3.9. IA del animal después de la interacción con el jugador. .............................. 23 Figura 3.10. Máquina de estados finitos del peatón tipo A ............................................ 25 Figura 3.11. Máquina de estados finitos del peatón tipo B ............................................ 25 Figura 3.12. Máquina de estados finitos del cantinero ................................................... 26 Figura 3.13. Máquina de estados finitos de los animales ............................................... 26 Figura 3.14. Máquina de estados finitos del enemigo .................................................... 27 Figura 4.1. Diagrama de Clases Parte 1.......................................................................... 31 Figura 4.2. Diagrama Clases Parte 2 .............................................................................. 32 Figura 4.3. El camino que debería tomar el peatón A .................................................... 34 Figura 4.4. Estado 0 (Estática) del Peatón tipo B. .......................................................... 35 Figura 4.5. El Peatón tipo B detecta la presencia del jugador. ....................................... 36 Figura 4.6. Estado 1 del Peatón tipo B interactuando con el jugador............................. 36 Figura 4.7. Estado 0 (inicial) del cantinero. ................................................................... 38 Figura 4.8. El cantinero detecta la presencia del jugador. .............................................. 38 Figura 4.9. Estado 1 interacción con el jugador ............................................................. 39 Figura 4.10. Estado 0 del Enemigo................................................................................. 42 x Figura 4.11. Estado 1 del Enemigo................................................................................. 42 Figura 4.12. Estado 2 del Enemigo................................................................................. 43 Figura 4.13. Aplicación subida a Google Play ............................................................... 44 Figura 4.14. Comentarios de los Jugadores en Google Play .......................................... 45 xi LISTA DE TABLAS Tabla 3.1. Herramientas de Software ............................................................................. 27 Tabla 4.1. Dispositivo Móvil Gama Baja ....................................................................... 43 Tabla 4.2. Dispositivo Móvil Gama Media .................................................................... 43 Tabla 4.3. Dispositivo Móvil Gama Alta ....................................................................... 44 xii RESUMEN INTELIGENCIA ARTIFICIAL DEL VIDEOJUEGO LA DAMA Autor: Wilmer Patricio Pujos Castro Tutor: Fis. Gonzalo Bayardo Campuzano Nieto El presente proyecto, tiene como objetivo el desarrollo de la lógica de los diferentes tipos de agentes, que intervienen en el videojuego “La Dama”, utilizando técnicas de inteligencia artificial, para la plataforma Android, el mismo que permitirá recatar las culturas y leyendas urbanas de la ciudad de Quito. Aplicando Plath Planning y Máquina de Estados Finitos, como técnica de Inteligencia Artificial en videojuegos, se ofrece el diseño, especificación y posteriormente una API de prueba basado en estas dos técnicas, en el lenguaje de programación C#, utilizando como motor de videojuegos Unity3D y su entorno de desarrollo MonoDevelop. Se crea diferentes tipos de comportamientos personalizados, para cada uno de los NPC’s que componen el videojuego, algunos de los cuales se los implementa usando Agentes (NavMeshAgent), herramienta que es proporcionada por el Game Engine de Unity. PALABRAS CLAVES: / VIDEOJUEGO “LA DAMA”/ PATH PLANNING/ TÉCNICAS DE I A/ PERSONAJE NO JUGADOR / MÁQUINA DE ESTADOS FINITOS/ PLATAFORMA ANDROID/ UNITY 3D xiii ABSTRACT ARTIFICIAL INTELIGENCE IN THE VIDEOGAME CALLED “LA DAMA” Author: Wilmer Patricio Pujos Castro Tutor: Phis. Gonzalo Bayardo Campuzano Nieto This project has as its main objective the development in logic of the different types of agents involved in the video game "La Dama", using artificial intelligence techniques for the Android platform, and at the same time, allowing the rescue of cultures and urban legends in Quito. Applying the Plath Planning and Finite State Machine as a technique of artificial intelligence in video games, the design, specification and then a test API based on these two techniques are offered in the programming language C #, using engine Unity3D game and its surrounding in the MonoDevelop development. Different types of personalized behaviors are created for each of the NPC's that make up the game, some of which are implemented using the Agents (NavMeshAgent) tool that is provided by the Game Engine Unity. KEY WORDS: / VIDEOGAME “LA DAMA”/ PATH PLANNING/ IA TECHNIQUES/ NON PLAYER CHARACTER / FINITE STATE MACHINE/ ANDROID PLATFORM / UNITY 3D. I CERTIFY that the above and foregoing is a true and correct translation of the original document in Spanish. Andrea de los Ángeles Rosero Morales Certified Translator ID: 171385011-1 Bachelor Degree (SENECYT): 1005-04-540533; 1004-09-695818 xiv INTRODUCCIÓN El campo de la informática y las nuevas tecnologías, están experimentando un constante cambio en la actualidad, debido a los continuos progresos investigativos, que se ha ido incrementando especialmente desde mediados del siglo XX. Los avances en la programación informática, con el desarrollo de algoritmos basados en la resolución de problemas complejos, como también en los estudios en cuanto a psicología cognitiva y la lógica matemática, han sido la antesala para la aparición de Sistemas Inteligentes, que basan sus capacidades de proceso y metodología en la Inteligencia Artificial. Una de las industrias en las que ha tenido una influencia importante es en los videojuegos. Si bien es cierto el concepto de Inteligencia Artificial en el campo de la informática no es estrictamente el mismo que en la de videojuegos, las metodologías que se aplican son directamente técnicas extraídas del primer campo. En los videojuegos, se interpreta a la Inteligencia Artificial como todo aquello que dota de un comportamiento a un personaje, pero no necesariamente se centra en la mejor solución. Se utilizan técnicas estrictamente de Inteligencia Artificial ampliamente conocidas y extendidas en el mundo, quizás las más utilizadas sean las técnicas basadas en Búsqueda de Caminos (Plath Plannig) y la de Maquinas de Estados Finitos (Finite State Machines), esto se debe a la facilidad de uso y comprensión. Los avances en cuanto a la tecnología se refiere, han sido capaces de crear máquinas con una velocidad de computó y capacidad de memoria impensables hace años atrás. Es así que gracias a las investigaciones en las áreas mencionadas, los progresos en la industria del hardware, se ha logrado que la aplicación de la Inteligencia Artificial crezca considerablemente. Este proyecto se basa en la aplicación de diferentes técnicas de Inteligencia Artificial, como la Búsqueda de Caminos y Máquina de Estados Finitos, aplicados a diferentes personajes, los cuales forman parte del videojuego “La Dama”, desarrollado para la plataforma Android. 1 1 PLANTEAMIENTO DEL PROBLEMA 1.1 Antecedentes La industria de los videojuegos es una de las industrias que mayor crecimiento tienen en el mercado, con la llegada de nuevos avances tecnológicos, ha hecho que los usuarios exijan una experiencia más real a la hora de escoger un videojuego; es por ello que, un punto muy importante a la hora de estudiarlo y criticarlo, es parte concerniente al uso de la inteligencia artificial que se le otorgue a ciertos personajes de éste, de tal manera que logre sorprender al espectador. La aparición de los microprocesadores permitieron avanzar en el campo de la IA (inteligencia Artificial), consiguiendo añadir cierta aleatoriedad a los enemigos que mejoraban su inteligencia. Numerosos avances se consiguieron a finales de los 70 en la inteligencia artificial en juegos como el famoso space invaders (1978) y el Galaxian (1979), que añadieron complejidad al juego introduciendo funciones hash que “aprendían” de los actos del jugador, considerándose los primeros sistemas de aprendizaje introducidos en el mundo del videojuego. (Martínez & Sotillo, 2015, p.1). Los avances en cuanto a la inteligencia artificial en los últimos años parece que se ha llegado a un tope y la verdadera inteligencia de nuestros aliados y enemigos virtuales se ha estancado, por otro lado las consolas de videojuegos, pasaron de ser consolas fijas (Nintendo, Xbox, Play Station), a poder llevarlos a cualquier lugar en un dispositivo móvil, y tomando en cuenta que, el uso de estos dispositivos móviles ha ido creciendo, haciéndolos que sean imprescindibles en nuestros hogares y dando lugar a crear nuevas formas de aprendizaje, las cuales son más entretenidas e interactivas para los jóvenes. El presente proyecto trata de presentar a Quito en un ambiente en el que el usuario experimente mediante un entorno 3D, uno de los lugares más turísticos de Quito (La Ronda), a la vez que interactúa con diferentes personajes del Quito antiguo en el año 1563 y el Quito moderno, con ellos se consigue observar cómo ha ido variando costumbres, tradiciones e infraestructura entre estas dos épocas. 2 1.2 Formulación y descripción de problema. En la actualidad no existen videojuegos que aporten a la cultura y relaten acerca de las leyendas de Quito, las cuales se han ido perdiendo con el pasar del tiempo, por esta razón se ha visto la necesidad de crear un videojuego en el cual se aplica técnicas de Inteligencia Artificial, las cuales brindan el realismo necesario al entorno y a los personajes, permitiendo captar la atención de los jóvenes, y así conseguir que se interesen en aprender sobre temas culturales a través del videojuego. El juego está orientado a plataformas móviles, ya que según la encuesta realizada en TIC e INEC (2015), el 87.7% de la población total del Ecuador, utiliza dispositivos móviles. (Instituto Nacional de estadísticas y censos, 2015); Mientras que, una encuesta realizada por Nicolás Montés, coloca a la plataforma Android como la segunda plataforma más usada en dispositivos móviles con un 47.5%, un 5% más alto que su rival IOS, para este 2016 se espera que el número de usuarios, que utilicen el sistema operativo Android crezca. (Universidad Cardenal Herrera, 2015) 1.3 Objetivos. 1.3.1 Objetivo General. Desarrollar un módulo del videojuego “La Dama”, utilizando gráficos en 3D de personas, animales y fantasmas, a los cuales se les implementará Inteligencia Artificial, esto influirá en la mecánica del juego, permitiendo que ciertos elementos que lo componen tenga un comportamiento más realista. 1.3.2 Objetivos Específicos. Desarrollar una serie de algoritmos inteligentes, encargados de dar autonomía a distintos elementos del videojuego (personas, animales y enemigos), reconocer las limitaciones de su comportamiento, exhibir verdadera creatividad, tomar sus propias decisiones e interactuar con el medio que la rodee. Simular las acciones del enemigo frente a situaciones de riesgo en el que éste se encuentre. Diseñar una máquina de estados finita, para determinar las rutinas que deberá tener los distintos personajes del videojuego. 3 1.4 Justificación. Aprovechando la capacidad que da la plataforma Android a los dispositivos móviles, los cuales manejan una unidad de procesamiento de gráficos medianamente alto, se desarrolla un videojuego interactivo 3D, el mismo que sirve como soporte para la enseñanza sobre la cultura y leyenda “La Dama” de Quito, haciendo que éste sea más entretenido y capte la atención del jugador. En este sentido es necesario, dotar de realismo en la interacción con diferentes personajes de su entorno, los mismos a los cuales se les ha implementado técnicas de inteligencia artificial para que sean autónomos y tomen sus propias decisiones. Las nuevas tecnologías permiten mayor cantidad de información y velocidad para procesar los algoritmos relacionados a la parte de inteligencia artificial, no obstante se ha tomado en cuenta a qué tipo de tecnología va dirigida el videojuego y se la ha ajustado a su capacidad, por las limitación del hardware de los dispositivos móviles. 1.5 Alcance El juego se orienta al proceso de enseñanza y del aprendizaje para jóvenes a partir de 15 años, porque el tipo de videojuego que se escogió es Survival Horror, y está acorde a lo descrito en la leyenda urbana de “La Dama Tapada”. El videojuego tiene un nivel, el entorno gráfico en el que se desarrolla consta de dos diferentes ambientes, el primero en el Centro Histórico de Quito - La Ronda y al final en un bosque situado a las afueras de Quito, éste último tendrá 5 pistas generadas al azar. Al enemigo (La Dama) y a los pobladores de “La Ronda”, se les implementa técnicas de inteligencia artificial para que interactúen según la situación lo amerite. El videojuego se ha diseñado para correr en plataforma Android, teniendo en cuenta como su mínima versión Kit-Kat, podrá ser manipulado por cualquier dispositivo móvil (Tablets, SmartPhones, SmartTvs, etc…). 4 1.6 Diseño Metodológico Para este proyecto se sigue varios pasos o etapas de un proceso sistemático, el cual nos permite desarrollar la parte relacionada a inteligencia artificial, que consisten en: Análisis Diseño Desarrollo Implementación Prueba y ajustes. a) Etapa de Análisis.- Se define, la(s) técnica(s) de inteligencia artificial a implementar en el videojuego. Entre las más utilizadas existen: Máquinas de estados finitos Redes de neuronas Computación evolutiva Lógica difusa Arboles de comportamiento GOAP Path-Planning Las que se han tomado en cuenta para el presente proyecto, es la Máquina de estados finitos y Path Plannig. La Máquina de estados finitos ayuda a establecer los diferentes tipos de rutinas que tienen los personajes dentro de la escena del juego. El Path-Plannig considerando el bajo recurso de memoria disponible en dispositivos. Esta técnica es la encargada de llevar a los personajes de un punto a otro, se la desarrolla con la consideración descrita anteriormente, para que funcione sin pérdidas de fps (fotogramas por segundo), en el dispositivo móvil. Esto se hace con pocos puntos origen-destino, en los cuales los personajes no jugadores se desplazan. b) Etapa del Diseño.- Establecer un esquema general, en el cual se especifique cuáles son los estados que tiene los personajes no jugadores (PNJ), con el fin de tener en cuenta las acción que éste ejecuta, en las diferentes situaciones que se le presente. 5 c) Etapa del desarrollo. Se define los tools (herramientas) las cuales proporciona la plataforma Unity, para el manejo de Path Planning (búsqueda de caminos), se usa Nav Mesh Agent (Navegación de agentes por medio de una malla de triángulos), el cual permite patrullar, en el caso del enemigo (la dama), las pistas que ésta proteja. Para programar los algoritmos de inteligencia artificial se utiliza como lenguaje de programación C#. Previamente se debe hacer un test al modelado 3D, para ver que el Riggin este correctamente hecho, ya que esto podría influir en las acciones a ejecutar del PNJ. d) Etapa de la implementación.- Se añade la Máquina de estados finitos a los modelos 3D, cabe mencionar que cada personaje (la dama, peatones, animales y cantinero), tienen diferentes estados, ya que cada uno cumple diferentes roles en el juego. e) Etapa de pruebas y ajustes.- Se hace un Test en dispositivos móviles de gama baja, media y alta; con el fin de observar, cual es el desempeño que éstos tienen, constatar que no haya retraso en la fluidez de las acciones del PNJ, o que no haya perdidas de FPS en el juego, esto incide a que no en todos los dispositivos se ejecuta con fluidez y ayuda a determinar las características básicas, que debe tener el dispositivo para el correcto funcionamiento del juego. 6 2 MARCO TEÓRICO 2.1 Definición Inteligencia artificial en videojuegos. Es la simulación de comportamientos de los personajes no manejados por el jugador: NPCs (Personajes no jugadores), enemigos, jefes finales, animales, etc... Es un agente electrónico que puede pensar, evaluar y actuar en ciertos principios de la optimización y la coherencia para cumplir con una meta o propósito. (Alcalá, 2011, p.2) 2.2 Historia de la inteligencia artificial en los videojuegos. 1 Los primeros sistemas de inteligencia artificial se originaron en los años 50, se aplicaron a juegos de mesa: damas (Arthur Samuel) y ajedrez (Claude Shannon). No es sino, en los años 60 se desarrollaron juegos como el Pong o Spacewar, basados en la lógica. Años después por los años 70 surgieron juegos de un jugador, contra enemigos que se movían mediante patrones almacenados. Space Invaders en 1978 añadió dificultad creciente y respondía a las acciones del jugador. Pac-Man en 1980 incorporó algoritmos de búsqueda en laberintos. Dragon Warrior en 1990 fue el primer RPG, permitía variar las rutinas de la inteligencia artificial de los enemigos durante las batallas. En los años 90 se produjo un boom de nuevos géneros y nuevas técnicas de inteligencia artificial 1 Máquinas de estados finitos Redes de neuronas Computación evolutiva Lógica difusa Esta sección se extrajo de (Alcalá, 2011) 7 En el año 1996 el videojuego Battelcruiser 3000AD, incorpora redes de neuronas. Hasta la fecha habido un estancamiento en cuento a nuevas técnicas de inteligencia artificial se refiere, y los videojuegos hasta el día de hoy usan algunas de las técnicas anteriormente mencionadas. 2.3 Técnicas de inteligencia artificial. 2.3.1 Path Planning (Búsqueda de caminos) Tiene como objetivo encontrar una secuencia de acciones que permitan al jugador moverse desde un punto de mapa A hasta otro punto del mapa B, esto se puede apreciar en el Anexo A.1. La información que necesita este tipo de inteligencia artificial es: Representación del mapa. Movilidad de las unidades o del jugador. Coste de las acciones de las unidades o del jugador. a) Representación del mapa.- En esta parte es donde se le proporciona toda la información del juego, como está estructurado, esta representación puede ser tridimensional visualmente, pero realmente funciona como una imagen bidimensional y está constituida por una matriz. La información que se proporcione en este punto es muy importante, por ejemplo: Si se restringiera la iteración del jugador con el entorno; es decir, definir en un punto en el mapa en el cual la inteligencia artificial no pudiera interaccionar, como fuera el caso de una roca gigante, entonces la inteligencia artificial debería esquivarla. Para ver un ejemplo de las diferentes representaciones de mapas ver el Anexo A.2. b) Movilidad de las unidades o el jugador.- Se toma en cuenta la movilidad que deberían tener las unidades o del jugador. Si se tratara de un juego en primera persona (Shooter), normalmente se controla a un único jugador; en cambio, si se tratara de un juego de estrategia, en el cual hay un conjunto de unidades, las cuales todas y cada una de éstas es un jugador independiente, tiene que calcular su camino, para llegar a un punto determinado de forma independiente. Un ejemplo de esto se puede apreciar en el Anexo A.3 y A.4 8 c) Coste de las acciones de las unidades o del jugador.- Cada una de las acciones de la inteligencia artificial tiene un coste (valor), por ejemplo: Se define que si la inteligencia artificial se mueve en diagonal tiene un valor de 1, si salta tiene el valor de 50, estos valores son los que influyen en que un algoritmo encuentre o no un camino más rápido o más lentamente. (Martínez M. , 2014, p.8) 2.3.2 Máquina de Estados Finitos Figura 2.1. Ejemplo de diagrama de Estados Finitos. (Torrico, 2016) Una Máquina de Estado Finito (Finite State Machine), llamada también Autómata Finito es una abstracción computacional que describe el comportamiento de un sistema reactivo mediante un número determinado de Estados y un número determinado de Transiciones entre dicho Estados. Las Transiciones de un estado a otro se generan en respuesta a eventos de entrada externos e internos; a su vez estas transiciones y/o subsecuentes estados pueden generar otros eventos de salida. Esta dependencia de las acciones (respuesta) del sistema a los eventos de entrada hace que las Máquinas de Estado Finito (MEF) sean una herramienta adecuada para el diseño de Sistemas Reactivos y la Programación Conducida por Eventos (Event Driven Programming), cual es el caso de la mayoría de los sistemas embebidos basados en microcontroladores o microprocesadores. Las MEF se describen gráficamente mediante los llamados Diagramas de Estado Finito (DEF), llamados también Diagramas de Transición de Estados. (Torrico, 2016) 9 1) Sistemas Reactivos Un Sistema Reactivo es aquel que interactúa constantemente con su medio ambiente, tiene la característica de ser conducido por eventos (event driven), la respuesta de tiempo es crítica y una vez que el sistema se activa permanece en ese estado de manera indefinida. En estos sistemas los eventos llegan en tiempos impredecibles y el sistema debe tener la capacidad de responder de manera inmediata, en el orden de los milisegundos o microsegundos, sobre todo en sistemas donde la seguridad es crítica (ejemplo: un piloto automático en un avión o una máquina para soporte de vida en un hospital). La gran mayoría de los sistemas embebidos (en base a microcontroladores o microprocesadores) corresponden a esta categoría, debido a que estos sistemas están típicamente conectados a varios tipos de sensores y transductores de entrada encargados de captar los estímulos del medio ambiente (temperatura, presión, luz, magnetismo, fuerza / peso, etc.), procesar dicha información y generar una respuesta del sistema hacia el medio ambiente a través de transductores de salida y actuadores. (Torrico, 2016) 2) Sistemas Transformacionales A diferencia de los Sistemas Reactivos un Sistema Transformacional es aquel que recibe cierta información de entrada, realiza una cierta cantidad de cómputo, produce cierta información de salida y luego termina. No muchos sistemas embebidos caen en esta categoría; ejemplos más típicos son las aplicaciones para PC, como por ejemplo: Un procesador de texto. 3) Diagrama de Estado Finito o Diagrama de Transición de Estados Un Diagrama de Estado Finito es un gráfico que representa los diferentes estados de una MEF y todas las transiciones posibles entre los estados. Como en la Figura 2.1, consideremos un muy simplificado sistema de control de un ascensor: Estados: El sistema está formado por tres estados: DETENIDO YENDO_ARRIBA YENDO_ABAJO. 10 Los diferentes estados se los representa mediante bloques cuadrados (como en este caso) o círculos. Transiciones: Las transiciones se las representa mediante flechas que indican la dirección de transición de un estado a otro. Eventos: Los eventos para el sistema en este ejemplo son los siguientes: seleccion_piso: Es un evento externo que se genera toda vez que un usuario selecciona un piso o llama al ascensor desde otro piso. arribo_nuevo_piso: Es un evento interno que se genera cada vez que los sensores detectan que se ha arribado al nuevo piso seleccionado por el usuario. Los eventos se anotan en el gráfico por encima de las flechas de transición. Condiciones de Transición: Dos transiciones en este sistema de ejemplo tienen asociadas sus respectivas Condiciones de Transición. No todas las transiciones poseen Condiciones de Transición. piso_nuevo > piso_actual: Es la condición necesaria para que se produzca una transición del estado DETENIDO al estado YENDO_ARRIBA. piso_nuevo < piso_actual: Es la condición necesaria para que se produzca una transición del estado DETENIDO al estado YENDO_ABAJO. Las Condiciones de Transición se anotan por debajo de las flechas de transición. Una pseudo transición inicial del punto rojo al estado DETENIDO identifica a este último como el estado inicial de la MEF. (Torrico, 2016) 2.3.3 Redes Neuronales Artificiales (RNA). Figura 2.2. Ejemplo de un esquema de RNA. (Mallo & Martínez Ruiz, 2013, p.5) Es un sistema que sigue el modelo de las redes neuronales biológicas, estando conformado por las entradas a la red, las salidas, y los nodos o neuronas junto con las interconexiones entre ellas. 11 La principal ventaja de este tipo de redes es que podemos conseguir un sistema que proporcione salidas adecuadas en función de unas entradas sin saber exactamente la función total de transferencia, sino simplemente entrenándola bien, generalizando el reconocimiento en patrones. Como punto negativo tenemos que requiere un entrenamiento supervisado exhaustivo, cuanto más profundo sea el entrenamiento mejor reaccionará la red. (Mallo & Martínez Ruiz, 2013, p.4) Los ejemplos típicos de RNAs son el perceptrón simple y el multicapa, aunque en la mayoría de los casos actuales el multicapa es usado. Esta capacidad de devolver el resultado más correcto ante una entrada desconocida convierte a las RNAs en un modelo muy productivo para la inteligencia artificial en los videojuegos. Una de las aplicaciones más comunes es en las técnicas de reconocimiento de obstáculos y objetivos, así como en el movimiento autónomo. En la Figura 2.2 se puede observar el que podría ser un ejemplo de perceptrón multicapa para un sistema de avance con obstáculos, de tal forma que recibiendo mediciones de distancia de por la izquierda, derecha y centro hasta un obstáculo el sistema supiese si hay que seguir de frente, girar a la derecha o a la izquierda. Se ha de mencionar que en el caso de que la población para entrenamiento no sea lo suficientemente grande se pueden aplicar técnicas más avanzadas, que permiten adaptarse más fácilmente durante el juego a los cambios del entorno. (Mallo & Martínez Ruiz, 2013, p.5) 2.3.4 Árbol De Decisiones. Figura 2.3. Ejemplo de un diagrama de árboles de decisiones. (Afonso & García Durán, 2010) 12 Los árboles de decisión son rápidos, fácilmente implementables y sencillos de entender. Aunque sean el tipo de técnicas de toma de decisión más sencillas, pueden resultar bastante sofisticados con algunas extensiones/variaciones. Como vemos en la figura 2.3, está formado por un punto de decisión, que se denomina la raíz. Cuando llegamos a un punto de decisión, la bifurcación que elegimos depende del estado de entrada, esto es, de la información de la que se dispone en el momento en el que se ha iniciado el proceso de toma de decisión. Cuando el algoritmo de decisión llega a una determinada acción, entonces esa acción es llevada a cabo inmediatamente. El árbol mostrado en la Figura 2.3 es muy sencillo con opciones de tipo binario (YES/NO), pero se podría complicar con opciones numéricas, vectores... Incluso añadir una componente aleatoria mediante estados alternativos a los que se acceden con una determinada probabilidad. (Afonso & García Durán, 2010, p.6) 2.3.5 Goal Oriented Action Planning (GOAP) Consiste en la planificación de acciones orientadas a las metas. Igual que los seres humanos tenemos objetivos al realizar ciertas acciones la realidad aumentada también debería tenerlos, para ser mucho más interactivos. El goap se basa en que cada NPC del juego se les otorga de: Un conjunto de metas que son alcanzables. Un conjunto de condiciones asociadas a cada una de las metas. Un conjunto de acciones formadas por dos elementos: o Precondiciones o Efectos Por ejemplo. Precondiciones: Puerta Abierta Entrar a la habitación Efectos: Dentro de la habiltación Abrir Puerta Precondiciones: Cofre Cerrado, tengo las llaves Efectos: Cofre abierto. Figura 2.4. Ejemplo de precondición – efectos. (Martínez M. , 2014) 13 a) ¿Cómo funciona el GOAP? Figura 2.5. Pasos que realiza un GOAP (Martínez M. , 2014) 2.4 Estado del arte El proyecto de “Representación específica de la mitología ecuatoriana descrita en una obra histórica, a través del Demo jugable de un videojuego de estrategia” del autor Jonnathan Cóndor, el cual interpreta una historia del Reino de Quito en la América meridional y lo recrea en videojuego de estrategia con el fin de reforzar la identidad histórica ecuatoriana. (Cóndor, 2015) El proyecto “Diseño y desarrollo de un video-juego educativo con técnicas de inteligencia artificial para plataforma Android utilizando metodología OOHDM” del autor González Sotomayor, Itamar Soledad, quien explica que los videojuegos lúdicos o educativos es uno de los tipos de videojuegos que más se aplican como parte del proceso de enseñanza-aprendizaje en los niños, para el desarrollo del pensamiento y para el desarrollo psico-motriz de los mismos. Las aplicaciones de entretenimiento en 3D son las más apetecidas por niños y jóvenes cuando de jugar se trata y en los momentos de ocio. No cabe duda que la industria del videojuego es una de las que más ingresos generan a nivel mundial y los consumidores de este tipo de aplicaciones son millones de usuarios en todo el mundo. (Soledad, 2014) El proyecto “Creación de juegos lúdicos utilizando técnicas de inteligencia artificial sobre la plataforma c# .net con las librerías gdi+, para el desarrollo cognitivo de los niños entre 7 y 11 años caso de estudio optimización del juego del tres en raya con niveles de dificultad e ia, para la empresa vlbs cia Ltda” del autor Basurto Guerrero, Mario Oswaldo, Villacís Silva y César Javier, el cual consiste en desarrollar un vídeo 14 juego educativo, conocido como el juego del “Tres en Raya” o “Tic-Tac-Toe” en el idioma Inglés, utilizando Técnicas Heurísticas de Inteligencia Artificial, implementadas mediante un Método Numérico propio optimizado del clásico modelo del Min-Max y además se pretende evaluar su efectividad como una actividad de aprendizaje lúdica en el proceso de enseñanza-aprendizaje, este tipo de video juegos educativos incrementan la estimulación del pensamiento cognitivo en el área lógica y espacial de los niños entre 7 y 11 años. (Silva, 2014) El proyecto “Videojuegos y comunicación: estudio de la relación comunicacional del jugador con el mundo del videojuego, en el sistema de realidad virtual Kinect” del autor Yaguana Padilla, Carlos Daniel, el cual integra la tecnología Kinect, la cual simula la realidad a través de la generación de contenidos interactivos y personalizados en un contexto lúdico. En estas condiciones, los jugadores percibieron a esta tecnología como un "cuasi otro”. Esta relación se explicó a través de la para comunicación, como una simulación comunicativa entre el hombre y la máquina. (Padilla, 2014) A diferencia de los proyectos expuestos anteriormente, mantiene la línea de educación y cultura, pero además el presente proyecto se crea tomando en cuenta dos tipos de técnicas de inteligencia artificial, las cuales se trata de máquinas de estados finitos y Path Planning, además se implementa distintos tipos de inteligencia artificial, cada una de éstas tienen diferentes funciones en el videojuego y ejecutan diferentes acciones. 15 3 METODOLOGÍA 3.1 Historia del videojuego “La Dama”. 3.1.1 Introducción El presente apartado describe la leyenda de la Dama Tapada, historia que permite determinar los diferentes tipos de reacciones de los personajes, a los cuales se les dotará de inteligencia artificial, haciendo que éstos tengan un comportamiento autónomo. 3.1.2 Guion Literario J. Smith, escritor proveniente de Canadá llega al Ecuador a realizar un estudio de la cultura de Quito y sus leyendas urbanas para la publicación de su libro. Smith arribó al aeropuerto en horas de la tarde y luego de haberse registrado en el hotel, salió a recolectar información, en su incursión por las calles de Quito llegó a una cantina y decidió ingresar. Pide un trago y comienza a dialogar con el cantinero sobre algún acontecimiento extraño que se haya suscitado por el sector, el cantinero le menciona la historia de una dama que aparecía a altas horas de la noche, aquella mujer seducía a los hombres que se encontraban en estado etílico y nunca más se los volvía a ver. Esto hace despertar la curiosidad en Smith y solicita más detalles de los acontecimientos. a. Cantinero “Por los años 1563, Efrain y Aurora eran una pareja de esposos, que vivían en una casa ubicada en los alrededores de la Real Audiencia de Quito. Efrain tenía graves problemas con el alcohol, en una ocasión cuando el reloj se acercaba a la media noche, tuvieron una discusión y Efrain bajo influencias del alcohol salió de casa llevando consigo un objeto entre sus manos y no volvió a ser visto jamás. Aurora con el pasar el tiempo fue consumida por el dolor y el odio que causo Efrain, por su constante abandono al dedicar su tiempo a las cantinas. Aurora murió sentada en la sala de su casa, el odio en su alma hizo que no encuentre descanso y busque venganza. “ 16 Durante el transcurso de la conversación Smith entre trago y trago, al darse cuenta de que eran altas horas de la noche decide salir a su hotel, sin antes ser advertido por el cantinero que tenga cuidado con la dama en son de broma, en su caminar tambaleante divisa a lo lejos una silueta que parece ser una mujer de hermosa figura y atuendo obscuro. De pronto todo a su alrededor se oscurece. Smith despierta en una casa en las afueras de la ciudad, toma un candelabro que estaba cerca y con él comienza a inspeccionar el lugar, encuentra un porta retrato en el cual se observa a una pareja, mientras sigue explorando llega a un dormitorio que parece ser el cuarto principal de la casa y es ahí donde encuentra la mitad de una nota en la que dice: “Aurora amada mía he querido por mucho tiempo decirte…”; cuando de repente se ve una sombra en la ventana que desaparece rápidamente. Smith recuerda la conversación con el cantinero en la que mencionaba a Aurora y Efraín, deduce que la carta que encontró tiene relación con aquella historia, decide irse del lugar con intenciones de regresar al día siguiente a investigar. Al salir se da cuenta que está rodeado por un bosque tenebroso, mientras caminaba en su intento de regresar al hotel se percata que está dando vueltas en círculo, de repente la llama del candelabro se atenúa, por lo que Smith debe encontrar la manera de abastecer el candelabro. Mientras sigue caminando Smith encuentra un medallón en la rama de un árbol caído, lo abre y nota que las personas de las fotos son las mismas del porta retrato, escucha pasos que se acercan lentamente esto llama la atención de Smith causándole escalofríos y huye de ese lugar, al sentirse seguro Smith sigue buscando la forma de salir del bosque. En el transcurso del camino encuentra un saco manchado de sangre seca a lado de una piedra grande y vuelve a sonar los pasos atrás de él, Smith se aleja del sitio de manera rápida. Smith mientras corre logra divisar un objeto en el suelo, se dirige ese lugar recoge el objeto y se da cuenta que era un reloj viejo, en su interior se encuentra una fotografía de Aurora. Smith empieza a cuestionarse sobre la razón de que todos los objetos están tirados en el bosque y por qué desapareció Efraín, cuando de repente frente a él aparece La Dama haciendo que huya por su vida. 17 Smith de tanto caminar se encuentra desorientado y encuentra una cueva para pasar la noche, sin saber que dentro de ella se encuentra el fin de la historia, en el interior logra percibir un olor putrefacto y se dirige a lo que cree ser el origen de aquel repulsivo aroma, encontrándose con la osamenta de una persona y a su costado un trozo de papel, el cual contiene el complemento de la carta que recogió en la habitación de aquella casa. La carta dice lo siguiente: Aurora Amada mía He querido por mucho tiempo decirte que siento mucho haberte hecho sufrir y dejarte sola en esas largas noches, estoy muriendo tengo una enfermedad terminal y solo quiero pedir perdón a la persona que fue mi compañera durante todo este tiempo, quiero amarte los últimos días de mi vida y hacerte muy feliz. Atentamente Efraín. Smith se da cuenta que el medallón, el reloj, el saco manchado de sangre y lo restos en esa cueva, fueron indicios de que Efraín al salir de casa furioso y ebrio tuvo un accidente causándole la muerte, siendo esta la razón por la cual no regreso con su esposa. Smith ve una sombra en la entrada de la cueva gira y ve a La Dama que se acerca hacia él para matarlo, rápidamente Smith muestra la carta a su perseguidora, ella la observa, acto seguido rompe en llanto le dirige una mirada a Smith y se desvanece perdonándole la vida, él sale de la cueva y observa que el sol ha salido, se muestra un sendero que lo dirige a la ciudad. Smith crea su libro y lo publica, contando la experiencia vivida. Meses después… Un borracho se encuentra caminando por el centro de Quito a altas horas de la noche, en la esquina bajo la luz de una lámpara, aparece La Dama y éste lanza un grito desgarrador. 18 3.2 Análisis y diseño de las técnicas de inteligencia artificial. 3.2.1 Propósito El propósito del presente apartado, es definir los requerimientos, las metas y condiciones, que se debe tomar en cuenta a la hora de desarrollar las técnicas inteligencia artificial, las cuales se añade a los diferentes personajes del videojuego, entre los cuales se tiene: Los peatones El cantinero Animales El enemigo (la dama) 3.2.2 Peatón La técnica de inteligencia artificial que se desarrolló en los peatones se divide en dos tipos: Peatón tipo A Peatón tipo B a) Peatón tipo A La técnica de inteligencia artificial utilizada es Path Planning, ya que se desplaza por todo el mapa, toma información del entorno y del terreno, esquivando obstáculos que se le presenten, pero no interactúa con el jugador. ¿Cómo funciona esta técnica de inteligencia artificial en el peatón A? Para definir las rutinas del peatón tipo A, se generaron puntos randómicos por todo el terreno, tal como se muestra en la figura 3.1. 19 Figura 3.1. Esquema de puntos randómicos en el mapa. El peatón tipo A deberá ser capaz de encontrar el camino más corto, para ir de un punto origen a un destino. En las figuras 3.2 y 3.3 se muestra como se movería el peatón del punto P1 a P4. Figura 3.2. El camino que Figura 3.3. El camino que NO debería tomar el peatón A debería tomar el Peatón A En ambos casos el peatón tipo A irá esquivando los obstáculos que en su camino aparezcan. b) Peatón tipo B A diferencia del Peatón tipo A, esta técnica de inteligencia artificial se acciona cuando el jugador interactúe directamente con ella. 20 ¿Cómo funciona esta técnica de inteligencia artificial en el peatón B? El peatón tipo B permanece estático, tal como se muestra en la figura 3.4. Figura 3.4. Esquema del peatón tipo B inactivo. Al momento que el jugador atraviese el campo de interacción, el peatón tipo B se activa y ejecuta cualquier acción que se le haya establecido. Como se muestra en la figura 3.5. Figura 3.5. Esquema del peatón tipo B cuando se activa. 3.2.3 Cantinero El cantinero tiene rutinas las cuales harán que se desplace por una parte del terreno y cuando detecte la presencia del jugador, éste interactúa con el jugador. ¿Cómo funciona esta técnica de inteligencia artificial en el Cantinero? Como se muestra en la Figura 3.6. El cantinero está ejecutando una rutina, seguirá haciendo esto en un bucle infinito. 21 Figura 3.6. Rutina que la IA del cantinero ejecutará. Al momento que detecta la presencia del jugador, el cantinero se acerca y comienza a interactuar con el jugador, como se observa en la Figura 3.7. Figura 3.7. Interacción del cantinero con el jugador. 3.2.4 Animales La técnica de inteligencia artificial que se les añadirá a los animales, va hacer que estos huyan cuando sientan la presencia, del jugador o de alguna persona, dentro de su entorno. ¿Cómo funciona esta técnica de inteligencia artificial en los animales? En la figura 3.8 se puede observar que el animal está en un modo pasivo. 22 Figura 3.8. Animal antes de la interacción con el jugador. Al momento que se acerca el jugador el animal detecta esta presencia, éste huira hasta un punto donde este a salvo, este punto será cualquier que se sitúe encima del mapa, lejos del jugador. Observar la Figura 3.9. Figura 3.9. IA del animal después de la interacción con el jugador. 3.2.5 Enemigo (La Dama) Anteriormente se había explicado las técnicas de IA de diferentes personajes y/o elementos que componen el presente videojuego, en esta sección se expone la técnica de IA del enemigo, el cual está en una constante interacción con el jugador, ésta la más compleja que las anteriores. Para la implementación de esta técnica de IA se debe tomar en cuenta el coste computacional que tendrá, ya que contiene muchas acciones, más cálculos y la cantidad de información que se maneja será considerable para el dispositivo móvil. 23 ¿Cómo funciona esta técnica de inteligencia artificial en el enemigo? El enemigo debe custodiar un objeto de su importancia, quien intente quitar el objeto custodiado reacciona atacándole. Lo que le hace interesante al enemigo es que prioriza sus acciones; es decir, va a llegar un punto que tenga que decidir si persigue al jugador o regresa a custodiar el objeto. La función matemática que está definida para esta inteligencia artificial, es la ecuación de una recta, la cual se puede observar en (1). 𝑓 (𝑥 ) = (1 − 𝑥 )𝐴 + 𝑥𝐵 (1) Donde: x pertenece a [0,1] A es la variable que define la persecución B es la variable que define el resguardo del objeto. Si x=0, entonces: 𝑓 (𝑥 ) = (1 − 0)𝐴 + 0 ∗ 𝐵 𝑓 (𝑥 ) = 𝐴 (1.1) Indica que el enemigo debe perseguir al jugador Si x=1/2, entonces: 1 1 𝑓 (𝑥 ) = (1 − ) 𝐴 + 𝐵 2 2 𝑓 (𝑥 ) = 0.5𝐴 + 0.5𝐵 (1.2) Indica que el enemigo debe comenzarse a tener conflictos al perseguir al jugador Si x=1, entonces: 𝑓 (𝑥 ) = (1 − 1)𝐴 + 1 ∗ 𝐵 𝑓 (𝑥 ) = 𝐵 (1.3) Indica que el enemigo decide dejar de perseguir al jugador y volver a custodiar el objeto. 24 3.2.6 Diagramas de Estados Finitos de las inteligencias artificiales. A continuación se define los diagramas de las máquinas de estados finitos, que se les implemento en cada una de las técnicas de inteligencias artificiales (peatones tipo A y tipo B, cantinero, enemigo). a) Peatón Tipo A. Se trata de un diagrama muy fundamental, consta de un único estado, ya que este tipo de inteligencia tiene como objetivo deambular por todo el terreno, tal como se puede observar en la figura 3.10. Figura 3.10. Máquina de estados finitos del peatón tipo A b) Peatón Tipo B. El peatón tipo B, posee dos estados el cual es estar inactivo, y el segundo interactuar con el jugador. Figura 3.11. Máquina de estados finitos del peatón tipo B 25 c) Cantinero. Al igual que el peatón de tipo B, tiene dos estados, lo que le diferencia es que este tipo de inteligencia posee una rutina e igual tiene que interactuar con el jugador haciéndole una pregunta. Figura 3.12. Máquina de estados finitos del cantinero d) Animales. Tendrán una interacción unilateral con el jugador. Los animales tendrán dos estados: Caminar y huir. Figura 3.13. Máquina de estados finitos de los animales e) Enemigo (la dama). El enemigo posee tres estados, los cuales se puede observar en la figura 3.14. 26 Figura 3.14. Máquina de estados finitos del enemigo 3.3 Herramientas Tabla 3.1. Herramientas de Software Sistema Operativo Windows Nombre Windows 7 Descripción Sistema Operativo desarrollado por la empresa Microsoft, el cual sirve para gestionar los recursos de hardware y proveer servicios a las aplicaciones. Lenguaje de programación. Nombre C# Descripción C# es un lenguaje de programación que se ha diseñado para compilar diversas aplicaciones que se ejecutan en .NET Framework. C# es simple, eficaz, con seguridad de tipos y orientado a objetos. Las numerosas innovaciones de C# permiten desarrollar aplicaciones rápidamente y mantener la expresividad y elegancia de los lenguajes de estilo de C. 27 Motor de juegos 3D (3D Game Engine) Nombre Descripción Unity Unity está disponible como plataforma de desarrollo para 5.3.3f Microsoft Windows, OS X y Linux, y permite crear juegos para Windows, OS X, Linux, Xbox 360, PlayStation 3, Playstation Vita, Wii, Wii U, iPad, iPhone, Android y Windows Phone. Gracias al plugin web de Unity, también se pueden desarrollar videojuegos de navegador para Windows y Mac. 28 4 PRUEBAS Y RESULTADOS 4.1 Pruebas En esta sección se exponen las pruebas realizadas a los algoritmos de IA, que componen el juego, además de exponer algunos detalles relativos al rendimiento que tiene cada inteligencia. 4.1.1 Proyecto de demostración Como proyecto de demostración se procede a realizar una serie de pruebas en Unity, donde se otorga una escena, se presenta una escena y varias clases donde este la inteligencia artificial en ejecución. 1) Scripts Generales.- A continuación se detallan algunos de los scripts que son comunes, y que se utilizaron para implementar los diferentes tipos de inteligencia artificial. a) La clase InteraccionIA.cs representa el control de interacción que tiene el Peatón de tipo A y el Cantinero con el jugador, en ambos casos la inteligencia se acerca al jugador a “dialogar”. b) La clase ControllerState.cs está encargada de manejar las animaciones, que debe tener la inteligencia artificial. Por ejemplo: Estar quieto, caminar, corre o atacar. c) NotificationCenter.cs es una librería que permite pasar datos de una clase a otra de una manera rápida por medio de notificaciones. (García & Lobato, 2014) 2) Scripts Específicos.- Se detallan los script más relevantes, que se utiliza para cada inteligencia artificial. 29 a) Peatón tipo A. WaypointsController.cs controla el desplazamiento que deben tener los peatones cuando deambulan de un lugar a otro, se define una ruta la cual debe seguir, para tener un mejor control de sus desplazamientos. Aleatorio.cs esta clase es encargada de generar número randómicos (no repetidos), los cuales hacen que las rutas tomadas por estos peatones, no sean siempre las mismas. b) Peatón Tipo B. GuiaTuristicoIA.cs clase en la cual se encuentra implementada la interacción peatón tipo B con el jugador. c) Cantinero. CantinerIA.cs aquí se determina la ruta que debe seguir el cantinero y a qué momento debe interaccionar con el jugador para dialogar. d) Enemigo. EnemigoIA.cs esta clase implementa los diferentes tipos de estados que tendrá el enemigo, el cual se interacciona con el objeto a custodiar y con el jugador. Para probar la demostración de las diferentes técnicas de inteligencias artificiales, es necesario abrir el proyecto con el IDE (Unity 5.3.3), y abrir la escena Scene.unity. Una vez cargada la escena hay que ejecutarla haciendo clic en el botón “Play”. Es posible interaccionar con el teclado, mediante las teclas. W para desplazarse hacia adelante. S para desplazarse hacia abajo. A para desplazarse hacia la izquierda. D para desplazarse hacia la derecha. Q y E para interaccionar respectivamente. A continuación se explica cómo funciona la máquina de estados en cada técnica de inteligencia artificial. Para la demostración de las pruebas se usaran cubos y esferas. 30 4.1.2 Diagrama de Clases. Figura 4.1. Diagrama de Clases Parte 1 31 Figura 4.2. Diagrama Clases Parte 2 32 4.2 Programación y Resultados 4.2.1 Demostración de la Maquina de estados del Peatón tipo A. Para la implementación de esta técnica de IA, se utilizaron dos tools que por defecto vienen en el Engine de Unity, los cuales son: NavMesh.- Es una clase se puede utilizar para hacer consultas espaciales, como las pruebas de pathfinding y transitabilidad, establece el coste búsqueda de caminos para los tipos de áreas específicas, y para retocar el comportamiento global de la búsqueda de caminos y la elusión. (Technologies, 2016) NavMeshAgent.- Este componente está unido a un carácter móvil en el juego, para permitir que navegue por la escena utilizando un NavMesh. (Technologies, 2016) Se muestra un fragmento de la implementación, creado en el WaypointsController.cs, para más detalle del código (Ver Anexo B.1): void Start(){ agent = GetComponent<NavMeshAgent> (); indicesAlet = new ArrayList (); sizeWP = wayPoints.Length; indicesAlet = aletWP.generaAleatorio (sizeWP); currentWayPoint = (int)indicesAlet [contador]; } void Update () { if (contador >= sizeWP) { indicesAlet = new ArrayList (); indicesAlet = aletWP.generaAleatorio (wayPoints.Length); contador=0; } wayPoint = wayPoints [currentWayPoint]; //Maquina de estados. // Estado 0 if (isMoving) { agent.SetDestination (wayPoint.position); } 1 } Como se puede apreciar en el punto 1, se define el estado para el peatón A, el cual deambula aleatoriamente por todos los puntos, creando así diferentes rutas. No se incluye el cs completo debido a su longitud. De igual manera resulta suficiente para visualizar la máquina de estados que tiene esta inteligencia. 33 Al observar la Figura 4.3, el peatón A, a medida que se va desplazando, va a ir esquivando cada obstáculos que se le ponga en frente, en este caso se puso cilindros. Las esferas en el piso son los diferentes puntos donde se ira desplazando. Figura 4.3. El camino que debería tomar el peatón A 4.2.2 Demostración de la Máquina de estados del Peatón tipo B. Para la implementación del Peaton B se usa de igual manera los componentes NavMesh y NavhMeshAgent. Esta inteligencia tiene un estado inicial pasivo. Como se mencionó esta técnica de IA posee dos estados: Estado Estático y Estado Interactivo. Se muestra a continuación un fragmento de código de la clase GuiaTuristico.cs, para más detalle del código se lo puede observar en el Anexo B.2. Se puede observar donde se implementa los diferentes estados que tiene la IA. La distanciaPC es la distancia mínima que el peatón se acerca al jugador. // El Estado por default es 0 es decir estara quieto //Estado 1 if (interaccion) { pulsoBtn = true; float distanciaPC = Vector3.Distance (agent.transform.position, player.transform.position); if (distanciaPC > 1.3) { agent.SetDestination (player.transform.position); } else { pause(); } } } 34 2 guiarJugador es un método, que permite al peatón de tipo B guiar al jugador de un punto A hacia un punto B. public void guiarJugador(){ agent.SetDestination (ptGuia1.transform.position); } El método que se muestra a continuación, permite que el peatón tipo B detecte al jugador. void OnTriggerEnter(Collider other){ if(other.name.Equals ("puntoGuia1")){ Debug.Log("Choco guia 1:"); agent.SetDestination (ptGuia2.transform.position); } if (other.name.Equals ("puntoGuia2")) { Debug.Log("Choco guia 2:"); agent.SetDestination(ptGuia3.transform.position); } if (other.tag.Equals ("Player")) { mensaje = "Pulsa Q para hablar"; mostrarMensaje =true; } } A continuación una muestra de la inteligencia del Peatón B en ejecución. Para lo cual se añadió un campo de detección. Como se puede observar en la Figura 4.4, el estado 0 del peatón B no está en movimiento, no interactúa hasta que el jugador atraviese su campo de detección. Figura 4.4. Estado 0 (Estática) del Peatón tipo B. 35 En la Figura 4.5 se puede apreciar el proceso intermedio del peatón tipo B y el jugador, este proceso es saber si el jugador está cerca o no para ejecutar una acción. Figura 4.5. El Peatón tipo B detecta la presencia del jugador. La Figura 4.6 muestra la interacción del peatón tipo B con el jugador, el cual tiene como objetivo llevarlo de un punto A hacia un punto B, teniendo cuidado con los obstáculos que estén en dicho camino. Figura 4.6. Estado 1 del Peatón tipo B interactuando con el jugador. 36 4.2.3 Demostración de la Maquina de estados del Cantinero. A continuación se presenta la demostración ejecutando la técnica de inteligencia artificial del cantinero, éste contiene dos estados, como se había mencionado anteriormente, el primer estado es el de describir una ruta secuencial y va a interactuar con el jugador. Debido a la longitud del archivo, se muestra un fragmento de código de la clase CantineroIA.cs, para más detalle del código (Ver Anexo B.3): //Estado 0 if (isMoving) { agent.SetDestination (wayPoint.position); } //Estado 1 if (interacciono) { float distanciaPC = Vector3.Distance (agent.transform.position, player.transform.position); if (distanciaPC > 1.3) { agent.SetDestination (player.transform.position); } } if (Input.GetKeyDown("e")) { interacciono = true; romperMensaje = true; } } Tal como se puede observar en el punto 3, en esa parte de código se está implementando los dos estados que tendrá el caninero, por un lado esta es IsMoving, encargado de mover al cantinero por la ruta descrita y por otra parte está el interacciono, quien define la interacción del jugador con el cantinero. Observando la Figura 4.7 se puede apreciar al cantinero, describiendo una ruta asignada. Continuara así en un bucle infinito, hasta que no note la presencia del jugador alrededor de él. 37 3 Figura 4.7. Estado 0 (inicial) del cantinero. En la Figura 4.8, al momento que el jugador entra al campo de detección del cantinero, éste pasa a un estado en reposo y espera que el jugador decida si va a interactuar o no. Figura 4.8. El cantinero detecta la presencia del jugador. Como se puede observar en la Figura 4.9, al decidir interactuar con el cantinero, éste ejecuta una acción, en el caso del proyecto de demostración la acción a ejecutar es la de acercarse al jugador. 38 Figura 4.9. Estado 1 interacción con el jugador 4.2.4 Demostración de la Maquina de estados del Enemigo. En esta sección se describe los diferentes tipos estados de las técnicas de IA implementadas en el enemigo (La Dama), para este caso en particular no se usó NavMesh - NavMeshAgent, por la cantidad de recursos que consume el aplicar el Bake (Mapeo de la superficie) en el NavMesh. Al no tener NavMeshAgent el cual es encargado de hacer el Path Planning, se implementó un algoritmo personalizado, para que persigue y ataque al jugador. El enemigo tiene tres estados establecidos, cada uno de ellos depende de lo que haga el jugador y de donde este alojado el objeto que custodia. A continuación se muestra un fragmento de código de la clase EnemigoIA.cs, para más detalles del código (Ver Anexo B.4). En el punto 4, se implementa el primer estado que tiene el enemigo, el cual va a ser cuidar la pista, se define la velocidad con que patrulla, los puntos donde va a patrullar. //Maquina de Estados if (estado == 0) { //Cuando esta Patrullando velRotacion=2; pointTrayec = pointsTrayec [indiceActual]; velMovimientoIni = lastVelocidadInicial; persigueJugador (pointTrayec,this.velMovimientoIni); } 39 4 Por otro lado, el punto 5 corresponde al segundo estado, el cual si detecta la presencia del jugador en su entorno, el enemigo lo que hace es perseguirlo. Se define una velocidad que aumenta con el tiempo hasta llegar a 7. Si este supera el rango máximo de persecución el enemigo regresa a custodiar el objeto. if (estado == 1) { velRotacion=7; 5 distanciaCont = Vector3.Distance (player.transform.position, transform.position); if (distanciaCont > distanciaEnemigo) { //Cuando Persigue persigueJugador(player.transform, velMovimientoIni); if (velMovimientoIni < velMovimientoFinal) { velMovimientoIni += velMovimientoIni * Time.deltaTime; } } else { Finalmente el punto 6, se implementa el tercer estado, quien se encarga de atacar al jugador hasta matarlo. Se define la mínima distancia entre el jugador y el enemigo para comenzar a atacarlo. //Cuando Ataca Debug.Log("Atacar..."); } distanciaCont = Vector3.Distance (pista.transform.position, transform.position); if (distanciaCont > distanciaPersecucion) { estado = 0; } } } A continuación se muestra el método el cual se encarga de perseguir al jugador, los parámetros que recibe es el objetivo y la velocidad con la cual le perseguirá. void persigueJugador (Transform target,float velocidadIA){ Vector3 tgtDir = target.position - transf.position; float tgtDist = tgtDir.magnitude; // obtiene la distancia del objetivo Vector3 moveDir = target.position - transf.position; moveDir.y = 0; // previene que el enemigo sufra una inclinación Quaternion rot = Quaternion.FromToRotation(Vector3.forward, moveDir); transf.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation (target.position - transform.position), velRotacion * Time.deltaTime); 40 6 MoveCharacter(moveDir, velocidadIA); } El método MoveCharacter se encarga de mover al enemigo de un punto a otro en una dirección dada, los parámetros que recibe es la dirección y la velocidad con la cual que lo mueve. public void MoveCharacter(Vector3 dir, float speed){ var vel = dir.normalized * speed; // vel = velocitidad de movimiento // retringe a la velocidad vertical actual para el uso de la gravedad vel.y = Mathf.Clamp(character.velocity.y, -30, 2); vel.y -= gravity * Time.deltaTime; // aplica la gravedad character.Move(vel * Time.deltaTime); // mueve } En la Figura 4.10 se observa los siguientes elementos: Enemigo.- Objeto en el cual está implementado la Máquina de Estados Finitos. Pista.- Objeto que el enemigo protege, es un elemento estático en la escena. Campo detección 1.- Campo el cual se crea alrededor del enemigo, si el jugador traspasa dicho campo el enemigo lo ataca. Campo detección 2.- Campo externo al enemigo, similar al “Campo detección 1”, pero no pertenece al enemigo sino al escenario, si el jugador entra a este campo, el enemigo se percata de ello y corre a atacarlo. Todos los componentes anteriormente expuestos, influyen en las decisiones del Enemigo y están ligados a las acciones que el jugador ejecute en ese instante. Esta inteligencia es más rápida en ejecución que las anteriores ya que el algoritmo con la que se creó no necesita de un Bake para ejecutar, esto implica que haya menos información que procesar, una de esta son las del tipo de terreno en el cual tenga que caminar. 41 Figura 4.10. Estado 0 del Enemigo Como se puede observar en la Figura 4.11, cuando el jugador entra en cualquier de los dos campos de detección, el modo “persecución” se activa y el enemigo corre hacia el jugador para atacarlo, cuando se encuentre a una distancia mínima especificada, el enemigo atacara al jugador. Figura 4.11. Estado 1 del Enemigo 42 Tal como se observa en la Figura 4.12, cuando lleve un tiempo persiguiéndole al jugador el enemigo, dada la ecuación (1), el enemigo tiene que evaluar, si seguir persiguiendo al jugador o regresar a custodiar la pista. Figura 4.12. Estado 2 del Enemigo 4.2.5 Rendimiento A continuación se procede a describir los dispositivos móviles, en los cuales se ejecutó el proyecto de prueba, con el fin de ver si hay pérdida o no de FPS. Se considera que el promedio óptimo de FPS es de 46 a 47. Tabla 4.1. Dispositivo Móvil Gama Baja Modelo AOC MW0711 Versión de Android 4.1.1 (JELLY BEAN) Procesador Single Core 1.01GHz Ram 1 GB Resolución 800 x 480 Pixeles Como se muestra en la Tabla 2, se ejecutó en este dispositivo el proyecto con las técnicas de inteligencias artificiales empleadas en los cuatro personajes del videojuego, al ejecutar da como resultado 38 fps, con pérdida aproximada de 8 fotogramas, aun con esa pérdida de fps se ejecuta con un retraso mínimo en la interacciona con el jugador. Tabla 4.2. Dispositivo Móvil Gama Media Modelo Samsung S4 GTI9500 Versión de Android 5.0.1 (Lollipop) 43 Procesador Exynos 5 Octa octa-core 1.6 GHz Ram 2GB Resolución 1080 x 1920 Pixeles Con un dispositivo con características descritas en la Tabla 3, al ejecutar el proyecto da como resultado 41-42 fps, con pérdida aproximada de 4 fotogramas, el retraso en la interacciona con el jugador es escaso. Tabla 4.3. Dispositivo Móvil Gama Alta Modelo Samsung S6 Edge Versión de Android 6.0.1 (Marshmallow) Procesador Exynos 7420 Quad-core 1.5GHz and Quad-Core 2.1GHz Ram 2.62 GB Resolución 1440x2560 Pixeles Tomando un dispositivo de gama Alta, con las características descritas en la Tabla 4, al ejecutar el proyecto da un fps, casi por el promedio de 44 a 46, con pérdida casi nula, dando como resultado una interacción con el jugador muy rápida. Aplicación en Google Play Como se puede apreciar en la figura 4.13 el videojuego tiene un promedio de aceptación del 4.4/5, lo que quiere decir que ha cumplido con las expectativas del usuario/jugador. Figura 4.13. Aplicación subida a Google Play 44 Entre los comentarios que hacen referencia a la interacción del jugador con los NPC’s, podemos citar los siguientes: Figura 4.14. Comentarios de los Jugadores en Google Play 45 5 CONCLUSIONES Y RECOMENDACIONES 5.1 Conclusiones La búsqueda de caminos (Path Planning) utilizando NavMeshAgent, se implementó únicamente para el cantinero, animales y peatones, considerando previamente dos tipos de elementos, animados y no animados dependiendo de su composición, por ello los elementos que conforman el escenario se los consideró como elemento básicos. Para el enemigo se creó un algoritmo propio, cuya función principal es perseguir al jugador, esto debido a que los diferentes algoritmos existentes en el Engine de Unity, no soporta el número de polígonos por las características de hardware de los equipos. La ejecución de las técnicas de IA en diferentes dispositivos, se ejecutó con fluidez, demostrando ser óptimas al momento de implementarlas; la facilidad al procesar acciones de dichas técnicas de IA, depende tanto de la complejidad del modelado 3D, como del tipo de terreno en que éstas se ejecuten. Tanto la técnica de Path Planning y las Máquinas de Estados Finitos, se ejecutaron de manera eficiente, en los diferentes dispositivos de Gama Baja y de Gama Media-Alta utilizados, observando respuestas rápidas sin pérdida considerables de FPS 46 5.2 Recomendaciones Sería posible a futuro mejorar el algoritmo de persecución del enemigo, el cual debe decidir el camino más rápido para llegar hacia el jugador, con el fin de optimizar la carga computacional que éste representa en tiempo de ejecución. Implementar más métodos de inteligencia Artificial y aumentar más estados tanto en enemigos, personas y animales, con el fin de tener una diversidad de interacciones con el jugador, esto no presenta el trabajo actual, debido a que los tiempos establecidos fueron muy cortos, pero con una planificación adecuada, se podrían implementar satisfactoriamente. Para el adecuado funcionamiento de las Maquinas de Estado Finitos y Path Planning, es recomendable ejecutarlo en un dispositivo de gama media o alta, para un mejor aprovechamiento del aplicativo. Se puede hacer los cambios requeridos para que pueda ser ejecutado en PCs, para poder implementar un mayor número de métodos y técnicas de inteligencia artificial, gracias a los recursos de hardware que estos poseen. Para los Test de prueba se podría usar la plataforma de juegos Steam, con su complemento llamado Steam-Tester. 47 BIBLIOGRAFÍA 1. García Durán, Alfonso. (2010). Inteligencia artificial en los videojuegos. Madrid. 2. Alcalá, J. (2011). Inteligencia Artificial en Videojuegos. Ciclo de conferencias Game Spirit 2, (pág. 46). 3. ALVERSPIN. (2015). Videojuegos Y Arte. Obtenido de http://videojuegosyarte.blogspot.com/2011_10_01_archive.html 4. CÓNDOR, J. E. (2015). Representación Específica De La Mitologia Ecuatoriana Descrita En Una Obra Histórica, A Través Del Demo Jugable De Un Videojuego De Estrategia. 5. CHANNEL, h. (13 de diciembre de 2011). Youtube. Obtenido de https://www.youtube.com/watch?v=y0YUUi_3S38 6. EFFECTS, n. B. (12 de julio de 2014). Youtube. Obtenido de https://www.youtube.com/watch?v=W2ohJrq-G_g 7. EFFECTS, S. S. (7 de octubre de 2014). Youtube. Obtenido de https://www.youtube.com/watch?v=D7SwYsdnE7w 8. FX, S. (15 de julio de 2014). Youtube. Obtenido de https://www.youtube.com/watch?v=3t_eV3aJAw4 9. GARCÍA, A., & Lobato, A. (2014). Hagamos Videojuegos. Obtenido de https://www.youtube.com/user/juande 10. INSTITUTO NACIONAL DE ESTADÍSTICAS Y CENSOS. (2015). ecuadorencifras. Obtenido de Tecnologías de la Información y Comunicaciones (TIC´S) 2015: http://www.ecuadorencifras.gob.ec/ 11. MALLO J, MARTÍNEZ, Carlos. (2013). Inteligencia Artificial en los Videojuegos. Madrid. 12. MARTÍNEZ, C., SOTILLO, J. (2015). Inteligencia Artificial en los Videojuegos. 8. 13. MARTÍNEZ, J. M. (28 de Mayo de 2007). UltimaGame. Obtenido de http://www.ultimagame.es/ 14. MARTÍNEZ, M. (2014). Inteligencia Artificial en Videojuegos. T3chFest 2014. 15. OVERMARS, M. H. (2011). Path Planning For Games. Netherlands. 48 16. PADILLA, C. D. (2014). Videojuegos y comunicación: estudio de la relación comunicacional del jugador con el mundo del videojuego, en el sistema de realidad virtual Kinect. 17. SILVA, C. J. (2014). Creación De Juegos Lúdicos Utilizando Técnicas De Inteligencia Artificial Sobre La Plataforma C# .Net Con Las Librerías Gdi+, Para El Desarrollo Cognitivo De Los Niños Entre 7 Y 11 Años. Caso De Estudio: Optimización Del Juego Del Tres En Raya Con Niveles. 18. SOLEDAD, G. S. (2014). Diseño Y Desarrollo De Un Videojuego Educativo Con Técnicas De Inteligencia Artificial Para La Plataforma Android Aplicando La Metodología Oohdm. 19. SOUNDBIBLE. (2014). SoundBible.com . Obtenido de http://soundbible.com/freesound-effects-1.html 20. SOUNDS, A. (1 de Noviembre de 2014). Youtube. Obtenido de https://www.youtube.com/watch?v=9pxOB-_h9aA 21. TECHNOLOGIES, U. (2016). Unity Documentataion. Obtenido de http://docs.unity3d.com/ 22. TORRICO, R. A. (14 de Abrl de 2016). Introducción a las Máquinas de Estado Finito. Obtenido de TecBolivia: http://tecbolivia.com/ 23. UNIVERSIDAD CARDENAL HERRERA. (25 de Febrero de 2015). Blogs CEU Informática. Obtenido de https://blog.uchceu.es/ 24. WIKIA. (2015). WOWWIKI. Obtenido de http://es.worldofwarcraft.wikia.com/wiki/NPC 25. WONG, K. W., PRICE, M. (2008). Artificial Intelligence for Computer Games. Abdennour El Rhalibi. 49 GLOSARIO Definición, acrónimos y abreviaturas. IA.- Corresponde a la abreviatura en español de Inteligencia Artificial, que se define como la capacidad de un agento no vivo de razonar. NPC.- Un PNJ (Personaje no jugador) o NPC (Non Player Character) es un personaje con el que se puede interactuar, pero no es un jugador, sino que está controlado por el software. Jugador.- Se define como el usuario de un videojuego interactivo sea en 2D o en 3D. TIC.- Tecnologías de la Información y Comunicación. INEC.- Es el Instituto Nacional de Estadística y Censos de Ecuador. Survival Horror.- Se denomina Survival Horror o videojuego de terror al subgénero de videojuegos enfocados principalmente a atemorizar al jugador, con lo que se pretende provocar inquietud, desasosiego o incluso miedo. 50 ANEXOS ANEXO A ......................................................................................................................... I ANEXO B....................................................................................................................... III ANEXO C....................................................................................................................... XI 51 ANEXO A Anexo A.1. Ejemplo Path Planning Figura A.1. Implementación Path – Planning con puntos origen-destino. (Overmars, 2011, p.3) Anexo A.2. Representación del mapa Figura A.2. Ejemplo - representación de un mapa Bidimensional. (Alverspin, 2015) I Anexo A.3. Juego Call Of Dutty (Shooter). Figura A.3. Modo de juego Shooter (Primera Persona). (Martínez J. M., 2007) Anexo A.4. Juego de Estrategia - Multijugador. Figura A.4. Control de varias unidades. (Overmars, 2011, p.2) II ANEXO B Anexo B.1. Script donde se implementa la Máquina de estados de los Peatón tipo A. WaypointsController.cs using UnityEngine; using System.Collections; using System.Collections.Generic; public class WaypointsController : MonoBehaviour { public Transform[] wayPoints; private Transform wayPoint; private int currentWayPoint; private bool isMoving = true; private NavMeshAgent agent; private ArrayList indicesAlet; private Aleatorio aletWP; public int contador=0; private int sizeWP; private int iterador=1; // Use this for initialization void Awake(){ aletWP = new Aleatorio (); } void Start(){ agent = GetComponent<NavMeshAgent> (); indicesAlet = new ArrayList (); sizeWP = wayPoints.Length; indicesAlet = aletWP.generaAleatorio (sizeWP); currentWayPoint = (int)indicesAlet [contador]; } void Update () { if (contador >= sizeWP) { indicesAlet = new ArrayList (); indicesAlet = aletWP.generaAleatorio (wayPoints.Length); contador=0; } wayPoint = wayPoints [currentWayPoint]; //Maquina de estados. // Estado 0 if (isMoving) { agent.SetDestination (wayPoint.position); } } void OnTriggerEnter (Collider other) { if (other.tag == "Waypoint") { isMoving = false; //Entre punto y punto se pone un delay para que despues avance al siguiente punto III Invoke ("activaMovimiento", Random.Range (1f, 2.5f)); } } public void activaMovimiento () { isMoving = true; contador++; iterador++; if (contador < sizeWP) { currentWayPoint = (int)indicesAlet [contador]; } } } Anexo B.2. Script en el cual se implementa la máquina de estados de los peatones tipo B. GuiaTuristicoIA.cs using UnityEngine; using System.Collections; public class GuiaTuristicoIA : MonoBehaviour { private NavMeshAgent agent; private GameObject player; private bool isMoving; private Vector3 lastAgentVelocity; private NavMeshPath lastAgentPath; public bool interaccion; public bool pulsoBtn; private bool llegoPtGuia; public GameObject ptGuia1, ptGuia2,ptGuia3; private bool mostrarMensaje, romperMensaje; private string mensaje; // Use this for initialization void Start () { player = GameObject.FindWithTag ("Player"); agent = gameObject.GetComponent<NavMeshAgent> (); } void Update(){ if (Input.GetKeyDown("q")) { mensaje = "Sigueme..."; interaccion = true; romperMensaje = true; } // El Estado por default es 0 es decir estara quieto //Estado 1 if (interaccion) { pulsoBtn = true; float distanciaPC = Vector3.Distance (agent.transform.position, player.transform.position); if (distanciaPC > 1.3) { agent.SetDestination (player.transform.position); } else { pause(); } } } IV public void hablarConJugador() { interaccion = true; } public void pause () { interaccion = false; isMoving = false; lastAgentVelocity = agent.velocity; lastAgentPath = agent.path; agent.velocity = Vector3.zero; agent.ResetPath (); } public void resume () { agent.velocity = lastAgentVelocity; agent.SetPath (lastAgentPath); isMoving = true; } //Estado 2 guia al jugador a un destino public void guiarJugador(){ agent.SetDestination (ptGuia1.transform.position); } void OnTriggerEnter(Collider other){ if(other.name.Equals ("puntoGuia1")){ Debug.Log("Choco guia 1:"); agent.SetDestination (ptGuia2.transform.position); } if (other.name.Equals ("puntoGuia2")) { Debug.Log("Choco guia 2:"); agent.SetDestination(ptGuia3.transform.position); } if (other.tag.Equals ("Player")) { mensaje = "Pulsa Q para hablar"; mostrarMensaje =true; } } void OnGUI(){ if (mostrarMensaje) { GUIStyle myButtonStyle = new GUIStyle(GUI.skin.button); myButtonStyle.fontSize = Screen.width/30; myButtonStyle.normal.textColor = Color.white; float width = Screen.width/0.5f; float height = Screen.height/6; GUI.Box(new Rect((Screen.width / 2) - width / 2, 0 + height / 2, width, height), mensaje, myButtonStyle); if (romperMensaje) { Invoke("eliminarMensaje", 2f); } } } V public void eliminarMensaje(){ mostrarMensaje = false; agent.SetDestination (ptGuia1.transform.position); } } Anexo B.3. Clase que contiene la máquina de estados del Cantinero. CanineroIA.cs using UnityEngine; using System.Collections; public class CatineroIA : MonoBehaviour { public Transform[] wayPoints; private Transform wayPoint; private bool isMoving = true; private int currentWayPoint; private NavMeshAgent agent; private int sizeWP; private Vector3 lastAgentVelocity; private NavMeshPath lastAgentPath; public bool interacciono, romperMensaje, mostrarMensaje; private string mensaje; GameObject player; // Use this for initialization void Start () { agent = GetComponent<NavMeshAgent> (); currentWayPoint = 0; sizeWP = wayPoints.Length; player = GameObject.FindWithTag("Player"); mensaje = "Aplaste E para Hablar..."; } // Update is called once per frame void Update () { //Máquina de estados wayPoint = wayPoints [currentWayPoint]; //Estado 1 if (isMoving) { agent.SetDestination (wayPoint.position); } //Estado 2 if (interacciono) { float distanciaPC = Vector3.Distance (agent.transform.position, player.transform.position); if (distanciaPC > 1.3) { agent.SetDestination (player.transform.position); } } if (Input.GetKeyDown("e")) { interacciono = true; romperMensaje = true; } } void OnTriggerEnter (Collider other) VI { if (other.tag == "Waypoint" && !interacciono) { isMoving = false; Invoke ("activaMovimiento", Random.Range (1f, 2.5f)); } if (other.tag == "Player") { mostrarMensaje = true; } } public void activaMovimiento () { isMoving = true; if (currentWayPoint < sizeWP - 1) { currentWayPoint++; } else { currentWayPoint = 0; } } public void pause () { isMoving = false; //NotificationCenter.DefaultCenter ().PostNotification (this, "executeAnim", "quieto"); lastAgentVelocity = agent.velocity; lastAgentPath = agent.path; agent.velocity = Vector3.zero; agent.ResetPath (); } public void resume () { //NotificationCenter.DefaultCenter ().PostNotification (this, "executeAnim", "camina"); agent.velocity = lastAgentVelocity; agent.SetPath (lastAgentPath); isMoving = true; } public void hablarConJugador () { interacciono = true; } void OnGUI() { if (mostrarMensaje) { GUIStyle myButtonStyle = new GUIStyle(GUI.skin.button); myButtonStyle.fontSize = Screen.width / 30; myButtonStyle.normal.textColor = Color.white; float width = Screen.width / 0.5f; float height = Screen.height / 6; GUI.Box(new Rect((Screen.width / 2) - width / 2, 0 + height / 2, width, height), mensaje, myButtonStyle); if (romperMensaje) { Invoke("eliminarMensaje", 2f); } VII } } public void eliminarMensaje() { mostrarMensaje = false; } } Anexo B.4. Clase que contiene la máquina de estados del Enemigo y el algoritmo creado para la persecución al jugador. EnemigoIA.cs using UnityEngine; using System.Collections; public class EnemigoIA : MonoBehaviour { public float distanciaEnemigo; public float distanciaPersecucion; private float distanciaCont; public int estado; //Atributos enemigo. private GameObject player; private Transform transf; public GameObject pista; private CharacterController character; public float velRotacion; public float velMovimientoIni; public float velMovimientoFinal; private float lastVelocidadInicial; private float gravity = 9.8f; //Array que describe al trayectoria del enemigo public Transform[] pointsTrayec; private Transform pointTrayec; private int numPoitns; private int indiceActual; //Controlador de animaciones void Awake () { estado = 0; numPoitns = pointsTrayec.Length; } // Use this for initialization void Start () { indiceActual = 0; //Inciando las notificaciones uqe nos serviran para los estados del enemigo NotificationCenter.DefaultCenter ().AddObserver (this, "controladorDeteccion"); lastVelocidadInicial = velMovimientoIni; transf = transform; player = GameObject.FindWithTag ("Player"); character = GetComponent<CharacterController>(); } VIII // Update is called once per frame void Update () { //Maquina de Estados if (estado == 0) { //Cuando esta Patrullando velRotacion=2; pointTrayec = pointsTrayec [indiceActual]; velMovimientoIni = lastVelocidadInicial; persigueJugador (pointTrayec,this.velMovimientoIni); } if (estado == 1) { velRotacion=7; //Cuando Persigue distanciaCont = Vector3.Distance (player.transform.position, transform.position); if (distanciaCont > distanciaEnemigo) { persigueJugador(player.transform, velMovimientoIni); if (velMovimientoIni < velMovimientoFinal) { velMovimientoIni += velMovimientoIni * Time.deltaTime; } } else { //Ataca Debug.Log("Atacar..."); } distanciaCont = Vector3.Distance (pista.transform.position, transform.position); if (distanciaCont > distanciaPersecucion) { estado = 0; } } } void controladorDeteccion (Notification notification) { estado = (int)notification.data; } void OnTriggerEnter (Collider other) { if (other.tag == "Waypoint") { if (indiceActual < (numPoitns - 1)) { indiceActual++; } else { indiceActual = 0; } } if (other.tag == "Player") { estado = 1; } } void persigueJugador (Transform target,float velocidadIA){ Vector3 tgtDir = target.position - transf.position; IX float tgtDist = tgtDir.magnitude; // obtiene la distancia del objetivo Vector3 moveDir = target.position - transf.position; moveDir.y = 0; // previene que el enemigo sufra una inclinación Quaternion rot = Quaternion.FromToRotation(Vector3.forward, moveDir); transf.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation (target.position - transform.position), velRotacion * Time.deltaTime); MoveCharacter(moveDir, velocidadIA); } public void MoveCharacter(Vector3 dir, float speed){ var vel = dir.normalized * speed; // vel = velocitidad de movimiento // retringe a la velocidad vertical actual para el uso de la gravedad vel.y = Mathf.Clamp(character.velocity.y, -30, 2); vel.y -= gravity * Time.deltaTime; // aplica la gravedad character.Move(vel * Time.deltaTime); // mueve } } X ANEXO C Anexo C1. Audios Utilizados: Efecto de Audio del Terremoto. (Sounds, 2014) Efecto de Audio del Grito de la Dama. (Effects S. S., 2014) Efecto de Audio de Impacto. (Effects n. B., 2014) Efecto Ambiente de la Ronda. (FX, 2014) Efecto Ambiente del Bosque. (SoundBible, 2014) Efecto Ambiente de la Cueva. (channel, 2011) XI