Sebastian Lage tiene este estupendo vídeo acerca de Chess AI&ast, que es un resumen en 30 minutos sobre la creación de un programa que juega al ajedrez desde cero. Está escrito en C# en el motor de Unity (el código está en Github) y está todo tan bien explicado que no debe ser difícil adaptarlo a otros lenguajes. Se puede descargar para jugar y verlo en acción. No lo hace mal, aunque parece un tanto glotón.
Todo resulta sumamente didáctico: los primeros minutos del vídeo explican cómo representar el tablero y las piezas con números y variables, luego gráficamente y también cómo generar los movimientos, turnos, etcétera. Luego analiza cómo optimizarlo y probarlo todo, al principio con movimientos aleatorios y luego metódicamente. El resto de reglas del juego se van añadiendo poco a poco, incluyendo los avances y capturas de los peones, el enroque y sus excepciones, la captura al paso y demás (quizá la de las tablas tras 50 movimientos sin capturas ni avances de peón no esté incluida).
Un detalle interesante es cómo utiliza posiciones de prueba conocidas (lo que se suele llamar un testbed) para encontrar bugs y otros problemas. Otro es la técnica de contabilizar metódicamente todas las posibilidades (por ejemplo, los movimientos generados y posiciones evaluadas) para confirmar los datos en las pruebas. Hay que tener paciencia: como se suele decir con el 10% del código el programa hará el 90% de lo que se supone que tiene que hacer pero se necesitará el 90% …