¿Como se desarrolla la inteligencia artificial de un juego?

Bueno, esto es algo que más de una vez me he preguntado ¿como se hace?.

Hay varios "tipos de inteligencia", las cual catalogaría como las siguientes:

1 - Acción del jugador o proximidad ante un objeto -> movimiento u acción programado
2 - Juegos tipo "4 en raya" -> acierto / error en todas las posiciones posibles.

* Si come ficha -> No realizar acción

* No come ficha -> Movimiento de ficha, y verifica si puede comer ficha sin ser comido. En caso de ser comido, se valorará el rango de la ficha comida con respecto a la ficha que se está usando ahora mismo.

3 - Juegos de lucha:

Aquí está la que posiblemente traiga más problemas a la hora de crear un juego de lucha. Yo pienso que debe ser de la siguiente forma:


Primer paso:

Verificar la proximidad del jugador. Si se está muy lejos, ha de acercarse hasta cierta distancia programada. Una vez llegado a ese punto, dependiendo del nivel de dificultad, se reaccionará con más o menos velocidad. En caso de estar en un nivel de dificultad muy alto, se atacará rapidamente con una tanda de ataques aleatorios (o no tanto, dependiendo de factores como vida, etc)

Segundo paso:

Si se está cerca del jugador y este ha iniciado un ataque, dependiendo del nivel de dificultad, de más bajo a mas alto, se puede:

- No hacer nada (o muy pocas veces)
- Defenderse o bien saltar hacia atrás
- Hacer algún tipo de contramedida, como atacar por las piernas o saltar y golpear desde arriba (si se está a una distancia proxima pero lo suficienmente lejana, si se está cerca, seguramente se responderá con cubrirse seguido de un ataque rápido)

Tercer paso:

Para añadir cierta aleatoridad y dar la sensación de que se lucha contra un adversario dificil de batir y no un pelele, pueden programarse una serie de acciones si el jugador realiza cierta combincación de botones, cosas como lanzar todo el día hadokens o bien estar golpeando en un rincón al contrincante sin dejar ni moverse.

La aleatoriedad y velocidad de respuesta a un ataque igualmente pienso que ha de estar basada en el nivel de dificultad. Vamos a poner que estamos jugando al SSF2. Si lo pones con tan solo una estrella de dificultad, tardará en responder a los ataques por ejemplo 400ms. Si lo pones en el tope de dificultad, tardará 150 ms. También están las respuestas a cosas tan tipicas como saltar y acto seguido golpear por arriba, podiendose repeler con un puñetazo por lo alto xD.

Cuarto y último paso:

Esto es algo importante, y es que apartir de cierta cantidad de tiempo, las acciones sean llevadas más rápido, teniendo en cuenta el nivel de dificultad. Vamos, lo que haría un jugador si tiene menos vida y va perdiendo, el intentar quitarle todo la vida al contrincante antes de que se acabe el tiempo, usando fatalities, combos, etc.


Si, tiene que ser bastante díficil diseñar estas cosas, luego venimos nosotros y nos fundimos estas cosas que han sido diseñadas en semanas xDDDDDDDDD.

¿Existen algún tipo de documento por la red que hable sobre esto, o algún manual?
Por simplificar se podria decir que tienes 4 tipos de inteligencia que vienen a ser:

Ruta prefijada sin interaccion_

Un enemigo que se mueve de x punto a y punto sin hacer nada mas que eso, desplazarse.
El movimiento se podria implementar con una traslaccion directa del punto x al y en linea recta y a cascarla xD
O mediante diferentes puntos intermedios prefijados entre x e y y el personaje ira desplazandose en linea recta entre cada uno de ellos que viene a ser como lo primero pero en seccion mas cortas y dando mas sensacion de dinamismo.
Ademas de tambien tener la opcion de programar mediante algun algoritmo, como pueda ser por ejemplo haciendo uso de "rayos" o algun calculo mas "manual", un logica que busque siempre el camino mas corto. Esta ultima se podria mejorar añadiendo que en caso de encontrarse el personaje por el camino seleccionado con algun obstaculo, que vuelva a evaluar opciones y seleccione otra alternativa a la actual, etc... mejoras hay muchas.

PD: Quien dice movimiento dice ataque continuado siguiendo cierto patron, sin necesidad de movimiento en si del enemigo pero claro esta si de los proyectiles etc..

Causa efecto_

Se desplazada como el de la clase anterior pero en caso de que el personaje pase a x distancia de el o que ocurra cierta accion que se use a modo de detonante, el enemigo realizara una accion determinada como pueda ser enfocar al personaje y disparar o correr hacia este con un algoritmo basico de persecucion etc..

Y despues podria hacerse que o bien siga de forma indefinida al prota o que al de cierto tiempo o cuando el prota se escape, vuelva al punto mas cercano de su "ruta" de movimiento o al punto inicial o final de la misma y volvemos a empezar. Este metodo es el mas tipico de los fps antiguos y no tanto, mientras que a dia de hoy es similar solo que cuentan con muuuuuchos caminos prefijados ademas de cierto componente "libre" por lo que el resultado da mayor sensacion de inteligencia y razonamiento...

PD: Tambien puede existir causa efecto sin necesidad de que el enemigo tenga que desplazarse. Tipico enemigo ventosa succionadora del techo del Half-Life etc...

Aprendizaje desde cero_

La "maquina" ira guardando en una base de datos unos datos, valga la redundancia, sobre las jugadas/movimientos/acciones/.. que realiza el jugador y si o si la primera partida el enemigo o adversario puede que parezca bastante cortito y sera relativamente facil ganar pero en posteriores partidas y segun mas se juegue, la maquina seleccionara en cada ocasion la mejor alternativa para cada accion tras un estudio "a toda hostia" de los datos guardados, llegando al punto de poder igualar o superar al jugador.

Aprendizaje con base_

Lo mismo que el anterior pero de base el enemigo ya tiene un comportamiento mas o menos currado, casi seguro uno de los tipos de ia ya comentados arriba y este comportamiento que trae de serie mas lo que ira "aprendiendo" haran del enemigo la opcion mas realista y variada en decisiones.

El resto no dejan de ser variantes de estos pero mas o menos curradas...eso ya depende del tiempo y presupuesto xD
1 respuesta