Você está na página 1de 9

Análisis de algoritmos en

videojuegos basados en Pacman:


“Lo que quiere mi país”
Eduardo José Ávila Portillo*

Resumen:
En el presente artículo se describen, analizan y comparan los algoritmos de movimiento
utilizados por los antagonistas de dos juegos muy similares en cuanto a funcionalidad, pero
muy diferentes en cuanto a conceptos computacionales aplicados. Pacman aplicando
estructuras dinámicas de datos con algoritmos de “pathfinding” y “Lo que quiere mi país”
utilizando conceptos más básicos de desarrollo con una dosis de análisis matemático.

Abstract:
In this article are described, analyzed and compared the algorithms of two videogames, same
when you play it but so different on computational concepts. Pacman using a pathfinding
algorithm and LQQMP using concepts basic of programming and analysis mathematical

1. Introducción experimento de comprobación fue el


Según Víctor Chambi, autor del artículo diseñar, desarrollar e implementar un
“Inteligencia Artificial Juegos”: Los videojuego basado en Pacman, creado
fantasmas del juego “Pacman” creado desde cero sin utilizar frameworks o
por Toru Iwatani1 nos muestra el alguna API para videojuegos. Esto exige
ejemplo claro de un agente estímulo- el diseño de los algoritmos de
respuesta, utilizando el algoritmo A* movimiento tanto del protagonista como
(para pathfinding); además, la página de sus acosadores. Dicho experimento
web gameinternal.com, en su concluyó con la creación del videojuego
publicación “Understanding Pac-Man “Lo que quiere mi país” ganador del
Ghost Behavior”, nos menciona que para premio al mejor proyecto presentado en
perseguir al protagonista, en cada uno el CONINFO 2015, evento organizado
de los fantasmas se emplea una por la Asociación Salvadoreña de
modalidad distinta, mas no menciona Profesionales en Computación. En estas
que se utilicen algoritmos distintos entre páginas acompáñenme a analizar los
cada fantasma. Por lo que podemos algoritmos de movilidad tanto en los
deducir que cada fantasma ocupa de antagonistas como en el protagonista del
distinta manera el algoritmo A*, videojuego y sacar conclusiones sobre la
perteneciente a las búsquedas efectividad de los algoritmos utilizados
heurísticas .
2
en relación a las heurísticas ocupadas
Teniendo esto en claro, surge mi por el Pacman tradicional.
curiosidad: al desarrollar videojuegos
que contengan enemigos capaces de 2. ¿A qué llamamos juegos basados
perseguir al personaje en un entorno 2D en Pacman?
similar al de Pacman, ¿será que las Pacman es un videojuego de una bola
búsquedas heurísticas con algoritmos amarilla que avanza comiendo una
“pathfinding” son el único camino eficaz cantidad de puntos esparcidados por el
para desarrollarlo? Mi hipótesis sin escenario y es perseguida por fantasmas
comprobación fue un rotundo “¡NO!” y el que quieren comérsela. Este escenario

* Egresado de Ingeniería en Ciencias de la Computación de la Universidad Don Bosco.


Desarrollador web PHP en la Universidad Don Bosco, eduardo.avila@udb.edu.sv.
es una plataforma bidimensional vista abandona el algoritmo normal de
desde arriba; a nivel lógico está dividido movimiento y recorre un camino ya
en celdas de 8x8 pixeles1, 28 celdas de predefinido.
ancho y 36 de alto; con bordos
predefinidos que limitan los movimientos
de los personajes; además existen
elementos “power up” que permiten
invertir el acoso y por un instante es
Pacman quien puede comerse a los
fantasmas.

A los videojuegos que cumplan todas (o


casi todas) estas características
llamaremos: basados en Pacman

3. Características comunes en los Imagen 1. Rutas predefinidas para los fantasmas


al entrar en Modo de dispersión
fantasmas de Pacman
Gameinternal.com nos explica el
comportamiento de los fantasmas de b. Describiendo el algoritmo de
Pacman: Estando en una celda Pathfinding A*
predefinida al iniciar el juego, los Según nos comenta Danilo Cuevas, en
fantasmas deciden cuál será la siguiente su informe final de proyecto de
celda a ocupar, calculando para ello una graduación para optar al título de
celda objetivo, y la ruta más corta para ingeniero civil en informática: “Análisis
llegar a ésta, se trasladan a la próxima de Algoritmos Pathfinding”. Este
casilla dentro de la ruta trazada y luego algoritmo es una mejora del algoritmo
vuelven a hacer los cálculos; es al de Dijkstra y trabaja considerando el
cambio de celda consecutivo lo que un escenario como una rejilla con muchas
jugador interpreta como avance. celdas: tenemos el punto de inicio
dentro de una y nuestro punto objetivo
a. Modos de movimiento en otra. El algoritmo consiste en calcular
En Pacman existen 3 modos de un “costo general” para cada celda que
movimiento, agrega el artículo de dicha rodee la casilla que se esté analizando,
página, es decir formas en que cada se elige la celda de menor “costo
fantasma ejecuta su algoritmo de general” y luego esta misma se
avance. Estos modos son comunes para convertirá en la celda de análisis,
los 4 de la siguiente manera: teniendo como casilla padre aquélla que
acabamos de abandonar. Danilo nos
Modo Chase (persecución): aclara que en este algoritmo los valores
Normal, toma la posición de Pacman de los “costos de movimiento” pueden
como parámetro para su persecución. variar dependiendo de la situación que
se esté simulando; pero es evidente que
Modo Frightened (asustado): un videojuego base Pacman no es
Se activa cuando Pacman se come un necesario que se haga esta distinción, ya
“power up” y consiste en huir de Pacman que es igualmente costoso trasladarse
a una velocidad reducida. de una celda a otra en todo el escenario.

Modo Scatter (dispersión): Antes de profundizar en este algoritmo,


Se activa para cada fantasma en una necesitamos entender unos conceptos:
esquina distinta del escenario, se
15-Asignar nodo actual como padre
G(N): Es el costo de movimiento al 16-recalcular F(N),H(N),G(N)
trasladarse de una celda a otra. Este se 17-si este nodo es la meta, ir a 19
18-este nodo pasa a ser nodo de
asigna cuando se está implementando el
Análisis, ir a 5
algoritmo.
19-guardar el camino
20-recorrer el camino de forma inversa
H(N): Es el costo de desplazamiento desde el nodo meta hasta el nodo inicial
desde la celda analizada hasta la celda sabiendo cuales son los nodos padres
objetivo. Este valor se calcula utilizando Resumen de algoritmo A*
una heurística especificada al
implementar el algoritmo A*. Este resumen de algoritmo, es una
adaptación de la amplia explicación que
F(N): Aquí lo llamamos “costo general” y Danilo Cuevas Guzmán 4 nos hace.
es la suma H(N) y G(N).
Aplicado a Pacman, el primer nodo de la
Nodo: instancia de una “clase” que ruta es la posición del fantasma, el
expresa características de una celda: segundo nodo es la celda a donde
identificador, nodo predecesor, fue moverse.
analizada o no, G(N), H(N), F(N). En
general para este algoritmo hablaremos 4. Características individuales en los
de nodos en lugar de celdas. fantasmas de Pacman
Cada uno posee una “personalidad”, la
Lista abierta: una lista enlazada donde cual (ya hablando de forma técnica) es
vamos agregando los nodos que la celda meta que buscará cada
debemos de analizar. fantasma. Esta característica, junto a los
modos de movimiento, logra una
Lista cerrada: una lista enlazada donde aparente persecución colaborativa,
están agregados y se seguirán aunque en realidad no haya
agregando nodos que ya no debemos comunicación entre los fantasmas.
analizar.
a. Fantasma rojo (Blinky)
En este sentido el mejor camino se Utiliza la forma más básica de
busca de esta manera: persecución, el de ruta más corta y su
meta objetivo es en sí la posición actual
1-Añade nodo inicial a lista abierta de Pacman, utilizando el algoritmo de
2-Añade todos los nodos no transitables a la pathfinding de manera tradicional.
lista cerrada
3-Ejecutar lo siguiente
b. Fantasma rosado (Pinky)
4- Busca el nodo con menor F(N) en lista
abierta
La ruta que calcula está basada en el
5- Pásalo a lista cerrada siguiente paso que dará Pacman, es
6- Conviértelo en nodo de análisis decir, que para encontrar el mejor
7- Para cada nodo circundante hacer lo camino toma como destino la celda
siguiente. enfrente de la posición de Pacman. Por
8-si no está en lista cerrada, ir a 9 sino 10 ello Pinky tiende a desviarse del camino
9- si está en lista abierta, ir a 13 obvio cuando Pacman avanza en la
10-agregar nodo a lista abierta
misma línea y en dirección opuesta a él
11-Asignarle nodo actual como padre
(Ver Imagen 2).
12-Asignar F(N),G(N),H(N)
13-si esta en lista abierta, ir a 14
14-si su G(N) no es el menor, ir a 8
modo Scatter, aunque no esté en su
esquina correspondiente. El cálculo de la
distancia se realiza cada vez que se
desplaza una celda.

5. El videojuego “Lo que quiere mi


país”
Es un video juego 2D al estilo Pacman,
Imagen 2. Pacman está enfrente, la ruta galardonado como mejor proyecto en el
calculada termina atrás de Pinky. evento CONINFO 2015, organizado por
la Asociación Salvadoreña de
profesionales en computación, ASPROC.
c. Fantasma celeste (Inky) Consiste en un policía que va recogiendo
No comienza a acosar a Pacman sacos de dinero esparcidos por toda la
mientras éste no haya consumido 30 ciudad, mientras hay 2 delincuentes que
puntos. Su peculiaridad radica en la lo persiguen a él. El dinero que recolecta
casilla que toma como meta. Dicha celda pasa a ser parte del presupuesto de
se calcula en tres pasos: seguridad pública y eventualmente dicho
- Identificar la segunda celda en frente presupuesto alcanzará para comprar
de Pacman. patrullas policiales que le servirán a
- Calcular la distancia X y la distancia Y nuestro policía para capturar y
desde él hasta dicha celda. encarcelar a los delincuentes. Este
- La celda objetivo está en la posición videojuego ha sido creado para correr en
(2*X, 2*Y) tomando a Inky como (0,0). navegadores web, pero sin necesidad de
Esta nueva celda será la que Inky conexión a internet, es decir, con solo
utilizará como meta al momento de tener los script tú ya puedes jugarlo; fue
calcular su ruta de movimiento (Ver creado en HTML como embalaje, CSS
Imagen 3). para características visuales como
imágenes de fondo y posición de los
cuerpos dentro del navegador, además
de Javascript como lenguaje para
ejecutar procesos y corrida de
algoritmos.

Lo que destacaremos en esta


oportunidad son los algoritmos de
movimiento tanto de Paul (el policía)
como de los maleantes que lo persiguen,
Imagen 3. Inky decidiendo hacia cuál celda debe
ya que los movimientos de los últimos
calcular la mejor ruta. mencionados son una automatización del
primero.
d. Fantasma anaranjado (Clyde)
Varía su modo de persecución
dependiendo de la distancia a la que se
encuentre de Pacman; si la distancia es
más de ocho celdas, se mantiene en
modo Chase, con el algoritmo A* al igual
que Blinky. Si la distancia de Pacman es
de menos de ocho celdas, Clyde entra en
los algoritmos “pathfinding” y terminé
creando un algoritmo que me gusta
llamar “paso siguiente”, o “next step”
para los que gustan el inglés.

Se basa en un análisis numérico muy


sencillo: simulamos al villano y a Paul
como puntos en el plano cartesiano, con
el signo del “Eje Y” invertido y los
Imagen 4. Juego “Lo que quiere mi país”, posicionamos en el cuarto cuadrante.
ladrones persiguiendo a Paul. Sus posiciones serán basadas en las que
nos describe el top y el left del CSS:
a. Desplazamiento de Paul el policía
Teniendo en cuenta un cronómetro Posición en X = Left
oculto en el juego, Paul es un personaje
Posición en Y = Top
que cada 0.5 segundos, revisa su
bandera de “dirección”, cambia de celda
y cambia de Sprite, la próxima casilla
que ocupara la define dicha bandera, la
cual siempre tiene un valor inicial de
“Abajo”. Este cambio de casilla cada 0.5
segundos es lo que el jugador reconoce
como avance o movimiento; la forma en
que se controla es bastante simple, cada
vez que ocurre un KeyUp en una tecla
específica, se modifica la bandera
Imagen 5. Simulando al protagonista y al
“dirección” de esta forma: antagonista del juego como puntos en el espacio.

KeyUp Tecla A Hacia la Izquierda Luego restamos la posición “X” del


KeyUp Tecla S Hacia Abajo villano menos la posición “X” del
KeyUp Tecla D Hacia la Derecha personaje y lo mismo hacemos con las
KeyUp Tecla W Hacia Arriba posiciones “Y”. Así obtendremos un
diferencial de “X” es decir un Dx y un
b. El desplazamiento de los ladrones Dy; estos describen la distancia en “X” y
en “Lo que quiere mi país” en ”Y” del ladrón hacia el personaje.
El algoritmo de movimiento es
exactamente el mismo que el de Paul,
solo se tiene una interrogante: si los
antagonistas no pueden ser controlados
por el jugador, ¿cómo van a saber hacia
dónde moverse? Vimos que los
fantasmas de Pacman utilizan un
método de “Búsqueda de rutas”, pero si
esta decisión la estaré tomando cada 0.5
segundos y constantemente mi celda
meta estará cambiando de posición,
Imagen 6. Grafica de los valores Dx y Dy
bastaría con concentrarme en cuál es la
casilla que me acerca más a mi
Tomando en cuenta que normalmente
cambiante celda final, en lugar de
estos diferenciales no serán
calcular toda una ruta; así dejo de lado
equivalentes, podremos esperar que un “dirección” de este villano; observando
diferencial sea mayor que el otro, la imagen 6, la coordenada “X” del
pudiéndolos así discriminar. Además personaje es mayor que la coordenada
siendo obvio reconocer que basta reducir “X” el villano y al hacer la resta:
una de estas distancias para acercar el
villano hacia el personaje, es decir, el x.villano – x.personaje
siguiente paso que dé el villano reducirá
uno de estos diferenciales. Antes de Tenemos un Dx negativo, entonces el
definir un algoritmo debemos responder valor de su bandera será “derecha”,
otra pregunta ¿Cuál de las dos distancias como se muestra en la tabla.
debemos reducir? La regla de “la
distancia más corta es la mejor” se ve Elegido Dx > 0 Hacia la Izquierda
opacada en esta ocasión ya que si Eje X Sino Hacia la Derecha
reducimos constantemente el eje con Elegido Dy > 0 Hacia Abajo
distancia más corta, éste llegará a cero, Eje Y Sino Hacia Arriba
pero todavía tendremos la distancia en
el eje más largo separándonos y el Sintetizamos ideas, en este algoritmo:
villano nunca tocará a Paul; en cambio al
reducir constantemente el diferencial de 1-inicio
2-Dx = villano.x – personaje.x
mayor valor llegará un momento en que
3-Dy = villano.y – personaje.y
ambos diferenciales serán equivalentes y
4-si abs(Dx) > abs(Dy), ir a 10
realmente nos habremos acercado a 5-si Dy > 0, ir a 8
Paul (en esa circunstancia el siguiente 6-direccion = abajo
paso será elegido aleatoriamente) 7-ir a 14
Teniendo esto en cuenta decidí reducir 8-direccion = arriba
siempre la distancia más larga. 9-ir a 14
10-si Dx > 0, ir a 13
Ahora, si relacionamos nuestras 11-direccion = izquierda
12-ir a 14
opciones de movimiento con los ejes
13-direccion = derecha
coordenados podemos decir que si el
14-Fin
mayor diferencial es Dx, nuestras
opciones se reducen a izquierda y Algoritmo “paso siguiente”
derecha, en cambio sí es Dy las opciones
son arriba y abajo. Claro, este algoritmo no toma en cuenta
los obstáculos, por lo que a veces puede
Además, tomando en cuenta que en apuntar a una celda inaccesible. Para
muchas ocasiones los diferenciales nos ello el videojuego usa además un
darán resultados negativos, por lo que algoritmo corrector que indica el valor
una comparación tradicional nos dará un de la bandera que no apunte a
análisis erróneo, si por ejemplo tenemos obstáculos basándose en la dirección
un Dx=-15 y un Dy=3, gráficamente previamente elegida:
podremos ver que Dx es el mayor
aunque numéricamente no lo sea; por lo 1-inicio
tanto, la comparación deberá ser de sus 2-si “dirección” es celda accesible, ir a 14
respectivos valores absolutos para saber 3-si dirección es arriba, ir a 12
si trabajaremos con las opciones del eje 4-si dirección es derecha, ir a 10
X o con las de Y. 5-si dirección es abajo, ir a 8
6-direccion=arriba
7-ir a 2
Elegido el diferencial a trabajar, el signo
8-direccion = izquierda
del mismo indica el valor de la bandera
9-ir a 2
10-direccion = abajo
11-ir a 2 Vigilancia:
12-direccion = derecha
La separación entre tú y el villano
13-ir a 2
forman un cuadrado, básicamente el
14-Fin
ladrón queda moviéndose de un lado a
Algoritmo corrector de dirección otro esperando tu próximo movimiento y
elegir cual celda le conviene más.

Es con estos dos algoritmos obtenemos Huida:


que el avance de los ladrones sea Los algoritmos funcionan al revés, el
totalmente acosador y hasta hostigoso, ladrón huye en lugar de perseguir. Este
la cantidad de villanos en el juego es estado se da cuando Paul obtiene su
solo dos y ambos utilizan el mismo patrulla policial (“Power up” de Pacman).
algoritmo para moverse. La única
diferencia es un desfase de 10 ms
(milisegundos) que se colocó en uno de 6. Conclusión
ellos, que puede parecer poco, pero Se puede crear un Pacman con un
después de un tiempo de estar huyendo algoritmo que no fuera “pathfinding” y
ese desfase marca diferencia en la que funcione muy bien en los fantasmas.
posición de los ladrones. Después de Se puede crear un algoritmo eficaz al
jugar varias veces te darás cuenta que utilizar más herramientas matemáticas.
los villanos más de una vez lograron
acorralarte en un callejón sin salida Sin embargo, se resalta que el algoritmo
(como vimos en Imagen 4) por lo que “siguiente paso” deja varios vacíos. Por
podrías confundirte y creer que ejemplo, no considera las celdas
utilizando alguna estrategia colaborativa, inaccesibles y por eso algunas veces
pero en realidad su persecución es necesita un algoritmo corrector que
independiente. determina la dirección del villano de
forma predeterminada, sin importar si te
c. Modos de desplazamiento de los aleja o te acerca a Paul. Deja como
ladrones posible opción de movimiento la casilla
Se reconocen 3 modos de movimiento de donde vienes, situación que A*
que surgen tomando en cuenta las supera haciendo uso de la “Lista
posiciones de los villanos, el cerrada” y estos dos vacíos son los que
protagonista y los obstáculos. Con un crean el modo vigilancia, que, en
poco de experiencia, aprendes a principio no se pensó que estuviera en el
controlarlas hasta cierto punto. juego. No podemos dejar de lado la
situación que ocurre cuando Dy=Dx. El
Normal: algoritmo “siguiente paso” por el
La separación entre tú y el villano momento no logra dar una solución
forman un rectángulo y se puede óptima y solo lo resuelve ejecutando las
distinguir un lado mayor que el otro. El mismas acciones que cuando Dy>Dx.
algoritmo “paso siguiente” no necesita el Por lo que podemos decir que aunque
algoritmo corrector y el villano no deja los algoritmos de videojuegos sean
de perseguirte, es todavía mejor cuando iguales de eficaces, el A* utilizado en
tú y el villano se encuentran en la Pacman es aparentemente más eficiente
misma línea, el acoso es imparable. en cuanto a desplazamiento, ya que el
único error que genera es el de Pinky
cuando huye de Pacman al estar frente a
él; sin embargo al utilizar estructuras para desarrollar su propio Pacman, pues
como listas y grafos requiere ser se demuestra que no es absolutamente
implementado en un lenguaje compilado necesario aplicar conocimientos de listas
para poder ser eficiente. Salta a la vista enlazadas, grafos, agentes o sistemas
que tener que ejecutar el algoritmo A* expertos para desarrollar juegos de este
cada 0.5 segundos en un lenguaje tipo. Además de ser una prueba
interpretado como Javascript resultaría contundente de que la matemática, el
en un programa lento y bobo, por lo que análisis espacial, gráfico y numérico, son
resulta obligatorio un algoritmo más ágil una herramienta fundamental en el
como el “paso siguiente” para poder desarrollo de software, y será la
crear un pacman en un lenguaje complejidad del problema que estemos
interpretado como en esta ocasión. resolviendo quien nos dirá el nivel de
teoría matemática que deberemos
Además, este experimento nos ha ocupar, personalmente no me queda
permitido develar a Pacman como una más que imaginar la envergadura de los
posible tarea para materias de problemas que se pueden resolver si
programación un poco más básicas; ocupamos los conceptos avanzados de
teniendo en cuenta siempre el análisis desarrollo de software de la mano con
matemático, un alumno de un análisis matemático profundo y muy
Programación 2 o Programación web ya bien estructurado.
tiene todas las herramientas necesarias
Referencias bibliográficas:

[1] gameinternals.com, (2 Diciembre, 2010) “Understanding Pac-Man Ghost Behavior”,


citado de internet, del url http://gameinternals.com/post/2072558330/understanding-
pac-man-ghost-behavior , el 06 de octubre de 2016.

[2] Chambi Nina, V. A. (2008). Inteligencia Artificial Juegos. Revista de Información,


Tecnología y Sociedad, del url: http://www.revistasbolivianas.org.bo/pdf/rits/n1/n1a17.pdf ,
el 10 de octubre de 2016.

[3] Carlos Soto, M. (2005). Sistema Experto de Diagnóstico médico del síndrome de
Guillian Barre. Portal del Sistema de Bibliotecas de la UNMSM, del url:
http://sisbib.unmsm.edu.pe/bibvirtualdata/tesis/basic/carlos_sm/cap1.pdf , el 10 de octubre
de 2016.

[4] Cuevas Guzmán, D. A. (2013). Análisis de Algoritmos Pathfinding, consultado en


línea, del url http://opac.pucv.cl/pucv_txt/txt-5000/UCE5372_01.pdf , el 11 de octubre
de 2016.