Skip to content
This repository has been archived by the owner on Jul 10, 2019. It is now read-only.
dalmarzag edited this page May 21, 2019 · 16 revisions

Wiki

Introducción

Nuestro programa consiste en un combate por turnos contra un enemigo capaz de tomar decisiones debido a su inteligencia artificial. El programa está organizado en varias librerías donde están almacenadas las funciones necesarias para el funcionamiento del juego. Las funciones usadas en el proyecto tienen usos muy variados, útiles e imprescindibles, operaciones sencillas, asignación de valores (con ayuda de punteros), control de las decisiones del enemigo permitiendo a este poder tomr decisiones acertadas en ciertos momentos del combate además de una función que irá leyendo ficheros que servirán como ayuda al jugador durante la partida y para desarrollar una breve narrativa para ambientar el combate contando una historia según avance la partida con 3 finales posibles.

Dificultad

Al iniciar el programa aparece un menú inicial en el que podemos elegir comenzar la partida, ajustar la dificultad o salir del programa. Una vez elegido la opcion de ajuste de dificultad se abre la primera librería que se usa en el juego. En ella podemos encontrar una función que, al ejecutar el programa, nos muestra en pantalla tres modos de juego modo fácil , normal, difícil. Cada uno de estos niveles dota al enemigo de estadísticas reguladas acorde con la dificultar elegida. Si se comienza la partida sin haber especificado una dificultad en concreto, el juego iniciará en el nivel de dificultad intermedio. Ayudándonos con punteros, somos capaces de integrar el nuevo valor de las estadísticas del enemigo elegidas en base a la dificultad al programa.

Stats

Una vez el usuario decide empezar, el programa ejecuta la funcion stats compuesta por un menú en el cual el jugador puede ver el valor de sus estadísticas básicas y modificar a su antojo algunos de sus atributos (ataque, salud, curación, evasión y defensa). Mediante punteros logramos el propósito de asignar valores valores elegidos en la función al programa, el jugador puede canjear 10 "puntos" para aumentar en 5 unidades por punto el atributo que se desee (50 unidades en caso de la salud) y así permitir que cada vez que se juegue se pueda elegir una estrategia distinta para intentar derrotar al enemigo.

Jugador

Como jugador tu objetivo es derrotar al enemigo antes de que él acabe contigo. Para ello dispones de la posibilidad, en primer lugar, de personalizar tus estadísticas de combate antes de la partida además de disponer de una pequeña ventaja al ser tuyo el primer turno de la partida. Durante tus turnos dispondrás de una gran variedad de opciones a elegir. Podrás atacar, curarte, modificar tus atributos (aumentar el ataque, aumentar la curación, aumentar la evasión o aumentar la defensa), ver las estadisticas de la partida (tanto las tuyas como las del enemigo) o incluso rendirte. Tanto las opciones de ataque, curación y los modificadores están regulados por funciones, que mediante la obtención de un valor aleatorio positivo acotado por un intervalo que no varia su tamaño con una cifra máxima y otra mínima modificable según el valor de tus estadísticas, dañarán al enemigo (en caso del ataque), aumentarán la salud del jugador (en caso de la curación) o añadirán dicho valor al atributo que se quiera mejorar (en caso de los modificadores).

Enemigo

Las funciones incluidas en la librería del enemigo son análogas a las del jugador aunque con ciertas diferencias. La diferencia más notoria es sin duda la función de ataque del enemigo ya que cuenta con una diversidad de posibilidades, variables y estadísticas diferentes que influyen en lo mismo, el daño final que hace dicho ataque. Esta función tiene que lidiar con el poder que tenga el enemigo en ese preciso instante de la partida así como la salud del jugador, el nivel de evasión que te otorga una probabilidad de esquivar el golpe e incluso la defensa que bloquea un porcentaje del daño recibido según cuantos puntos de defensa tenga tu personaje. La diferencia principal entre el jugador y el enemigo es que el enemigo posee la capacidad de influir de manera negativa en las estadísticas del jugador, queríamos centrar al enemigo en algo bastante más ofensivo que el jugador. La toma de decisiones también es distinta, como dije anteriormente, hemos creado una especie de inteligencia artificial que otorga al enemigo de la capacidad de tomar decisiones inteligentes en ciertos momentos de la partida. El funcionamiento de estas estrategias viene regulado por un sucesión de sentencias condicionales en las cuales se plantean muchos de los posibles casos que pueden darse y para los que conocemos una decisión inteligente de tal manera que en ciertas ocasiones, podrá identificar cuando es mejor decisión atacar, curarse o modificar sus estadísticas o las del jugador. Todo ello con igual probabilidad de elección. En caso de elegir modificar sus atributos, inicialmente, se comporta igual que en el caso anterior teniendo cada elección la misma probabilidad de ser elegida hasta el momento en el cual alguno de esos atributos llega al máximo valor elegido. Un ejemplo de ello sería que si se llega a dar el caso que el enemigo sube su ataque al nivel máximo, que no gaste más turnos en seguir subiéndolo porque el valor está capado y por más que lo siga aumentando no va a variar. Del msimo modo ocurre con el aumento de curación y del modo inverso con las reducciones de estadisticas que causa el enemigo al jugador, si el jugador tiene la curación a nivel 0, el enemigo nunca tomará la decisión de seguir reduciendo su curación.

Partida

La librería "partida" sostiene las bases del juego ya que usa las librerías del enemigo y del jugador haciéndola transversal a todas las demás librerías porque en ella se encuentran las funciones responsables de el sistema de turnos, como realizar las acciones además de la inteligencia artificial del enemigo (código visible en la imagen). En ella se encuentra la toma de decisiones del jugador y del enemigo así como las narrativas y los 3 posibles finales.

Hemos puesto un gran esfuerzo en este trabajo y esperamos que sea de vuestro agrado.

Este comentario queda fuera de la wiki pero queríamos aclarar que nuestro diagrama de flujo no muestra al 100% nuestro programa, hemos cogido los bucles y sentencias condicionales mas destacados del programa para que no se haga pesado a la vista ni muy extenso pero quedan muchos condicionales con funciones muy específicas dentro del programa que no se muestran en el flujo. Creemos que hacer el flujo de manera general señalando las acciones mas importantes y las medianamente importantes dejando en un segundo plano aquellas que solo influyen en una pequeña acción y además, algunas de ellas ni siquiera se ejecutan durante un juego normal porque simplemente no se dio el caso en esa partida. Un ejemplo de ello serían todos los "if" que tiene el enemigo por si acaso se da una determinada situación para que el sea capaz de lidiar con ella.

Clone this wiki locally