Estoy interesado en programar un motor de ajedrez y usar bitboards para representar el estado del juego. Sé que hay algunos motores de ajedrez de código abierto que usan bitboards, pero no es tan fácil mirar el código y entender lo que está sucediendo. Estoy buscando un buen material de referencia sobre cómo representar todo el estado en bitboards.
Explicar claramente cómo mantener el estado del juego usando bitboards, y especialmente cómo generar una lista de movimientos válidos desde cualquier bitboard dado, o proporcionar buenas referencias a dicha explicación le dará la marca verde.
engines
software
open-source
axiopistía
fuente
fuente
Respuestas:
El mejor recurso para la programación del motor de ajedrez es el Wiki de Programación de Ajedrez , que tiene una gran sección sobre bitboards . Todo lo que necesita para hacer un motor basado en bitboard está ahí, aunque está bastante extendido y algunas veces escrito por personas para quienes el inglés es un segundo idioma.
fuente
¿Qué lenguaje de programación quieres usar?
Para implementar un tablero de bits en C #, use System.UInt64 . Esto puede contener 64 bits, 1 por cada cuadrado del tablero de ajedrez. Este tipo de valor se presta para muchas operaciones rápidas a nivel de bits.
Este es un buen tutorial de bitboard .
Aquí hay algunos ejemplos de mi propio motor de ajedrez C #. Como puede ver en el código, puede llevar un tiempo comprender los bitboards, pero generalmente son muy rápidos, especialmente para la evaluación de la posición.
Ejemplo 1 - Definición de Bitboard:
Ejemplo 2 - Inicialización de Bitboard:
Ejemplo 3 - Generación de movimiento:
Ejemplo 4 - Calcular puntaje de material:
Ejemplo 5 - Cálculo de la movilidad de la pieza:
fuente