I'm planning on making a program that interfaces with a UCI chess engine. I've been doing some research on it, but I want to get a little more information before I get more in depth with it. I was wondering if any of you could provide a few example "exchanges" between a UCI engine and a front-end program. I'm not really concerned with the practical interface code (like sending/receiving commands), that should be simple enough. I'm just trying to get some good examples of a small game and some options. I'm using the stockfish engine currently, but I want to be able to use multiple engines.
So anyhow, I'm looking for some examples of how to play a game over UCI.
UCI, (Universal Chess Interface) an open communication protocol for chess engines to play games automatically, that is to communicate with other programs including Graphical User Interfaces.
The Universal Chess Interface (UCI) is an open communication protocol that enables chess engines to communicate with user interfaces.
Stockfish is a free, powerful UCI chess engine derived from Glaurung 2.1. Stockfish is not a complete chess program and requires a UCI-compatible graphical user interface (GUI) (e.g. XBoard with PolyGlot, Scid, Cute Chess, eboard, Arena, Sigma Chess, Shredder, Chess Partner or Fritz) in order to be used comfortably.
Let's assume the GUI is facilitating a match between a human user and an engine. Let's say the user starts with e2e4
. Then the commands would look something like:
// 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
I've simplified many aspects of the interaction. A fully featured GUI will have to support lots of other commands that you can find in the UCI specification (another source). You can also look at how existing GUIs work. For example, if you use Arena, you can hit F4 to see a log of the command interaction,
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With