use sashite_qi::{Player, Qi};
fn main() -> Result<(), sashite_qi::Error> {
let start = Qi::new(&[8, 8], "C", "c")?.board_diff([
(4, Some("K")), (0, Some("R")), (60, Some("k")), (59, Some("q")), ])?;
println!("Initial position ({} to move):", side(start.turn()));
print_board(&start);
println!("pieces on board: {}\n", start.piece_count());
let after = start
.board_diff([(0, None), (59, Some("R"))])?
.first_hand_diff([("q", 1)])?
.toggle();
println!("After the capture on 59 ({} to move):", side(after.turn()));
print_board(&after);
println!("pieces on board: {}", after.board_piece_count());
println!(
"first player's hand holds {} piece(s):",
after.hand_piece_count()
);
for (piece, count) in after.first_hand() {
println!(" {count} × {piece}");
}
Ok(())
}
fn print_board(pos: &Qi<&str, &str>) {
let files = pos.shape()[1];
for (index, square) in pos.board().iter().enumerate() {
match square {
Some(piece) => print!(" {piece}"),
None => print!(" ."),
}
if (index + 1) % files == 0 {
println!();
}
}
}
fn side(player: Player) -> &'static str {
match player {
Player::First => "first player",
Player::Second => "second player",
}
}