Está en la página 1de 22

Introducción a la

programación de
videojuegos
David Erosa García
Luis Rodero Morales

ascii@talika.eii.us.es tf2@talika.eii.us.es
Inteligencia Artificial

Ahora toca pensar...


Introducción
Problemática

• Antes de la generalización del uso de técnicas de IA, los PNJ de los juegos
se comportaban de una manera fija:

• Desplazamientos según una ruta predeterminada o al azar.

• Disparos aleatorios.

• Incapacidad de evaluar situaciones de peligro.

• Como consecuencia, el juego resultaba monótono y predecible.

• Ésto hace que el jugador no se sienta retado por el juego.

3
Introducción
Soluciones

• Como solución eficaz se emplean técnicas como:

• FSM (Finite-State Machines).

• Búsqueda de caminos.

• Heurística.

• Algoritmos genéticos.

• Redes neuronales.

• Lógica difusa.

• Como introducción a la IA, nos centraremos en los dos primeros puntos.

4
Finite State Machines
Introducción

• Una máquina finita de estado es una entidad abstracta compuesta por un


conjunto de estados y de transiciones entre dichos estados.

• Las transiciones se producen según unas condiciones que dependen del


exterior y opcionalmente del estado actual.

• La máquina generará una serie de acciones según el estado actual.

• Se usan generalmente para manejar unidades a nivel individual.

5
Finite State Machines
Introducción

• Para diseñar una FSM, tenemos que tener en cuenta todo lo que queremos
que haga, y de qué manera.

• Según lo anterior, hemos de agrupar acciones y condiciones de activación


(para obtener los estados).

• Para implementar una FSM existen varios métodos.

• Nosotros usaremos una estructura simple:

• Tenemos una interfaz fsmbase, que consiste en:

• Una función think(), que se encarga de comprobar las condiciones y


cambiar de estado.

• Una función update(), que produce las acciones correspondientes al


estado actual.

6
Finite State Machines
Ejemplos de FSM's

• Un ejemplo básico:

Parado
No

¿Lo veo?

Cazar

No
¿Lo veo? No

¿Cerca?

Atacar

7
Finite State Machines
Ejemplos de FSM's

• Tenemos una FSM que representa a una torreta automática, con las
siguientes características:

• Está fija en el suelo e inicialmente está inactiva.

• Tiene un radar que barre una circunferencia de radio r.

• Cuando un jugador entra en el área del radar, se activa el modo de


búsqueda del objetivo.

• Cuando fija el objetivo, dispara.

• Si pierde el objetivo, intenta alinearse de nuevo con él.

• Si el objetivo se encuentra fuera del alcance del radar, vuelve al estado de


inactividad.

8
Finite State Machines
Ejemplos de FSM's

• Tenemos otra FSM que representa a las balas que dispara la torreta.

• Tienen las siguientes características:

• Cuando son creadas, tienen inicialmente un estado “volando”, en el que lo


único que hacen es avanzar según la dirección con que las hayamos
inicializado.

• Si mientras están volando tocan al jugador, cambiarán al estado “choque”,


y consecuentemente al estado “muerta”.

• Si se salen de la pantalla, pasarán al estado “muerta”.

9
Finite State Machines
Ejemplos de FSM's

• Como propuesta, podemos diseñar una FSM que implemente otro tipo de
bala con las cualidades de la anterior y las siguientes:

• Cuando se crean, se les pasa un objetivo, e inicialmente están en el


estado “volando”.

• Mientras estén volando, ajustarán su ángulo para alinearse con la posición


del jugador.

• Si pasado un tiempo no han colisionado con el jugador, dejarán de


recalcular su ángulo.

10
Búsqueda de caminos
Introducción

• Para conseguir un comportamiento realista en un actor, este debe ser capaz


de moverse por el mundo con cierta “conciencia”.

• El grado de inteligencia a la hora de buscar una ruta depende de la


aplicación y del tipo de actor.

• Ejemplo:

• En el juego Pac-Man hay cuatro tipos de inteligencia de los fantasmas:

• Cazador, que intenta llegar al jugador por el camino más corto.

• Interceptor 1, intercepta al jugador en los cruces.

• Interceptor 2, intercepta al jugador usando los túneles.

• “Roamer”, que se mueve al azar por el escenario.

11
Búsqueda de caminos
Crash and Turn

Mientras no se llegue al destino


{
- Intenta avanzar en linea recta hasta el destino.
- Si se produce una colisión con un obstáculo
{
- Elegir uno de los dos lados (izquierda o derecha).
- Rodear el obstáculo hasta que volvamos a tener
“linea de visión” con el destino.
}
}

12
Búsqueda de caminos
Algoritmo de Dijkstra

• Útil cuando podemos describir nuestro mundo como un grafo.

• Los vértices equivalen a zonas o regiones del mundo.

• Las aristas tienen un peso que representa la distancia entre los vértices que
unen.

• Desde el nodo de origen se explora el grafo siguiendo las aristas de menor


peso.

13
Búsqueda de caminos
A*

• El algoritmo A* encuentra el camino entre dos puntos en un mapa.

• El camino encontrado (si existe) es el más corto.

• Es un algoritmo dirigido (intenta seguir el mejor camino posible).

• Los “componentes” del algoritmo son los llamados nodos.

• Un nodo está compuesto por 3 atributos:

• G: Es el coste desde el nodo de inicio al nodo.

• H: Coste estimado hasta el nodo destino.

• F: Representa lo bueno que es el nodo.

• Para encontrar el mejor camino, el algoritmo debe encontrar los mejores


nodos del mapa. Esto se consigue calculando F:
F=G+H

14
Búsqueda de caminos
A* - G

• G es la distancia desde el nodo al nodo inicial.

• Puede tener distintos valores según la topología del mapa

• P. ej., un movimiento diagonal vale 14 y uno horizontal o vertical, 10.

G = 24 G = 14 G = 10 G = 14 G = 24

G = 20 G = 10 G=0 G = 10 G = 20

G = 24 G = 14 G = 10 G = 14 G = 24

15
Búsqueda de caminos
A* - H

• H es la estimación al nodo destino. Es la llamada “Heurística”.

• Nosotros usaremos la distancia Manhattan x 10 .


H = | x2 – x1| + | y2 – y1| * 10
1 2 3 4 5 6

H = 60 H = 50 H = 40 H =30 H = 20 H = 10 1

H = 50 H = 40 H = 30 H = 20 H = 10 H=0 2

H = 60 H = 50 H = 40 H = 30 H = 20 H = 10 3

16
Búsqueda de caminos
A* - F

• El camino final se construye calculando en cada iteración la 'F' del mejor


nodo vecino y siguiéndolo.
1 2 3 4 5 6
G=0 G = 48 G = 58 -> 52 G = 62 G = 72

H = 70 H = 50 H = 40 H = 30 H = 20 1
F = 70 F = 98 F = 98 -> 92 F = 95 F = 94

G = 10 G = 44 -> 38 G = 82 ->76

H = 60 H = 40 H = 10 2
F = 70 F = 84 -> 78 F = 92 -> 86

G = 20 G = 30 -> 24 G = 34 G = 80 G=-

H = 50 H = 40 H = 30 H = 10 H=- 3
F =70 F = 70 -> 64 F = 64 F = 81 F=-

17
Búsqueda de caminos
Caminos - A*

18
Búsqueda de caminos
Caminos - A*

• Así, el algoritmo A* presenta ventajas e inconvenientes:

• Ventajas:

• Siempre que exista, encuentra el camino más corto hasta el destino.

• Inconvenientes:

• Tiene un coste computacional muy elevado.

• El camino que encuentra puede ser demasiado perfecto.

19
Búsqueda de caminos
Region-Based A*

• Se basa en usar regiones de más alto nivel de abstracción para realizar las
búsquedas.

• Dividir el mapa en zonas conectadas por aristas entre las que no existan
obstáculos.

• Especialmente útil en regiones convexas, pues podemos movernos entre


dos puntos sin encontrar obstáculos.

• Es útil combinar esta técnica con “Crash and Turn”.

• En una habitación cuadrada llena de columnas “cuadradas” se puede


navegar usando “Crash and Turn”.

• Para pasar de una habitación a otra no contigua, se usa Region-Based A*.

20
Búsqueda de caminos
Iterative-Deepening A*

• Otra alternativa para reducir los requerimientos de memoria y CPU del


algoritmo A*.

• Consiste en calcular la ruta en porciones, de forma que no hay que


examinar el árbol de una sola vez.

• El cálculo de la ruta se interrumpe cuando el coste total excede de un límite


máximo.

• Como ejemplo:

• Se comienza con un coste máximo de 10.

• Cada vez que avancemos 10 nodos, interrumpimos la búsqueda.

• Cuando corresponda, continuar desde el último nodo.

21
EOD

• Próximo día: 3D

• Lo estábais deseando, eh? :P

22