
            #ª255 ORDENADORES Y JUEGOS

        #ª080  Antonio Manuel L¢pez P‚rez

     Desde el nacimiento de la inform tica,
una de las ramas en las que se ha trabajado
m s intensamente ha sido la resoluci¢n de
juegos mediante el uso del ordenador. Hoy en
d¡a existen programas de ordenador que juegan
al ajedrez, las damas, el 3 en raya, y un
sinfin de juegos m s. Incluso hay m quinas
espec¡ficmente dise¤adas para jugar a uno de
estos juegos. Cualquier programa de ajedrez
es capaz de poner en muy serios aprietos a
la mayor¡a de jugadores medios, aunque a£n
no pueden superar a los grandes maestros.
Veremos aqu¡ de qu‚ modo juega el ordenador.

     En lo sucesivo, nos centraremos en el
juego de inteligencia por excelencia, el aje-
drez. Vamos en primer lugar a comentar algo
sobre este juego.

     Seg£n la teor¡a de juegos (una intere-
sante rama de las Matenm ticas), el ajedrez
es un juego bipersonal, finito, de suma 0 y
de informaci¢n completa. Todos estos tecni-
cismos significan lo siguiente: es bipersonal
porque obviamente juegan dos jugadores. Es
finito porque una partida de ajedrez tiene
siempre un final, bien cuando uno de los ju-
gadores gana, bien cuando hay tablas, no pu-
diendo prolongarse una partida hasta el infi-
nito. Es de suma 0 porque los objetivos de
ambos jugadores son contrapuestos, esto es,
si uno gana, el otro pierde, o bien hay ta-
blas. Es de informaci¢n completa porque en
todo momento ambos jugadores tienen toda la
informaci¢n sobre el estado del tablero y la
partida. Los juegos de cartas, como el poker,
no son de informaci¢n completa, puesto que un
jugador no conoce las cartas del contrario.

     En el ajedrez, cada jugador mueve alter-
nativamente una pieza. El objetivo es captu-
rar (comer) el rey contrario. El jaque mate
es la jugada anterior a la captura del rey.
No nos detendremos m s en explicar las dife-
rentes reglas del juego, sino que comenzare-

>[new_pag]<

mos a ver cu l es el proceso de desarrollo de
un programa que juegue. Lo que se diga aqu¡
para el ajedrez puede ser aplicado a progra-
mas que jueguen a cualquier otro juego.

     En primer lugar, es imprescindible en-
contrar una representaci¢n del tablero y la
situaci¢n de las fichas, que el ordenador
pueda procesar. Esto es relativamente f cil,
y en cualquier lenguaje de alto nivel dispo-
nemos de herramientas para hacerlo. Una re-
presentaci¢n adecuada para el tablero puede
ser una matriz de 8x8, con valores enteros.
En C, ser¡a algo as¡ como:

       short tablero[8][8];

     Para representar las piezas, pondremos
n£meros en las posiciones adecuadas de la ma-
triz. As¡, podemos representar el pe¢n con 1,
el  lfil como 2, el caballo como 3, la torre
como 4, la dama como 5, y el rey como 6. Para
las piezas negras usaremos la misma numera-
ci¢n, pero negativa. Las casillas vac¡as se
representan con 0.

     Con esto nuestro programa ya dispone de
una representaci¢n del tablero con la que
puede trabajar. El uso de matrices es muy
simple en lenguajes de alto nivel, lo que
ayudar  en las siguientes fases del desarro-
llo.

     No s¢lo basta con decirle al ordenador
c¢mo se representa el tablero. Tambi‚n hay
que explicarle c¢mo se mueven las piezas. El
movimiento de piezas es tambi‚n una tarea
bastante sencilla, puesto que puede reducir-
se a sumas y restas sobre las coordenadas ac-
tuales. Por ejemplo, si tenemos un pe¢n blan-
co en la casilla (x,y), sus movimientos lega-
les son la casilla (x,y+1) si est  vac¡a, o
las casillas (x+1,y+1), (x-1,y+1) si en ellas
hay piezas contrarias. Para la torre en
(x,y), los movimientos v lidos son todas las
casillas (x,y+c) y (x+c,y), donde c ser  po-
sitivo o negativo seg£n avancemos o retroce-

>[new_pag]<

damos la pieza. Por supuesto, la parte del
programa ocupada de comprobar la validez de
un movimiento debe asegurarse de que no se
mueve una ficha fuera del tablero, ni salta
sobre otras fichas, etc. Todo esto puede re-
ducirse a la llamada a una funci¢n:

        validar((x,y) antiguas,(x,y) nuevas)

que devolver  un valor verdadero si la pieza
se puede mover a la nueva posici¢n, y falso
si no puede. Los casos especiales, como el
enroque, la captura al paso, la salida de 
peones con dos casillas, la promoci¢n, etc,
deben ser considerados independientemente.

     Una vez realizado este m¢dulo, que como
digo no entra¤a mayor dificultad, tenemos un
programa que sabe mover las piezas. Por su-
puesto a£n estamos muy lejos de que el pro-
grama est‚ en condiciones de plantar cara a
un adversario. Cualquier jugador de ajedrez
sabe que ante una situaci¢n del tablero de-
terminada existen movimientos mejores y movi-
mientos peores. Debemos hacer que el ordena-
dor sepa distinguir de alg£n modo la calidad
de un movimiento, paa realizar aqu‚l que le
sea m s favorable. En principio, lo m s sen-
cillo es comenzar dando un valor a las piezas
capturadas. Cuando el ordenador tenga que mo-
ver, evaluar  todas sus posibles jugadas, y
escoger  aquella que lo lleve a capturar la
pieza contraria de valor m s alto. Supongamos
que valoramos las piezas del siguiente modo:
1 punto para el pe¢n, 3 para caballo y  lfil,
5 para la torre y 9 para la dama. Esta valo-
raci¢n se corresponde con el valor real de
las piezas seg£n su movilidad en el tablero.
Cuando le toque a la m quina, evaluar  todas
sus posibilidades. Si tiene que escoger entre
capturar un pe¢n contrario y capturar la dama
contraria, capturar  la dama, puesto que su
valor, 9 puntos, es superior al de un pe¢n.
Si en una jugada no hay captura de piezas, se
le dan 0 puntos. El rey es un caso especial
de pieza, a la que no se puede puntuar igual
que las dem s. Dada su importancia, le da-
remos un valor de 999, muy superior al del

>[new_pag]<

resto de piezas, para asegurarnos de que las
piezas ir n siempre a capturar el rey cuando
tengan ocasi¢n. 

     Ahora ya tenemos un programa que decide
en cada momento su mejor jugada. Si jugamos
contra ‚l, comenzar  una masacre de piezas,
en muchos casos sin sentido. El programa ser 
capaz incluso de perder su dama por comer un
pe¢n, ya que 1 punto (el valor de un pe¢n) es
mayor que 0 (no comer nada), aunque en la si-
guiente jugada el adversario capture su dama.
El problema surge porque no basta con exami-
nar las jugadas posibles de la m quina en ca-
da momento y escoger la mejor. Hay que anali-
zar tambi‚n las posibles respuestas a esas
jugadas. Los actuales programas de ajedrez
pueden ser capaces de analizar jugadas con 7
u 8 niveles de antelaci¢n, esto es, las juga-
das de la m quina, las respuestas del adver-
sario, las contrarespuestas de la m quina,
etc. Todo este conjunto de jugadas, respues-
tas, contrarrespuestas y dem s es almacenado
en una estructura de  rbol. Cada nivel del
 rbol contiene todas las posibles jugadas de
un bando. As¡ pues para continuar en el desa-
rrollo de nuestro programa de ajedrez debemos
implementar este tipo de razonamiento. En ge-
neral, la implementaci¢n se realiza en dos
m¢dulos: un GENERADOR DE JUGADAS, que se ocu-
pa de construir el  rbol de movimientos y
respuestas, y un ANALIZADOR DE JUGADAS, cuya
misi¢n es valorar cada una de las jugadas, y
escoger en cada momento la mejor alternativa.
El analizador de jugadas punt£a cada jugada
seg£n el valor de la pieza capturada. Para
las jugadas del contrario, se da una puntua-
ci¢n negativa. As¡, en el caso expuesto ante-
riormente, el ordenador considerar¡a todas
sus jugadas, otorgando a la jugada de comer
pe¢n con dama 1 punto. Analizar  las respues-
tas del contrario a esa jugada. Una de esas
respuestas es capturar la reina, que es pun-
tuada con -9 puntos (la reina que se pierde
es la del bando del ordenador). As¡, global-
mente la jugada comer pe¢n con dama tiene una

>[new_pag]<

puntuaci¢n de 1-9=-8 puntos, claramente des-
favorable para el ordenador. Bajo esas cir-
cunstancias el ordenador escoger  siempre la
jugada que le d‚ globalmente mayor puntua-
ci¢n. Cuanto mayor sea el n£mero de jugadas
que el ordenador "mire hacia adelante", mayor
ser  su nivel de juego. En esto se ve la di-
ferencia fundamental entre el ordenador y un
jugador humano. Este razona de manera simi-
lar, pero realiza consideraciones de otro es-
tilo, piensa. El ordenador es incapaz de pen-
sar si una jugada es mejor que otra, a menos
que haya una heur¡stica que le d‚ puntuacio-
nes a las jugadas. Adem s, el ordenador tam-
poco puede deshechar ninguna jugada. Un ser
humano sabe que si amenaza una pieza contra-
ria, el contrario se va a centrar en tres o
cuatro posibles respuestas (comer la pieza
que amenaza, quitar su pieza de enmedio,
amenazar una pieza mayor del contrario),
mientras que el ordenador analizar  TODAS Y
CADA UNA de las posibles respuestas, inclu-
yendo las m s absurdas. En esto es en lo que
de momento los ordenadores llevan desventaja
respecto a los humanos, aunque hay formas de
reducir esta desventaja, como veremos en el
siguiente #ª255Virtual Zone Magazineª|.


               #ª080 Antonio Manuel L¢pez P‚rez

