Использование универсального шахматного интерфейса

Я планирую создать программу, которая взаимодействует с шахматным движком UCI. Я занимался некоторыми исследованиями, но я хочу получить немного больше информации, прежде чем я углубится в нее. Мне было интересно, может ли кто-нибудь из вас предоставить несколько примеров "обменов" между движком UCI и интерфейсной программой. Я не очень разбираюсь в практическом интерфейсе (например, команды отправки/получения), который должен быть достаточно простым. Я просто пытаюсь получить хорошие примеры небольшой игры и некоторых вариантов. В настоящее время я использую движок Stockfish, но я хочу иметь возможность использовать несколько двигателей.

Так или иначе, я ищу примеры того, как играть в игру по UCI.

Ответы

Ответ 1

Предположим, что графический интерфейс облегчает совпадение между пользователем пользователя и движком. Скажем, пользователь начинает с e2e4. Тогда команды будут выглядеть примерно так:

// 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

Я упростил многие аспекты взаимодействия. Полнофункциональный GUI должен поддерживать множество других команд, которые вы можете найти в спецификации UCI (другой источник). Вы также можете посмотреть, как работают существующие графические интерфейсы. Например, если вы используете Arena, вы можете нажать F4, чтобы увидеть журнал взаимодействия с командой,