Creando Arrow Hunter 16: Rediseño de la IA, análisis funcional

ZX Spectrum

Comencemos a bajar a tierra toda esta lógica

Variables con que contamos

  • Dificultad Global (variable P)
  • Numero de disparos recibidos por enemigo (variable PARAMB del sprite, P marca el maximo de impactos antes de morir)
  • Numero de Enemigos en Pantalla (variable E)
  • Número de Flechas Disparadas en Pantalla (Variable F)
  • Número de nivel Actual (variable L)
  • Número de Vidas del Jugador (variable LIVES)

Energía

  • Enemigos: Tomaremos como referencia 1..10 y para calcularla restaremos P - PARAMB
  • Jugador: Tomaremos directamente LIVES como valor en un marco de 1..10

El rango indicado en cuanto a la energía dependiente del nivel de dificultad, supone una vida máxima de 10, por lo que la dificultad debe crecer a un ratio tal que la dificultad máxima sea de 10 (en 50 pantallas aumentaria una unidad cada 5 pantallas)

Velocidad de reacción de los enemigos

Usaremos la técnica de "reaccionar cada x frames" en un rango 1..10. Para determinar cada cuantos frames restaremos la energía del enemigo de 15 de forma que el rango de reaccion quede entre 5..14 frames.

Con esto lograremos que la reacción de los enemigos disminuya (linealmente) en función del agotamiento debido al daño recibido.

Personalidad de los enemigos

En la descripción narratíva establecimos los parámetros:

  • Agresividad .- Definiremos un nivel de agresividad natural entre 0(pacifista)..10(Berserk) para cada tipo de enemigo.
  • Filia al Agua .- Una filia al agua de 0 implicara una filia al fuego máxima, la neutralidad es 5. Será un valor definido por cada especie de enemigo. Tendra tendencia a permanecer en el medio que le es afin y huir del que no, y el daño recibido por el que no es su preferencia será propircional a su filia.
  • Gregario .- De nuevo estableceremos un valor en el rango 0..10, lo cual determinará cuan interesada está la especie en formar manadas, lo cual representaremos igualando o no las direcciones de dos enemigos cuando colisionen en funcion de ello y del estado de la partida. Para representar liderazgo, el enemigo mas debil seguirá al mas fuerte, y en caso de igualdad, el que detecta la colisión "reclutará" al otro para su causa. Esto deberia generar un cardumen muy dinamico y tanto más peligroso cuantos más enemigos lo formen.
  • Espacio .- Se define por especie una serie de valores en el rango 0..10 donde 0 es la menor filia por espacios abiertos. Cuando un emeigo se ve forzado a salir de su area de confort, tenderá a huir o luchar en función de su energía, su agresividad y del estado del jugador (tanto vida como capacidad de ataque).

En el próximo capitulo escribiresmos esto en pseudocódigo integrándolo con la lógica y tipos de movimiento ya existentes.

Nos acercaremos de ese modo un nivel mas a la implementación real. ¡Al lio!

    Bruce Lee dice Be generous my friend!
    Bruce Lee dice Be generous my friend!

    Bruce Needs YOU...

    Ayúdame a mantener el proyecto aportando a través de Paypal.

    Me gustaría cubrir los gastos de la propia web, con vuestra inestimable ayuda, el mayor tiempo posible.

    Es algo totalmente voluntario, ahora bien, dile tu a Bruce que no vas a aportar, que yo no me atrevo xD ...

    ¡Gracias por estar ahí!


Quizá te interese leer más sobre Arrow Hunter

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>