shogi-rs

Github Actions Coverage Status crates.io docs.rs

A Bitboard-based shogi library in Rust. Board representation, move generation/validation and time control utilities.

Documentation

Usage

A library for implementing Shogi application.

shogi provides a various types and implementations for representing concepts and rules in Shogi. Most types can be created programatically while they can also be deserialized from / serialized to SFEN format. See USIプロトコルとは (What is the USI protocol?) for more detail about UCI protocol specification and SFEN format.

Examples

```rust use shogi::{Move, Position}; use shogi::bitboard::Factory as BBFactory; use shogi::square::consts::*;

BBFactory::init(); let mut pos = Position::new();

// Position can be set from the SFEN formatted string. pos.set_sfen("lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1").unwrap();

// You can programatically create a Move instance. let m = Move::Normal{from: SQ7G, to: SQ7F, promote: false}; pos.make_move(m).unwrap();

// Move can be created from the SFEN formatted string as well. let m = Move::fromsfen("7c7d").unwrap(); pos.makemove(m).unwrap();

// Position can be converted back to the SFEN formatted string. asserteq!("lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1 moves 7g7f 7c7d", pos.tosfen()); ```

License

shogi-rs is licensed under the MIT license. Please read the LICENSE file in this repository for more information.