17 releases
0.3.0-alpha.3 | Oct 18, 2023 |
---|---|
0.3.0-alpha.2 | Oct 17, 2023 |
0.2.0 | Apr 17, 2023 |
0.1.12 | Apr 11, 2023 |
0.1.0 | Mar 30, 2023 |
#610 in Games
41KB
822 lines
sacrifice
A feature-rich chess library for Rust based on .
sac = { package = "sacrifice", version = "0.3.0-alpha.2" }
Example
fn main() {
let mut game = sac::read_pgn(
"1. e4 { this blunders into the Sicilian Defense } 1... c5"
);
println!("{}", game); // exports the PGN string
let mut root = game.root();
// Play the Open Sicilian with 2. Nf3
let open_sicilian = sac::Move::Normal {
role: sac::Role::Knight,
from: sac::Square::G1,
to: sac::Square::F3,
capture: None,
promotion: None,
};
let mut new_node = root.new_variation(open_sicilian).unwrap(); // 2. Nf3 node
println!("{}", game); // exports the PGN string after 2. Nf3
// Take back the previous 2. Nf3 move
new_node.remove_node();
println!("{}", game);
// What if someone want to play 1. d4?
let queens_pawn = sac::Move::Normal {
role: sac::Role::Pawn,
from: sac::Square::D2,
to: sac::Square::D4,
capture: None,
promotion: None,
};
let new_node = root.new_variation(queens_pawn); // 1. d4 node
println!("{}", game); // 1. e4 (1. d4) 1... c5
}
Features
For now, it supports
- Game tree traversal
- PGN se/deserialization
- Comments
- NAG notations
Dependencies
~1.5MB
~21K SLoC