Por enero del 2007 recordé las similitudes entre los
lenguajes C y Javascript, me pregunté si sería posible realizar un traslado
de mi reciente participación ganadora (19º IOCCC,
Most Portable Chess Set), lo hice en una tarde y el resultado es el ajedrez
más pequeño del mundo en Javascript, vea también mi
ajedrez JS1K.
Archivos comprimidos, útiles para
jugar localmente. Incluye el miniajedrez de 1K.
Se puede
seleccionar la pieza de coronación mediante el control. Algunos
navegadores pueden mostrar un mensaje de script demasiado lento, solo
indique que NO desea interrumpir el script.
Vealo en acción, para jugar haga click en la pieza deseada
y luego click en el cuadro destino:
Si usted quiere jugar con las piezas negras, haga click en
este
para forzar un movimiento, deberá hacer click cada vez después de mover una pieza
negra.
El código fuente
La mayor parte del código se parece mucho al original,
excepto que los apuntadores fueron trasladados a acceso a matrices.
Recientemente actualicé el núcleo con el código de Toledo Nanochess
Nov/20/2009.
El nivel de juego está fijo en una profundidad de 3
movimientos, y puede ser modificado (busque /*ply*/ en el código
fuente), pero cada nivel extra es un orden de magnitud más lento.
Una breve descripción del funcionamiento de este código
puede hallarse en la sección dedicada al
Ajedrez Toledo 1, o puede referirse a mi
libro de Toledo Nanochess.
De Turquía por Azer Koçulu,
versión en
Github con una interfaz sencilla para integrar en proyectos mayores,
utilizado por el mismo programador en su sitio
multiplayerchess.com.
De Reino Unido por Phil Mainwaring,
version del ajedrez Toledo con gráficas
integradas ingeniosamente usando el protocolo data, mide 2235
bytes.
De España por Andrés Moreno,
3 versiones del ajedrez Toledo con
visualización modificada y ligeros cambios en el núcleo.
El concurso JS1K dio inicio
el domingo 1º de agosto del 2010, organizado por
Peter van der Zee y teniendo como
jurados a Thomas Fuchs (autor de
Scriptaculous),
Remy Sharp,
Patrick H. Lauke y
Christopher Williams, todos
ellos expertos programadores de Javascript.
El objetivo del concurso fue simple, los participantes debían crear un
programa en Javascript lo más impresionante posible en 1024
bytes, o sea un kilobyte, sin depender de archivos externos. El periodo para
participaciones se cerró el 10 de septiembre.
Yo me enteré el 8 de agosto de este concurso y me pareció
un buen desafío escribir un ajedrez en 1K de Javascript, así que usando como
base mi ajedrez Javascript de 2.2K en 6 horas logré compactarlo en 1K,
tuve que quitar enroque, captura al paso y limitar la
coronación solo a dama, dejando un tablero sencillo con letras para representar
las piezas, click en cuadro origen y destino para mover las piezas.
Lo envié al
día siguiente al concurso y aún puede jugarlo en línea como la
participación 226. Observe que mi código
Javascript de 1018 octetos además de incluir una inteligencia artificial,
también contiene la interface con el usuario y la visualización del tablero.
No fue fácil como lo notaron
varias
personas.
La primera versión del miniajedrez.
Dos horas después de ser publicado, el entusiasta
Laxminarayan Kamath me envió
un correo sugiriéndome ponerle
gráficas
Unicode y un tip de optimización que utilicé posteriormente.
El miércoles 11 en otras 6 horas
de trabajo recorté más de 50 bytes, haciendo suficiente espacio para poner
gráficas Unicode para las piezas de ajedrez, agrandé el tablero para que fueran
cómodamente visibles y también iluminé el cuadro donde el usuario hace click.
El mismo día envié esta actualización al concurso (obtuvo el
número 298), y las gráficas
sorprendieron
al público.
Unos días después el español
Román Cortés me compartió
amablemente tips de optimización para ahorrar bytes, en ese tiempo también
reescribí la inteligencia artificial para ahorrar espacio, con los
bytes sobrantes le introduje variedad en las jugadas (Math.random), y
actualización inmediata del tablero al hacer el click final. Esta fue la
tercera revisión
(participación 435) y recibió excelentes
y multitudinarios comentarios,
cientos de menciones
en Twitter y miles de visitas desde blogs y
foros de Estados Unidos, España, China, Japón, Rusia, Francia y Alemania.
Estimo que esta versión fue jugada por al menos 25,000 personas alrededor del
mundo, esta cifra fue ampliamente superada por la última versión que
estimo fue jugada por 100,000 personas.
La tercera versión del miniajedrez en acción.
Un alemán anónimo reportó que era fácil forzar el mate del
loco a mi programa, me di cuenta de que con un extra de «inteligencia» se
solucionaba ese detalle y además hice que se iluminara la última pieza movida.
Esta fue la cuarta actualización
(participación 699).
Por casualidad justamente el mismo día que hice la
actualización recibí un correo del inglés
Matt Round, donde me informaba de su
artículo sobre una partida de mi ajedrez
contra el legendario ajedrez ZX-81 de 1K, y mi ajedrez empataba en vez de
dar mate. Supe que podía mejorarlo y me puse a la tarea otra vez, fue bastante
difícil «apretar» esos últimos bytes (aquí aproveché finalmente el tip de
optimización de Kamath), lo logré y fue mi última actualización
(participación 750) antes del cierre
de participaciones de JS1K.
¡Y ganó!, el 25 de septiembre del 2010, Thomas Fuchs y Remy
Sharp demostraron las participaciones ganadoras del JS1K en Berlín, Alemania,
durante la conferencia
jsConf.eu, mi ajedrez conquistó el segundo
lugar, iniciando una
ola de
menciones.
He aquí la versión definitiva del Ajedrez Javascript en 1023
bytes, note que la versión original está escrita en una sola línea que tuvo que
ser dividida en varias para ponerla aquí, además esto es Javascript puro, debe
ser invocado por marcadores HTML tales como <body> <script
src="miniajedrez.js"> </body>
Por último, logré una versión con enroque y captura al paso
en 1024 bytes (¡si es posible!), pero la visualización quedó en blanco y negro,
mientras que la calidad de juego no resultó de mi gusto, funciona como prueba
de concepto, pero no daba el ancho para el concurso.
Fue archivada (aunque publicable aquí si hay ofertas
interesantes :)), en favor de una versión expandida de mi participación
final con enroque y captura al paso, aquí está esa versión de 1251 bytes.
En la parte de arriba de esta página usted puede descargar
el archivo ZIP con los códigos fuente.
Otros programas pequeños de ajedrez en Javascript
Douglas Bagnall de Nueva Zelanda escribió el primer juego de
ajedrez en 5K de Javascript, con motivo del ya desaparecido
concurso de
Javascript de 5K. Los programas más pequeños basados en su código
fuente exceden 4 kilobytes. Estos programas y otros están disponibles en
http://p4wn.sourceforge.net/
El matemático John A. Moody de la Universidad de Warwick en
el Reino Unido también ha escrito su propio
ajedrez pequeño en
Javascript en 2.7 kilobytes, actualmente no detecta movimientos ilegales y
no maneja enroque ni captura al paso.