Expand description
Tools for analyzing chess positions and building chess software in Rust.
crabchess
is a 100% Rust Chess API with no unsafe
code that enables you to build
chess-related software tools. crabchess
can import and export PGNs (Portable Game Notation)
and FENs (Forsyth-Edwards Notation), determine the status of a game of chess, identify illegal
move attempts, determine a game’s ECO opening, track players’ time remaining, and much more.
crabchess
works not only with standard chess but also random board configurations like
Fischer random chess (Chess960).
§Example
Most of the core functionality is exposed through the ChessPosition
struct, which represents
a game of chess. The ChessPosition
struct can be mutated and consulted as a game progresses.
use crabchess::prelude::*;
// Create board with default (Staunton) starting position.
let mut position = ChessPosition::new();
// Apply moves in SAN format.
position
.apply_sans("e4 e6 Nf3 g6 d4 Bg7 e5 Ne7 g4".split(' '))
.unwrap();
// Or, use the `Move` enum.
position
.apply_move(Move::Castle {
side: Side::Kingside,
color: Color::Black,
timer_update: None,
})
.unwrap();
assert_eq!(
position.fen(),
"rnbq1rk1/ppppnpbp/4p1p1/4P3/3P2P1/5N2/PPP2P1P/RNBQKB1R w KQ - 1 6"
);
position
.apply_move(Move::Standard {
initial_square: sq!(F3),
piece_type: Type::Knight,
piece_color: Color::White,
final_square: sq!(G5),
is_capture: false,
timer_update: None,
})
.unwrap();
Modules§
- This module contains types representing a chessboard and its squares.
- This module allows you to create performant trees of chess openings nested by move.
- Tools for importing and exporting to Portable Game Notation.
- This module contains the basic types that make up a chess piece.
- This module houses the
ChessPosition
struct, which holds the state of a game of chess, including its move history, clock history, PGN fields, and status. - Tools for navigating and relating the squares on a chessboard.
Macros§
- Create a square from its file and rank.
- Create a vector of squares.
- Test a move on a
ChessPosition
without actually changing its state.