#uci #chess #engine #wrapper

bin+lib uciengine

Use chess engine wrapper supporting uci command necessary for playing a game. Analysis is not supported.

25 releases

new 0.1.24 Jan 17, 2021
0.1.23 Jan 17, 2021

#77 in Game dev

Download history 292/week @ 2021-01-02 112/week @ 2021-01-09

136 downloads per month
Used in lichessbot

MIT license

17KB
374 lines

uciengine

documentation Crates.io Crates.io (recent)

Rust uci engine wrapper.

Usage

#[macro_use]
extern crate log;

extern crate env_logger;

use uciengine::uciengine::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
	env_logger::init();
	
	info!("starting up");
	
	let go_job1 = GoJob::new()				
		.uci_opt("UCI_Variant", "atomic")
		.uci_opt("Hash", 128)
		.uci_opt("Threads", 4)
		.pos_fen("k7/8/8/8/8/8/R7/7K w - - 0 1")
		.pos_moves("h1h2")
		.tc(Timecontrol{
			wtime: 15000,
			winc: 0,
			btime: 15000,
			binc: 0
		})
	;
	
	let go_job2 = GoJob::new()			
		.uci_opt("UCI_Variant", "chess")
		.pos_startpos()
		.go_opt("depth", 12)
	;
			
	let engine = UciEngine::new("./stockfish12");
	
	let ( engine_clone1 , engine_clone2 ) = ( engine.clone(), engine.clone() );
	
	tokio::spawn(async move {	
		let engine = engine_clone1;
	
		let go_result = engine.go(go_job1).recv().await;

		println!("go result 1 {:?}", go_result);
	});
	
	tokio::spawn(async move {		
		let engine = engine_clone2;
	
		let go_result = engine.go(go_job2).recv().await;

		println!("go result 2 {:?}", go_result);
		
		engine.quit();
	});
	
	tokio::time::sleep(tokio::time::Duration::from_millis(20000)).await;
		
	Ok(())
}

Logging

export RUST_LOG=info
# or
export RUST_LOG=debug

Dependencies

~4MB
~81K SLoC