Una estructura común que usaba muchos motores de juego de ajedrez hace aproximadamente una década es almacenar el estado del tablero como una estructura simple que contiene 7 enteros de 64 bits.
Cada entero se trata como un campo de bits con cada bit que representa un cuadrado en el tablero.
El primer entero tiene un bit establecido para indicar qué cuadrados contienen piezas blancas.
El segundo tiene un conjunto de bits para indicar un cuadrado que contiene peones.
El tercero tiene un conjunto de bits para indicar que un cuadrado contiene un caballero.
y así.
Las reinas se indican al tener las piezas de alfil y de torre fijadas para ese cuadrado.
El número entero final contiene algunas banderas misceláneas, como qué peones se acaban de mover (para pasar), si las piezas se han movido alguna vez (para enrocar), etc.
- ¿Resolver problemas en Topcoder / Codeforces es una buena manera de aprender Java Collections Framework?
- ¿Cómo entender el algoritmo SHA-1? ¿Cuáles son los mejores ejemplos para ello?
- ¿Qué es lo más profundo que aprendiste al leer SICP?
- ¿Qué algoritmo está detrás de la convolución en MATLAB?
- ¿Hay algún algoritmo de ordenación que funcione en el orden de n?
La razón para usar un formato de aspecto tan arcano es que (1) es muy compacto: permite almacenar todo el estado del juego en los registros del procesador si es necesario, pero lo más importante (2) los movimientos válidos se pueden determinar mediante secuencias cortas de operaciones bit shift y máscara de bits. Permitir que la computadora determine si un movimiento es legal en solo unos pocos ciclos de reloj. Por lo general, la computadora tendrá que evaluar cientos de miles, si no millones, de puestos, por lo que es muy importante poder verificar rápidamente si un movimiento es legal.