1 ¿CÓMO FUNCIONA UN PROGRAMA DE AJEDREZ? Por

Transcripción

1 ¿CÓMO FUNCIONA UN PROGRAMA DE AJEDREZ? Por
¿CÓMO FUNCIONA UN PROGRAMA DE AJEDREZ?
Por Alexander Narváez
Jaque mate, dijo la computadora Deep – Blue al entonces campeón indiscutible del
mundo Gary kasparov. Corría el año 1.997 cuando me entere de ello y entonces
decidí jugar contra un programa sencillo de Ajedrez y me quedaba admirado cada
vez que veía la belleza de la lógica con la que juegan los programas de Ajedrez, fue
así como conocí varios programas de chess como el ChessMaster, el CheesAcademy,
el ChessBase y muchos más.
Además comencé a visitar varios sitios para jugar Ajedrez online y en fin me sumergí
en el mundo de la computación y el Ajedrez, fue así como logré vencer a varios
programas de ajedrez e incluso a varios grandes maestros. Pero no vayan a creer que
los vencí jugando, para nada, mejor dicho los hackie, por ejemplo al Chessmaster lo
vencí asi: cree un acceso directo al programa en otro equipo de la red, de modo que
cuando arrancaba el juego, el algoritmo del programa le indicaba al juego que debía
buscar la base de datos en determinado directorio que por cierto nunca encontraba
ya que yo ejecuta el .exe desde otro equipo y colocaba el reloj a un minuto fue así
como le gané todos los títulos al juego, haciendole perder por tiempo.
Ahora bien como ganaba las partidas por internet, pues bien les contaré un caso en
particular, logré vencer a muchos grandes maestros d eajedrez jugando sin jugar es
decir, el juego se cargaba en un applet que es una aplicación que corre en el equipo
de cada jugador, de modo que cuando haces una jugada el applet envía el
movimiento al otro applet en que juega el usuario y de ese modo se reproduce la
movida; hasta ahí muy bien pero resulta que ese applet tenía un par de debilidades,
una permitia hundiendo la tecla control al tiempo de mover una pieza, que movieras
varias piezas a la vez, fue así como lograba realizar mates virtuales, que realmente
no existían, por ejemplo hacia el mate pastor y mi applet le enviaba un mensaje al
otro indicado que ya se había dado el mate, como el jaque mate lo procesaba el
applet local (segundo error)entonces el otro usuario no veía ningún movimiento sólo
le parecia jaque mate y se le descontaban los puntos del Elo y fue así como aparecí
entre los 500 mejores jugadores del ranking del sitio mi puesto era el 3 y eso que no
jugaba, como sería jugando por Dios.
Por cierto en una de esas hackiadas jugue con el programador o creador del applet a
quien por cierto derroté sin jugar, lo cual lo maravilló y nos hicimos grandes amigos,
este amigo del que les hablo se llama “Alberto Bañon Serrano” y las páginas que
1
hackie que usaban sus applets son interajedrez.com y hechiceros.net. Interajedrez
aún sigue online, pero ya no es débil a esas hackiadas puesto que una de las
contramedidas aplicadas fue la de que el mate no lo procesara el applet sino el
servidor.
Bueno pero basta hecharme miel, pasemos a lo que nos interesa y es como funciona
un programa de ajedrez, si buscas en la Internet encontrarás muchas cosas como
“Algoritmo Poda Alpha Beta”, “Tablas Hash” y muchas cosas más, que posr supuesto
te animo a consultar.
Pero la ídea de este artículo es introducirte un poco en este tema te voy a compartir
parte de un la programación de un juego sencillo de ajedrez que he programado para
un curso de programación ortientada a objetos que se dicta en nuestra universidad.
Así que empecemos:
He creaado un Proyecto llamado Ajedrez.
Luego 3 paquetes, para agrupar todos los objetos asi:
Paquete de Imágenes, Paquete de Juego y Paquete de Piezas.
2
Observa que en el paquete Imágenes, tendremos todos los gráficos de
las piezas tanto negras como blancas.
En el paquete Juego, realicé la programación del tablero.
En el paquete Piezas programé los movimientos de cada ficha, para
lo cual he creado una clase con el nombre de cada pieza y luego se
programó cada una.
De los tres paquetes mencionados anteriormente, realmente nos
interesan 2: el paquete “juego” y el paquete “piezas”, puesto que el
paquete “imágenes” como sabemos sólo tendra las imágenes o gifs de
las piezas (blancas y negras).
3
Paquete Juego:
Este paquete posee una serie de clases que permiten entre varias
cosas las siguientes:
• Armar el tablero de Ajedrez
• Iniciar y terminar una partida
• Elegir la opción de Jugar contra la máquina o contra otra
persona.
• Seleccionar el Color o bando con el que jugaremos: Blancas o
negras.
• Determinar cuando Se produce un jaque, jaquemate o una
captura valida de pieza.
Bueno, miremos un poquito la primera clase: “Ajedrez.java”
En el programa he creado varias clases entre ellas una de opciones,
que para resumirtelo rápidamente consiste en obtener las opciones
iniciales del juego, como jugar contra otra persona o contra la
máquina, elegir el color del bando con que arrancaras la partida…
mejor dicho la siguiente imagen habla por sí sola y te da una idea
clara de lo que se debe hacer:
Ahora hablemos un poco sobre la clase “pieza.java”
4
Para que no te rompas la cabeza, te dire que esta clase consiste en
conocer que pieza se ha movido, que posibles movimientos tiene
cada pieza y que valor o peso equivale a cada una como puedes
observar en la porción de código que muestra la imagen.
El asignarle una valor a cada pieza es una de las claves en la
programación de un juego de ajedrez, ya que le permite a la
máquina conocer en que valor total posee en relación a su rival y en
caso de presentarce un intercambio de piezas, puede saber de
antemano(sumas y restas) si le conviene o no determinado
intercambio.
Ya vas aclarando no? Ves como a poco empieza a aparecer la luz al
final del tunel? así que ya has entendido un poco sobre como
funcionan y se hacen los programas de ajedrez.
Ahora para finalizar el paquete pasemos a la clase: “Tablero.java”
Que es la clase principal o la más importante en nuestro programa de
juego de ajedrez
5
Te decia que esta es la clase principal, ya que con ella
determinaremos los turnos para las movidas, es decir la validez de las
jugadas, que bando mueve, que pieza se esta moviendo y si el
moviento o la jugada es válida o no.
Finalmente pasemos a nuestro último paquete “Piezas”; que como se
observa claramente posee una clase para cada “tipo de pieza” en el
juego de ajedrez:
•
•
•
•
•
•
Peon
Alfil
Caballo
Torre
Reyna
Rey
Recuerda que en Ajedrez existen 6 tipos de piezas repartidos, asi
veas 32 piezas sólo hay 6 categorias, por tanto antes de proceder a
programar cada pieza es importante conocer como se mueve cada
una de estas piezas.
Por tanto en este paquete se procederá a programar los movimientos
permitidos de cada tipo de pieza:
6
Como se muestra en esta ventana, se procede a programar la
categoria de la pieza, en este caso la clase peón, donde debemos
determinar que posibles movimientos tiene la pieza al arrancar la
partida y luego durante el transcurso del juego, como se captura, en
el caso del peón existe “la captura al paso y la captura normal”, por
tanto debemos saber cuando se puede aplicar determinada captura.
De igual forma un peón al arrancar la partida(“Apertura”), puede
mover 1 o dos casillas de una vez.
Todas estas variantes y muchas cosas más hay que tener en cuenta
cuando programamos la pieza. Por ello reitero es imperativo conocer
los movimientos de las piezas del Ajedrez, para posteriormente
proceder a tratar de programarlas.
Por ejemplo tu sabes que el caballo se mueve en ele “L”, para
interpretar eso en el lenguaje de programación debemos tener en
cuenta cosas como:”el caballo puede mover 3 casillas en L, pudiendo
ser 2 casillas sobre el eje X y una sobre el Eje Y y viceversa”.
Por ello como ves el nivel de complejidad puede ser alto, de ahí la
idea de abordar la programación por separado de cada pieza ayudará
muchísimo a la programación general del juego de ajedrez.
Una vez que conocemos bien los movimientos, trataremos de simular
su comportamiento y es allí donde se presentarán muchas variantes
importantes, como por ejemplo saber cuando una pieza esta
7
“clavada”, cuando una pieza apunta auna casilla de modo que no se
puede “enrocar”, porque hay una posición amenzada, etc,etc.
El espacio no permite que me extienda más en el código, pues la idea
es que tu tengas una idea más clara sobre como se hace un programa
de ajedrez y desarrolles tus propios algoritmos para el juego.
Así que te animo a que empieces estoy seguro te encantará.
Ing. Alexander Narváez – email: [email protected]
P.D. Para que disfrutes un poco he anexado un par de juegos de
ajedrez asi:
Matamarranos: juego sencillo que he comentado en este artículo y
que espero no te gane jejeje.
El damian: juego desarrollado por un amigo chileno que hice en la
Internet y que espero le ganes jejeje (al nombre del juego le añadí
una letra para que tenga el nombre de mi gran amigo Damian quien
hizo posible la publicación de este artículo)
Puedes descargar los juegos que estan comprimidos dentro de una
carpeta llamda chess.zip, descomprimela, abrela y veras un archivo
llamado Ajedrez.jar(matamarranos) y otra carpeta llamada damian,
donde esta el otro juego(damian.exe). Para jugar no tienes instalar
nada sólo debes dar doble clic sobre los archivos que te anteriores.
Link para descargar :
http://www.geniovirtual.com/chess.zip
*Dedicado a la memoria de Robert Boby Fischer, para mí el mejor jugador de ajdrez
de todos los tiempos
8
9

Documentos relacionados