我打算制作一个与UCI国际象棋引擎接口的程序。 我一直在做一些研究,但是我想深入了解一些信息。 我想知道你们中的任何一个人能否提供UCI引擎和前端程序之间的几个“交stream”例子。 我并不真正关心实际的接口代码(如发送/接收命令),应该很简单。 我只是想获得一些小游戏和一些选项的好例子。 目前我正在使用鳕鱼引擎,但我希望能够使用多个引擎。
无论如何,我正在寻找一些关于如何通过UCI玩游戏的例子。
让我们假设GUI正在促进人类用户和引擎之间的匹配。 假设用户从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规范 ( 另一个来源 )中找到的许多其他命令。 你也可以看看现有的GUI是如何工作的。 例如,如果使用Arena ,则可以按F4查看命令交互的日志,