villagra-abp / Iki

[ABP16] Juego de puzzles y sigilo que hace uso de la perspectiva.
GNU General Public License v3.0
0 stars 1 forks source link

Entrega V1 Hito Final - Ikigai #52

Open Juansanalme opened 7 years ago

Juansanalme commented 7 years ago

Información general:

Entrega del hito final para la asignatura de videojuegos 1.

Antes de nada decir que en este issue se incluyen los entregables de todos los hitos, estuviesen retrasados para este hito final, o ya terminados en otros hitos. Estos últimos se adjuntan para poder tener acceso a ellos de manera inmediata pero su desarrollo e implementación están igual que en las anteriores entregas, dado que se daban por terminados. En cada entregable se indicará si su versión es la misma que en anteriores entregas.

Todos los entregables se prueban en el mismo archivo ejecutable, por lo tanto el mismo archivo de proyecto. En caso de que algún entregable tenga una variación para la ejecución, se indicará en la descripción del mismo y se adjuntará el ejecutable y el proyecto con dicha variación.

Para el caso concreto de los item V1.10 (Sistema de búsqueda de caminos y control) e item V1.23 (Sistema de Waypoints para pathfinding continuo), se ha desarrollado un único sistema, por lo que el vídeo explicativo y el código fuente adjuntos para estos entregables serán lo mismo. Sin embargo, se detalla la diferencia entre ambos, con una descripción para cada uno en la parte de entregables de este issue.

Aunque todo el código fuente se encuentra en la carpeta "Proyecto", en cada entregable se adjuntará el código fuente que le corresponde, si es posible.

Entrega general Aquí un enlace al archivo comprimido que contiene, por un lado, el proyecto para compilar; y, por otro, el ejecutable ya compilado para probar.

Controles del Juego

Entregables:

Item V1.01 - Documento de diseño de mecánicas de los NPCs

Sin cambios Enlace al .pdf ubicado en google drive

Item V1.02 - Documento de diseño de sistemas de toma de decisión

Sin cambios Enlace al .pdf ubicado en google drive

Item V1.03 - Documento de diseño técnico de la arquitectura de la IA

Sin cambios Enlace al .pdf ubicado en google drive

Item V1.04 - Diseño de requerimientos y funciones de red

No realizado

Item V1.05 - Diseño técnico de funcionamiento del motor de red

No realizado

Item V1.06 - Gestión de estados de la IA con Máquinas de Estados

Sin cambios Conceptos previos Cada instancia de la clase Enemigo contiene un puntero a una máquina de estados, que controla el estado de dicha entidad. Cuando un estado termina, controla el cambio de estado a través de la máquina.

Un estado puede terminar si su duración es finita (una secuencia de acciones específica), o si su duración es infinita, que termina cuando otro agente solicita el cambio de estado.

Enlace al comprimido .zip subido a drive Contiene el código fuente del entregable y un vídeo explicativo.

Item V1.08 - Sistema de toma de decisión con Lógica Difusa

Los enemigos realizan dos de sus acciones basándose en decisión con lógica difusa. Se basan en parámetros como su batería propia, la vida del jugador o la distancia al jugador. En el vídeo se resumen estas dos situaciones. En el documento de los sistemas de toma de decisión se puede apreciar de manera bastante visual cómo funciona el sistema (las variables difusas y las reglas).

Dentro de los estados donde realizan estas acciones, los enemigos utilizan una instancia de la clase FuzzyQuery que monta todo el sistema de lógica difusa y recibe las variables de entrada para devolver un valor de salida.

Vídeo explicativo en YouTube

Item V1.10 - Sistema de búsqueda de caminos y control (Pathplanning/following)

Sin cambios Descripción: El usuario que solicita el camino puede ser un Enemigo o el Jugador. Lo pide a la clase Pathplanning la cual recibe la posición de destino y una lista de PathEdges. En el path utilizamos ejes, en lugar de nodos, lo que sería útil si, por ejemplo, hay que cruzar un rio y el eje que une los nodos de cada lado se le puede asociar un comportamiento para que el protagonista camine diferente.

La clase Pathplanning calcula los nodos más cercanos a la posición de partida y a la de destino. Se controla que se use solo cuando el vector de dirección desde el origen hasta el destino está obstruido por paredes, lo que hace que solo use el camino cuando no puede ir en línea recta sin chocarte.

Utilizamos un grafo y un algoritmo para crear un path, y a ese path se le añade un smooth para que elimine el mayor número posible de waypoints y conseguir una mayor sensación de realidad. Si en un futuro se considerase necesario, será posible crear una matriz con los costes precalculados de ir de un nodo a otro.

Enlace al comprimido .zip subido a drive Contiene el código fuente del entregable y un vídeo explicativo.

Item V1.12 - Sistema de control de movimiento con Steering Behaviours

No realizado

Item V1.16 - Comunicación simulada básica entre NPCs (Blackboard)

No realizado

Item V1.17 - Sistema de gestión de eventos (Trigger System/Event Manager)

Sin cambios Descripción: El sistema es el siguiente: al inicializar la escena se lee un fichero .tmx en formato xml de tiled. Este tiene una capa de objetos en la que se crean los triggers que queremos en el mapa, y se les asigna un tipo.

Para la lectura se utiliza una clase TriggerFactory, no usa el patrón de fábrica abstracta pero es una interpretación similar. Para cada objeto que la clase TriggerSystem lee en el .tmx dentro de la capa de triggers, se hace una llamada a TriggerFactory, que se encarga de crear el trigger según el tipo que corresponde y lo devuelve a TriggerSystem para que lo registre. De esta manera, si queremos añadir más tipos de triggers al juego solo hay que añadirlo en el fichero .tmx y ampliar la clase TriggerFactory consecuentemente.

Durante el bucle del juego, la clase TriggerSystem comprueba las regiones de cada trigger activo con cada entidad del juego, las cuales recibe de la clase EntityManager.

Enlace al comprimido .zip subido a drive Contiene el código fuente del entregable y un vídeo explicativo.

Item V1.18 - Sistema de percepción sensorial (vista, oído, olfato, canales…)

Se añade un vídeo con respecto a la anterior entrega Vídeo explicativo en YouTube

Descripción: No tenemos un sistema como tal. Calculamos con un trigger si los enemigos están en la zona de ruido y te oyen, si te estas moviendo rápido. Por otro lado cuando nos acercamos a un enemigo, si entramos en su campo de visión que se calcula con vectores y ángulos podemos deducir si nos está viendo o no, y que nos siga con la mirada.

Item V1.19 - Sistema de memoria de estado y reacción para NPCs

Descripción: En cuanto a la memoria de estado, se trata en 3 clases: Sensor Memory, Memory Record, y Percibir (el cual es un estado global de la IA). En el video se explica donde se puede ver la implementación de este sistema.

Vídeo explicativo en YouTube

Item V1.22 - Pathfinding estratégico/táctico

No realizado

Item V1.23 - Sistema de Waypoints para pathfinding continuo

Sin cambios Descripción: El sistema es el siguiente: al inicializar la escena se lee un fichero .tmx en formato xml de tiled. En la lectura de este fichero tenemos los waypoints, elegidos arbitrariamente y creados en una capa de objetos; creamos los nodos y a su vez se crean los ejes, con el coste igual a la distancia entre ambos, para los nodos que conectan entre si. Hecho esto se añaden al grafo, en la clase SparseGraph.

La clase SparseGraph comprueba que los nodos y ejes que añadimos son correctos, y contiene un vector de nodos y otro vector de ejes de cada nodo, los cuales se recorren con iteradores. Además, en la clase Algoritmo se utiliza el A* para determinar la ruta más corta entre dos posiciones.

Como se ha especificado en la información general, la entrega de este ítem se adjunta al ítem V1.10.

Item V1.26 - Gestión de recursos de IA con Level-of-Detail (LoD)

No realizado

Item V1.31 - Sistema de logros y puntuaciones web

No realizado