linux interface chess uci

linux - Usando la interfaz universal de ajedrez



interface chess (1)

Asumamos que la GUI está facilitando una coincidencia entre un usuario humano y un motor. Digamos que el usuario comienza con e2e4 . Entonces los comandos se verían como:

// GUI: tell the engine to use the UCI protocol uci // ENGINE: identify id name Chess Engine id author John Smith // ENGINE: send the options that can be changed // in this case the hash size can have a value from 1 to 128 MB option name Hash type spin default 1 min 1 max 128 // ENGINE: sent all parameters and is ready uciok // GUI: set hash to 32 MB setoption name Hash value 32 // GUI: waiting for the engine to finish initializing isready // ENGINE: finished setting up the internal values and is ready to start readyok // GUI: let the engine know if starting a new game ucinewgame // GUI: tell the engine the position to search position startpos moves e2e4 // GUI: tell the engine to start searching // in this case give it the timing information in milliseconds go wtime 122000 btime 120000 winc 2000 binc 2000 // ENGINE: send search information continuously during search // this includes depth, search value, time, nodes, speed, and pv line info depth 1 score cp -1 time 10 nodes 26 nps 633 pv e7e6 info depth 2 score cp -38 time 22 nodes 132 nps 2659 pv e7e6 e2e4 info depth 3 score cp -6 time 31 nodes 533 nps 10690 pv d7d5 e2e3 e7e6 info depth 4 score cp -30 time 55 nodes 1292 nps 25606 pv d7d5 e2e3 e7e6 g1f3 // ENGINE: return the best move found bestmove d7d5

He simplificado muchos aspectos de la interacción. Una GUI con todas las funciones tendrá que admitir muchos otros comandos que puede encontrar en la especificación UCI ( otra fuente ). También puede ver cómo funcionan las GUI existentes. Por ejemplo, si usa Arena , puede presionar F4 para ver un registro de la interacción del comando,

Estoy planeando hacer un programa que interactúe con un motor de ajedrez UCI. He estado haciendo algunas investigaciones al respecto, pero quiero obtener un poco más de información antes de profundizar más en eso. Me preguntaba si alguno de ustedes podría proporcionar algunos ejemplos de "intercambios" entre un motor UCI y un programa de front-end. No estoy realmente preocupado por el código de interfaz práctico (como enviar / recibir comandos), que debería ser lo suficientemente simple. Solo estoy tratando de obtener algunos buenos ejemplos de un juego pequeño y algunas opciones. Actualmente estoy usando el motor de stockfish, pero quiero poder usar varios motores.

De todos modos, estoy buscando algunos ejemplos de cómo jugar un juego sobre UCI.