Como ya explique en un post, estoy desarrollando un juego de ajedrez (no el interface, sino la parte que piensa). En aquel post explique el uso de los Bitboard y los datos precomputados. Ahora voy a explicar los progresos que he hecho, que han sido bastantes.
1) He desarrollado el generador de listado movimientos para una posición dada, así como los funciones “hacerMovimiento()” y “deshacerMovimiento()” que cambian la situacion del tablero
2) He desarrollado una función de evaluacion de la posicion, es decir, una función que nos dice que virtudes y defectos tiene nuestra posición (peones pasados, seguridad del rey, mobilidad de las piezas, etc.) Esta función se calcula para blancas y para negras.
3) Un algoritmo de búsqueda para elegir un movimiento en una posición, un tanto sofisticado (llamado negamax, con poda alpha-beta y con heurística de movimiento nulo). Un tanto complicado, pero básicamente consiste en elegir siempre un movimiento asumiendo que nuestro adversario siempre va a jugar el mejor que tiene disponible. El algoritmo funciona muy bien si ordenamos primero los movimientos mas prometedores, de esta forma el arbol de variantes crece poco. Esto último es un gran problema, pero hay técnicas para mejorarlo.
4) Un gestor del tiempo restante de la partida, guardar las partidas y lo que el motor penso en cada movimiento para un posterior analisis y detectar donde el motor “piensa mal”, ……
De momento el motor ya juega, y lo pongo a jugar contra otros motores por la noche, y de momento estoy obteniendo resultados aceptabes, aunque tengo que corregir todavía muchos bugs.
Dentro de poco lo inscribire para jugar torneos internacionales por Internet contra otros motores…. incluso hay campeonatos del mundo de este tipo de motores con premios incluidos. También lo colgare en una web por si hay gente que quiera descargarselo y echar una partida.
No voy a entrar en detalles….. como este es un proyecto que lleva mucho tiempo ya ire comentando detalles….
Saludos
FS