FUNCIONES QUE GANAN
PARTIDAS Trabajo Final
Coordinador:
Álvaro Espinosa Marlasca.
Grado en Ingeniería de Computadores
David Javier Morán Márquez.
Grado en Ingeniería de Computadores
Francisco Javier Romero Paris.
Grado en Ingeniería de Computadores
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