363mo funciona un programa de ajedrez) - ucn.edu.co · un programa de ajedrez, si buscas en la...

9
1 ¿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

Transcript of 363mo funciona un programa de ajedrez) - ucn.edu.co · un programa de ajedrez, si buscas en la...

1

¿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

2

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.

3

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).

4

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”

5

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

6

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:

7

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

8

“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

9