Crate crabchess

source ·
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.