funciones que ganan partidas

18
FUNCIONES QUE GANAN PARTIDAS Trabajo Final Coordinador: Álvaro Espinosa Marlasca. Grado en Ingeniería de Computadores [email protected] David Javier Morán Márquez. Grado en Ingeniería de Computadores [email protected] Francisco Javier Romero Paris. Grado en Ingeniería de Computadores [email protected]

Upload: truongkhanh

Post on 29-Jan-2017

240 views

Category:

Documents


1 download

TRANSCRIPT

FUNCIONES QUE GANAN

PARTIDAS Trabajo Final

Coordinador:

Álvaro Espinosa Marlasca.

Grado en Ingeniería de Computadores

[email protected]

David Javier Morán Márquez.

Grado en Ingeniería de Computadores

[email protected]

Francisco Javier Romero Paris.

Grado en Ingeniería de Computadores

[email protected]

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 2

INTRODUCCIÓN

En todos los videojuegos, ya se han desde los primeros en crearse

hasta los más actuales, comprobamos la existencia de “bugs” o fallos

en los personajes controlados por el jugador o por la máquina en

cuestión, personajes controlados por la IA (Inteligencia Artificial),

respecto a su movimiento, aunque bien es cierto que hay más tipo de

“bugs”.

Estos fallos se deben a errores de los personajes en sus funciones y

algoritmos de movimiento. En este trabajo veremos cómo se desplazan

los personajes y explicaremos las funciones y los algoritmos que

utilizan para hacerlo. Para tener una visión más clara de este tipo

de movimientos, los explicaremos usando videojuegos conocidos como

ejemplos.

INDICE:

1. Empezando con el movimiento: cambios en coordenadas

1.1 Primeros juegos: Pong y Space Invaders

2. Movimientos controlados por la IA. Algoritmo de Dijkstra

2.1 Algoritmo de Dijkstra en videojuegos: Pac-Man

2.2 Evolución del algoritmo de Dijkstra: Algoritmo A*

2.3 Algoritmo A* en juegos en 3D: Age of Empires

3. Un enfoque más actual hacia el algoritmo A*.Aumentando la

dificultad.

4. Capturar el movimiento: el futuro del movimiento en videojuegos

5. Bibliografía

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 3

1. EMPEZANDO CON EL MOVIMIENTO: CAMBIOS EN LAS COORDENADAS

Para empezar a hablar sobre el movimiento en un videojuego, debemos

tener claro que hay distintos tipos de movimientos; como por ejemplo

el desplazamiento de nuestro personaje o el movimiento corporal del

mismo. En este trabajo se va a tratar sobre el primero.

El desplazamiento de objetos (personajes, animales, u otras cosas)

en un juego a un nivel lógico-bajo consiste en asignar unas

coordenadas iniciales “X” e “Y” (si el juego es 2D) y “X”,”Y” y “Z”

(si son juegos en 3D) e ir variando las mismas mientras asignamos a

estas unas imágenes que iremos haciendo aparecer y desparecer según

toque, para crear una visión de desplazamiento. En los primeros

juegos programaremos para que los jugadores enemigos u otros objetos,

cambien de una forma más o menos prediseñada estas variables

iniciales.

Cuando llegue la Inteligencia Artificial (IA) a los videojuegos, se

usaran algoritmos más complejos para que estos personajes se muevan

“individualmente”, pero en resumidas cuentas, siguen cambiando las

coordenadas.

Todos hemos jugado al juego de hundir la flota, en el que tenemos

un tablero dividido en cuadrados con coordenadas asignadas (números y

letras). Colocamos los “barquitos” en cualquiera de ellas, es decir

les asignamos a cada barco unas letras y unos números, que podríamos

identificar como coordenadas “X” e “Y”. En los videojuegos pasa

exactamente lo mismo. Para empezar a explicar cómo se mueven objetos

en los videojuegos, vamos a empezar por los primeros videojuegos, los

más simples, creados en dos dimensiones (2D). En ellos la pantalla

queda dividida por las coordinadas “X” (de izquierda a derecha) e “Y”

(de arriba abajo).

Cuando programamos el objeto (nos referimos con objeto a cualquier

evento que queramos desplazar ya sean personas, cosas, imágenes,

etc.), solo tenemos que asegurarnos de que esas coordinadas cambien

cada “t” tiempo. El desplazamiento se verá visualmente porque la

imagen con la que representamos ese objeto aparecerá en las

coordenadas correspondientes (desapareciendo de las anteriores, dando

la sensación de desplazamiento).

1.1 PRIMEROS JUEGOS: PONG Y SPACE INVADERS

El primer juego programado que se hizo fue el conocido “PONG”,

el juego consiste en simular un partido de tenis, donde el jugador y

su adversario son representados por una barra y se van lanzando una

pelota de tenis. Representando el movimiento anteriormente descrito

arriba, vamos a centrarnos en el movimiento que hace la pelota.

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 4

La pelota va cambiando de

coordenadas X e Y con una velocidad

constante y al chocar con una de las

barras, se multiplican las coordenadas por

(-1), por lo que la pelota se refleja, y

sale en la dirección y sentido contrario

de donde provenía. Las dos funciones que

se tienen que programar son tan simples

como:

f(x)=i

f(y)=j

Donde “x” e “y” van cambiando de valor constantemente, haciendo que la

pelota se desplace de un lado hasta el otro.

Otro de los grandes primeros juegos es el famoso “Space

Invaders”. “Space Invaders” es uno de los primeros juegos shoot 'em

up. Es uno de los videojuegos más importantes de la historia. Su

objetivo es eliminar oleadas de alienígenas con un cañón láser y

obtener la mayor cantidad de puntos posible. “Space Invaders” es un

“matamarciano” clásico en dos dimensiones. El jugador controla

un cañón que puede moverse a la derecha o izquierda y un botón de

disparo. Tiene que ir destruyendo los extraterrestres invasores. Vamos

a centrarnos en el movimiento de estos “marcianitos”.

Al igual que el “PONG”, Básicamente

su movimiento consiste en cambiar las

variables X e Y de un objeto, que en este

caso es una imagen, que se moverá bajando la

pantalla. Es decir empezará desde el punto

más alto de las “Y” (arriba de la pantalla)

y se moverá hacia abajo de la pantalla. A su

vez este objeto, se va desplazando hacia la

derecha (empieza a la izquierda) y cuando

llegue a la izquierda, se desplazará a la

derecha. Cabe decir, que cuando el primero

de los objetos de la fila de los marcianitos

choque con la pared de la pantalla, llegue a la coordenada “X” máxima,

es cuando baja una posición en la coordenada de las “Y”.

El juego va incrementando su velocidad a medida que baje,

haciendo que cada vez se muevan más rápido los marcianitos por las

coordenadas. En cuanto la posición de los marcianitos llega a “Y”=0 (o

a la coordenada mínima de Y que programemos), se acabará el juego.

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 5

Las funciones que tienen que implementar el juego son:

f(y)= f(y) -1 ( Cada vez que toque cambiar las coordenadas de las

“Y” se reducirá en uno )

f(x)= f(x)+1 (cuando llega al tope, al máximo de las “x”, al igual que

en el “PONG”, vuelve a modificar sus variable multiplicando la

coordenada por -1, por lo que se convertiría en la función f(x)=f(x)-

1)

Al principio del juego, se le asigna a cada f(x) y f(y) un valor

inicial, tal que:

f(x)=i (donde “i” es la coordenada mínima de las “x”)

f(y)=j (donde “j” es la coordenada mínima de las “y”)

2. MOVIMIENTOS CONTROLADOS POR LA IA. ALGORITMO DE DIJKSTRA

Hemos conseguido que en los videojuegos se cree un movimiento

programado, pero, todos sabemos que en la vida real, por muchas

razones los movimientos de los objetos no siempre son los mismos, hay

eventos que lo modifican. Es por eso, que existe una necesidad de que

el movimiento pueda cambiar en tiempo de ejecución del juego y esto lo

conseguimos implementando una Inteligencia Artificial en los objetos

que creamos, para que decida, en tiempo de ejecución, que movimiento

hacer.

Como ya hemos comentando anteriormente, lo que hará la IA será a

nivel lógico más básico cambiar el objeto de coordenadas, no obstante

estos cambios vienen definidos por el camino que tiene que seguir ese

personaje que se calcula en base de algún algoritmo.

Uno de los primeros tipos de videojuegos en implementar una IA, es

el tan famosos “PAC-MAN”. En este juego tienes unos “fantasmitas” que

te van persiguiendo por toda la pantalla. El algoritmo usado en este

juego es una implementación del algoritmo de Dijkstra, que sirve para

calcular el camino más corto (con el mínimo coste) entre los

“fantasmitas” y pacman. “PAC-MAN” consta de cuatro fantasmitas y cada

uno de esos tiene una variación de la implementación de este

algoritmo. Además uno de los puntos más notables e interesantes que

tiene el juego, es que estos algoritmos cambian dependiendo del estado

de los fantasmitas, por ejemplo, normalmente los fantasmitas van hacia

donde se encuentra pacman, pero cuando pacman come cierta fruta, los

fantasmas cambian de estado (es cuando se vuelven azules) y cambian su

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 6

algoritmo, para alejarse de él. A continuación vamos a ver que es el

algoritmo de Dijkstra y cómo funcionaria en este juego.

El algoritmo de Dijkstra se encarga de calcular el camino mínimo

entre dos puntos, que forman parte de un grafo, que representa el

mapa de un videojuego.

Ese camino está formando por un número de vértices unidos entre sí

por aristas de diferentes costes. Por coste nos referimos a la

distancia entre los vértices (aunque en un videojuego puede estar

definido por cualquier otro parámetro), referenciado por w(u,v); donde

“u” y “v” son los vértices.

La idea principal consiste en ir explorando todos los caminos que

parten del vértice origen (u) hasta llegar al vértice final (v) y

coger el que tenga el menor coste.

Se construye un conjunto de vértices al que se añade uno más en

cada iteración. Este conjunto (S) es el conjunto de vértices para los

que se ha obtenido un camino de longitud mínima desde el vértice de

partida (u).

Cuando añadimos a este conjunto, el vértice al que queremos llegar,

el algoritmo finaliza.

El algoritmo de Dijkstra se calcula aplicando en cada iteración la

siguiente fórmula, que es para todos los nodos del grafo.

Lk (v) = mín{Lk−1(v), Lk−1(u) + w(u, v)}

Donde Lk es el coste del camino más corto, resultado de resolver

el algoritmo, que es igual al mínimo entre el camino más corto

anterior a “v”, y la suma del camino más corto al punto actual (u) y

el coste de ir desde “u” a “v” (w).

Los vértices en cada iteración se etiquetan con el camino mínimo

desde el punto inicial hasta llegar a ese punto. A continuación,

aplicaremos el algoritmo de Dijkstra en el clásico videojuego “PAC-

MAN”.

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 7

2.1 ALGORITMO DE DIJKSTRA EN VIDEOJUEGOS: PAC-MAN

Cada uno de los números que vemos en la imagen se corresponde al

coste de cada arista. Las letras en morado identifican a los vértices.

Tomamos como ejemplo el recorrido que seguiría el fantasmita rojo

(Blinky) hacia la posición donde nos encontramos nosotros (pacman).

Cabe decir, que realmente el recorrido posible sería uno donde se

incluyeran toda la pantalla, pero para simplificar el ejemplo, hemos

cogido solo los caminos señalados en rojo.

Como primer paso, indicamos el vértice origen, que en nuestro caso es

Blinky. El vértice final es el propio pacman.

Paso 0:

El algoritmo comienza en el punto “X”. El conjunto S (conjunto que

contiene los vértices para los que se ha calculado el camino mínimo),

en este primer paso, está vacío. Como empezamos en el punto “X”, el

coste para llegar a este punto es 0 y, como aún no hay un camino

posible, el coste para los demás puntos es ∞. Matemáticamente se

representa de la siguiente manera:

• S0 = ∅ • L0(x) = 0 • L0(a) = L0(b) = L0(c) = L0(d) = L0(e) = L0(f) =L0(g)= L0(h) =L0(i)=

L0(j) = L0(k)= L0(l) = L0(z) = ∞.

Paso 1:

A continuación, ya podemos comenzar a recorrer el camino. Ahora al

conjunto S le añadimos el vértice “X”. Aplicando el algoritmo podemos

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 8

ver el coste del camino total, tomando ahora como referencia el

vértice “X” que es el que acabamos de introducir en el conjunto S.

Aplicando las fórmulas nos sale que el coste mínimo es el que va desde

“X” a “A”, porque es el único que se puede calcular, ya que los a

demás, como no tiene un camino directo tienen coste ∞. Por ello, se

elige el vértice “A” para introducir en el conjunto S2 (en el

siguiente paso).

•S1 = {x} •L1(a) = mín{L0(a), L0(x) + w(x, a)} = mín {∞, 1} = 1. La etiqueta de “A”: 1(x) • L1(b) = L1(c) = L1(d) = L1(e) = L1(f) =L1(g)= L1(h) =L1(i)= L1(j) =

L1(k)= L1(l) = L1(z) = ∞.

Paso 2:

Al igual que en el paso anterior, sólo hay una única opción para

llegar al siguiente nodo “B” de forma directa. Aplicando el algoritmo

tenemos que:

• S2 = {x, a} • L2(b) = mín{L1(b), L1(a) + w(a, b)} = mín{∞, 1+1} = 2. La etiqueta de “B”: 2(x,a)

• L0(c) = L0(d) = L0(e) = L0(f) =L0(g)= L0(h) =L0(i)= L0(j) = L0(k)=

L0(l) = L0(z) = ∞.

Donde la etiqueta B es 2(x,a) , que quiere decir que para ir desde “X”

hasta “B”, tienes que recorrer X – A - B y que ese camino tiene una

distancia de 2. Por otra parte, como desde el vértice A no tiene otro

camino directo hacia los demás vértices, sus costes seguirán siendo

infinitos.

Paso 3:

En este caso ya si existen varias posibilidades de caminos a seguir,

por lo que deberemos aplicar Dijkstra para ambos casos y elegir el que

nos dé un coste menor.

Para poder ir desde el punto “B” al punto “C” existen dos caminos

posibles pero, uno de ellos tiene un coste mayor. Lo comprobamos a

continuación:

• S3 = {x, a, b} • L3(d) = mín {L2(d), L2(b) + w(b, d)} = mín{∞, 2 + 3} = 5. Etiqueta de “d”: 5 {x, a, b} • L3(c) = mín {L2(c), L2(b) + w(b, c)} = mín{∞, 2 + 1} = 3.

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 9

Etiqueta de c: 3(x, a, b)

• L0(e) = L0(f) =L0(g)= L0(h) =L0(i)= L0(j) = L0(k)= L0(l) = L0(z) = ∞.

Paso 4:

• S4 = {x, a, b, c} • L4(d) = mín {L3(d), L2(b) + w(b, d)} = mín{5, 2 + 3} = 5. • L4(e) = mín {L3(e), L3(c) + w(c, e)} = mín{∞, 3 + 3} = 3. • L0(f) =L0(g)= L0(h) =L0(i)= L0(j) = L0(k)= L0(l) = L0(z) = ∞.

Esto se repite sucesivamente hasta que al conjunto S se le tiene

que añadir el nodo “Z”, momento en el que terminaría el algoritmo,

quedando como resultado el camino señalado con verde, que es el camino

más cortó entre el fantasma rojo y pacman que sigue los vértices X-A-

B-D-L-Z con una distancia de 8.

Lo interesante que tiene este videojuego, es que contamos con 4

fantasmitas y cada uno implementa este algoritmo con algunas

variaciones que modifican el camino que cogen para moverse. Así por

ejemplo, el fantasmita Inky (el azul), en vez de buscar el camino más

corto para llegar a pacman, creará un vector al punto donde se

encuentra éste y multiplicará ese vector x2, su algoritmo será el

camino más corto a ese vector calculado, que se irá recalculando cada

vez que se mueva el pacman.

2.2: EVOLUCIÓN DEL ALGORITMO DE DIJKSTRA: ALGORITMO A*

Ya hemos visto como con el algoritmo de Dijkstra podemos crear

un movimiento y que esté varíe dependiendo de la posición en la que se

encuentra un objeto (pacman). No obstante este algoritmo se queda algo

limitado al ir evolucionando los gráficos en los videojuegos y tener

ahora éstos en 3 Dimensiones (3D), por lo tanto ahora tendremos

funciones de dos variables f(x,y)= z, para poder cambiar la posición

del personaje/es en altura, anchura y profundidad en el escenario.

Al ser escenarios que simulan terrenos, para ir de un punto a

otro, no basta con calcular la mínima distancia, hay que tener en

cuenta si el terreno es elevado, si es liso o abrupto… (elementos que

condicionan el coste de cada camino), esto hace que los costes

cambien, ya que se intenta emular un movimiento más cercano a la

realidad ( en la vida real, si tenemos que elegir entre subir una

montaña o ir por el llano, generalmente iremos por este segundo

camino, porque nos supone un menor esfuerzo para nuestro cuerpo, y ya

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 10

que esta decisión la tiene que emular el videojuego, tendremos que

tener en cuenta estas cosas).

Es por esto que se desarrolla el algoritmo A*, que es una

evolución de este algoritmo de Dijkstra, para calcular el camino más

corto con el mínimo coste. Pero es un algoritmo que está pensando

principalmente para ser aplicado en videojuegos. La técnica empleada

en los videojuegos que usan este tipo de algoritmos se determina por

el término “Pathfinding”, que significa búsqueda del camino.

Para explicar este algoritmo nos basaremos en uno de los juegos

más básicos y conocidos que lo implementan, como el videojuego “Age of

Empires”, un videojuego de estrategia en tiempo real, donde desplazas,

o la IA desplaza tropas desde un punto a otro.

Algoritmo A*:

El algoritmo A* usa la siguiente función para calcular el camino

más corto: f(n)=g(n)+h’(n) donde h’(n) representa el valor heurístico

(un valor estimado) del coste que tiene ir desde el nodo a evaluar

hasta el nodo objetivo. Y g(n), es el coste (real) que tiene llegar

hasta el nodo a evaluar desde el nodo inicial siguiendo el camino que

hemos elegido anteriormente.

h’(n) Puede ser estimado de diferentes maneras. Uno de los métodos más

comunes se denomina como el método Manhattan. Se llama Manhattan

porque es como calcular el número de manzanas que hay desde un lugar a

otro. Cabe señalar que cuando calculamos h’(n), ignoramos cualquier

obstáculo que intervenga, es por eso, que cuando nos topamos con algún

obstáculo imprevisto, el algoritmo falla apareciendo los “bugs” que

hemos comentando al principio del trabajo. Es una estimación de la

distancia que queda, no de la distancia actual, es por eso que se

llama heurística (valor estimado).

El algoritmo A* como hemos mencionado antes es un algoritmo

derivado del de Dijkstra, por lo tanto tenemos que calcular f(n) para

cada nodo como el algoritmo anterior y coger el mínimo como el camino

a seguir.

2.3: ALGORITMO A* EN JUEGOS EN 3D: AGE OF EMPIRES

Para explicar mejor el funcionamiento de este algoritmo vamos a

hacerlo con el videojuego “Age of Empires”. Lo que hacemos es dividir

el terreno en una malla y asignar los costes de g(n) dependiendo si va

en línea recta o traza la diagonal. La diferencia entre este

algoritmo y el anterior, radica en que ahora usaremos cuadrados como

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 11

nodos, en vez de puntos (también se podría usar vértices, pero como

para calcular h’(n), estamos usando el método de Manhattan en este

ejemplo, vamos a utilizar cuadrados).

En el ejemplo tendremos unas tropas en un punto del mapa

(representado por un cuadrado en verde) y tendremos que atacar a un

poblado (representando por un cuadrado en rojo), en mitad del terreno

nos encontramos con una montaña (representada por unos cuadrados

azules), veremos cómo con el algoritmo A* encontramos el camino más

corto, para que nuestras tropas puedan llegar lo antes posible a

atacar a dicho pueblo.

En primer lugar debe evaluar los g(n) de los cuadrados vecinos,

y a continuación sus h’(n). A continuación, utiliza el algoritmo

Manhattan (que como ya hemos dicho anteriormente es un algoritmo que

se utiliza para dar un valor heurístico de la distancia que hay desde

ese cuadrado hasta el cuadrado objetivo). Una vez que se tienen ambos

resultados se calcula f(n) sumando ambos y se elige el cuadrado que

tenga menor resultado en la suma, por lo tanto al sumar nos sirve

para comparar el valor real hasta el siguiente cuadrado y el valor

estimado desde ese cuadrado a nuestro punto final.

Como se aprecia en la imagen, el que menor f(n) tiene es, el de

su derecha y, por tanto, se escoge ese cuadrado y se repite el proceso

anterior. En este caso el que se debería coger volvería a ser el de la

derecha, pero al ser un obstáculo, su g(n) es igual a infinito. Por

tanto el siguiente cuadrado a escoger es el que hay por debajo o por

encima del elegido en la anterior iteración, pero cualquiera de estas

dos elecciones son mejor escogerlas desde el nodo anterior, porque es

más corto hacer el movimiento de la diagonal que ir hasta el primer

cuadrado y luego a uno de estos.

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 12

Este proceso se va repitiendo hasta que llegamos a nuestro poblado

(el cuadrado rojo), dispuestos a atacar a con nuestras tropas. Por

supuesto este desplazamiento va sumado a la animación de nuestras

tropas al moverse, dando el efecto, de que las tropas “andan” hacia el

objetivo seleccionado.

3. UN ENFOQUE MÁS ACTUAL HACIA EL ALGORITMO A*. AUMENTANDO LA

DIFICULTAD.

Acabamos de ver cómo se pueden desplazar unidades por extensas

superficies de terreno usando el algoritmo A*. Ahora veremos que

podemos aplicar este algoritmo de distintas formas para formar

diferentes comportamientos en el movimiento de personajes u objetos en

los videojuegos más actuales y que no tienen por qué ser del tipo de

videojuego anterior (estrategia en tiempo real) y como siempre veremos

las diferentes posibilidades con ejemplos de juegos.

El primer comportamiento que vamos a describir es el de los

personajes enemigos que patrullan en una zona determinada del mapa.

Este tipo de movimiento es

muy típico en videojuegos

donde tendremos que

infiltrarnos en sitios y

hay enemigos patrullando

tratando de impedirlo, como

ejemplos podemos citar

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 13

juegos como “Assassin’s Creed”, “Splinter Cell”, “Metal Gear” o “Call

of duty”.

En todos ellos nos tendremos que introducir en lugares que estarán

vigilados por enemigos que patrullan alrededor del mismo.

Para dirigir el movimiento de estos, la IA del juego sigue usando el

algoritmo descrito arriba, pero aplicado de una forma un tanto

diferente. El programador divide la zona a patrullar en una malla con

puntos y elige unos puntos clave

(como en la imagen anterior). El

comportamiento del personaje será ir

desplazándose desde cada punto clave

al siguiente trazando un movimiento

continuo, siempre el mismo. Así se

tendrá que calcular con el algoritmo

A* el camino más corto desde cada

punto clave al siguiente punto

clave.

Lo que sucede algunas veces, es que

mientras está calculando la ruta a

trazar, puede aparecer algún

obstáculo (provocado por nosotros mismos, por ejemplo) y hacer que no

pueda llegar hasta él siguiente punto clave asignado (porque cualquier

camino mínimo seria (∞) y no se podría escoger ninguno), si el

algoritmo no está bien definido para ese tipo de situaciones, nos

podremos encontrar con los “bugs” del principio de este trabajo,

objetos con la animación de caminar o movimiento, pero sin desplazarse

por el mapa, siendo bloqueado por una pared, o cualquier otra cosa.

Una de las cosas interesantes que puede ocurrir, es que al igual

que en el juego “PAC-MAN”, el algoritmo de ruta definida de este

“patrullador” se vea cambiada cuando, por ejemplo nos ve, cambiando su

punto final para calcular el algoritmo del siguiente punto clave, al

jugador en cuestión (para neutralizarle) o al interruptor para dar la

alarma.

Podemos aplicar el algoritmo A* también en juegos de fútbol o de

carreras, siempre con ciertas variaciones a la hora de implementar

dicho algoritmo dependiendo del tipo de personaje u objeto en el que

queramos provocar el movimiento. Así

por ejemplo, en un juego de carreras,

cuando tenemos a nuestro contrincante

detrás su algoritmo calculará el

camino más corto hacia nosotros, y

sus vértices para calcular éste,

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 14

estarán en el recorrido de la carrera.

Cuando llegase el momento de adelantar a un coche, el algoritmo

cambiará y en vez de ser el punto final a donde llegar el coche de

delante, será un vértice más adelante (no pudiendo coger el camino en

el que nos encontremos nosotros), por ejemplo. Cuando no haya coches

para ser puntos de referencia para el cálculo del algoritmo, se podrá

usar, como en el caso anterior, puntos clave a lo largo del recorrido

del circuito para hacerlo.

Uno de los puntos más interesantes y clave de la utilización de

las matemáticas en el mundo de los videojuegos sería a la hora de

hablar de la dificultad en un videojuego.

El grado de dificultad de un juego depende de muchos aspectos,

pero podemos decir, que a nivel básico, la dificultad queda definida

por cómo se utilicen los algoritmos, la rapidez y la precisión con la

que se calculen éstos.

Así por ejemplo en un videojuego de carreras, un mayor grado de

dificultad significa que el rival traza el recorrido de forma más

precisa y en menos tiempo, aparte de que por ejemplo, queden

habilitados nuevos caminos con menor coste, a mayor grado de

dificultad, haciendo que el camino mínimo sea menor, y por lo tanto

dará la visión de que los rivales se “desplazarán” más rápido, aunque

lo que ocurre realmente es que la distancia que tienen por recorrer es

mucho menor (el camino mínimo tiene un coste menor).

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 15

4. CAPTURAR EL MOVIMIENTO: EL FUTURO DEL MOVIMIENTO EN VIDEOJUEGOS

El método de captura de movimiento es una de las mejores

herramientas para crear animaciones y simular movimientos de una forma

muy parecida a la realidad. Se pueden observar grandes resultados en

muchos de los actuales juegos en 3D como “FIFA” o “Call Of Duty”...

Actualmente, ya son más de 150

juegos los que implementan la

captura de movimiento de empresas

como EA, Gremlin, RARE, Konami y

Namco, entre otras.

La captura de movimiento

simplifica de mucho el proceso de

animación, sobre todo cuando se

trata de animar personajes en 3D que

quieran imitar movimientos de la

vida real como, por ejemplo, una actividad deportiva como puede ser

jugar al fútbol o correr.

La principal idea de este sistema consiste en la grabación del

personaje, interpretado por una persona, y la colocación de sensores

en la misma. Toda la información se recoge fotograma a fotograma y,

posteriormente, se aplica a un esqueleto virtual del personaje (fase

post-procesamiento). En la fase de post-producción se combinan con la

animación para conseguir el efecto deseado y sin necesidad de que el

intérprete haga todos los movimientos sino que de unos simples se

creen otros más complejos y personalizables, esto se consigue captando

los movimientos y trasladando éstos a funciones o a polinomios

interpoladores (que son más fáciles

de trabajar y modificar) para

después con cambiar variables de

éstas conseguir un nuevo movimiento.

Una las formas de llevar el

movimiento del intérprete al mundo

virtual consiste en utilizar el

algoritmo de puntos cruciales que se

basa en la distancia geodésica

(distancia más corta entre dos

puntos) para calcular cuáles son las

extremidades de las personas, en otras palabras, consiste en calcular

qué puntos están más alejados de su centro de gravedad, siguiendo un

camino comprendido dentro de su silueta. Tras ello, se vuelve a

analizar la silueta creando esqueletos morfológicos que ayuden a

asignar una etiqueta a cada extremidad.

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 16

El primer videojuego en emplear la tecnología más propia del cine

fue “Soul Edge” (1995), que usó receptores pasivos en los actores para

capturar los movimientos, que posteriormente se asociaban a modelos

poligonales. Este tipo de receptores utilizaba una serie de esferas

adheridas a diferentes puntos del cuerpo de los actores que eran

capturados por cámaras a partir de la luz que estos emitían.

PlayStation 3 y Xbox 360 ha explotado esta técnica tanto que

pueden llegan a retratar hasta los movimientos únicos de los

jugadores. “PES 2012 “(juego de

fútbol) por ejemplo, introdujo los

lanzamientos de falta de Cristiano

Ronaldo siguiendo el particular

ritual que tiene el jugador. Las

versiones de 2013 incluían

movimientos y jugadas de otros

muchos.

Con el desarrollo de la

tecnología los sistemas se han ido

mejorando y se ha podido innovar

con nuevas maneras de capturar movimiento. En “Left 4 Dead”, por

ejemplo, la captura de movimiento se realizó sin receptores, solo con

cámaras, al igual que en “L.A. Noire” con un resultado muy superior.

La mayoría de desarrolladores, en realidad, emplean puntos de

referencia activos, que son los que emiten luz propia para resultados

más realistas en zonas más pequeñas en los rostros y pasivos en el

cuerpo para facilitar todo el proceso de animación. Todos estos

detalles pasan al ordenador a modo de vectores que son modificados

acorde a la necesidad del programador para realizar una acción u otra

con el personaje.

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 17

5. BIBLIOGRAFÍA

PONG:

Curso básico desarrollo de Videojuegos de Windows Phone.

SPACE INVADERS:

http://es.wikipedia.org/wiki/Space_Invaders

http://www.eurogamer.es/articles/2011-12-24-space-invaders-articulo

http://www.vandal.net/retro/space-invaders

http://www.neoteo.com/retroinformatica-space-invaders-1978

http://www.jlabstudio.com/webgl/2011/12/tutorial-canvas-2d-como-hacer-

un-juego-en-javascript-5a-parte/

PACMAN:

http://www.cyberhades.com/2010/12/04/estudiando-a-fondo-el-

comportamiento-de-los-fantasmas-de-pac-man/

http://en.wikipedia.org/wiki/Pac-Man

ALGORITMO DE DIJKSTRA:

Estructuras Discretas de UAH por Tomasa Calvo Sánchez, José Enrique Morais

San Miguel y Enriqueta MuelMuel.

http://en.wikipedia.org/wiki/Pathfinding#Dijkstra.27s_Algorithm

http://es.wikipedia.org/wiki/B%C3%BAsqueda_de_ruta

ALGORITMO A*

http://en.wikipedia.org/wiki/A*_search_algorithm

http://es.wikipedia.org/wiki/Algoritmo_de_b%C3%BAsqueda_A*

http://www.policyalmanac.org/games/articulo1.htm

http://es.wikipedia.org/wiki/Heur%C3%ADstica_(inform%C3%A1tica)

http://es.wikipedia.org/wiki/Primero_en_profundidad

Funciones que ganan partidas Utiliza Matemáticas - 2013

Page 18

http://es.wikipedia.org/wiki/Primero_en_anchura

EJEMPLO DE ALGORITMOS A*

http://marcosdiez.wordpress.com/2013/01/21/pfm-navegacion-de-

personajes-en-udk-pathfinding-y-navigationmesh/

http://udn.epicgames.com/Three/AIAndNavigationHome.html

http://fisicomolon.blogspot.com.es/2009/03/inteligencia-artificial-para-un-

coche.html

http://fisicomolon.blogspot.com.es/2009/03/inteligencia-artificial-simple-

para.html

http://www.tutorialsforblender3d.com/Game_Engine/Vehicle/Vehicle_1.html

http://research.microsoft.com/en-us/projects/ijcaiigames/

http://www.policyalmanac.org/games/articulo1.htm

CAPTURA MOVIMIENTO:

http://es.prmob.net/captura-de-movimiento/electronic-arts/konami-

1051190.html

http://en.wikipedia.org/wiki/Animation

http://en.wikipedia.org/wiki/Computer_animation

http://www.motioncapturestudios.com/

http://www.youtube.com/watch?v=QvE1l7S70sQ&feature=player_embedded

http://www.atrincherados.com/actuando-en-los-videojuegos-la-historia-de-la-

captura-de-movimientos/

http://www.meristation.com/es/playstation-portable/reportaje/captura-de-

movimientos-la-realidad-como-herramienta/1602601