Struct candidate::BoardBuilder

source ·
pub struct BoardBuilder { /* private fields */ }
Expand description

Represents a chess position that has not been validated for legality.

This structure is useful in the following cases:

  • You are trying to build a chess board manually in code.
  • The Board structure will try to keep the position fully legal, which will prevent you from placing pieces arbitrarily. This structure will not.
  • You want to display the chess position in a UI.
  • You want to convert between formats like FEN.
use candidate::{BoardBuilder, Board, Square, Color, Piece};
use std::convert::TryFrom;
let mut position = BoardBuilder::new();
position.piece(Square::A1, Piece::King, Color::White);
position.piece(Square::A8, Piece::Rook, Color::Black);
position.piece(Square::D1, Piece::King, Color::Black);

// You can index the position by the square:
assert_eq!(position[Square::A1], Some((Piece::King, Color::White)));

// White is in check, but that's ok, it's white's turn to move.
assert!(Board::try_from(&position).is_ok());

// Now White is in check, but Black is ready to move.  This position is invalid.
position.side_to_move(Color::Black);
assert!(Board::try_from(position).is_err());

// One liners are possible with the builder pattern.
use std::convert::TryInto;

let res: Result<Board, _> = BoardBuilder::new()
                       .piece(Square::A1, Piece::King, Color::White)
                       .piece(Square::A8, Piece::King, Color::Black)
                       .try_into();
assert!(res.is_ok());

Implementations§

Construct a new, empty, BoardBuilder.

  • No pieces are on the board
  • CastleRights are empty for both sides
  • en_passant is not set
  • side_to_move is Color::White
use candidate::{BoardBuilder, Board, Square, Color, Piece};
use std::convert::TryInto;

let board: Board = BoardBuilder::new()
    .piece(Square::A1, Piece::King, Color::White)
    .piece(Square::A8, Piece::King, Color::Black)
    .try_into()?;

Set up a board with everything pre-loaded.

use candidate::{BoardBuilder, Board, Square, Color, Piece, CastleRights};
use std::convert::TryInto;

let board: Board = BoardBuilder::setup(
        &[
            (Square::A1, Piece::King, Color::White),
            (Square::H8, Piece::King, Color::Black)
        ],
        Color::Black,
        CastleRights::NoRights,
        CastleRights::NoRights,
        None)
    .try_into()?;

Get the current player

use candidate::{BoardBuilder, Board, Color};

let bb: BoardBuilder = Board::default().into();
assert_eq!(bb.get_side_to_move(), Color::White);

Get the castle rights for a player

use candidate::{BoardBuilder, Board, CastleRights, Color};

let bb: BoardBuilder = Board::default().into();
assert_eq!(bb.get_castle_rights(Color::White), CastleRights::Both);

Get the current en_passant square

use candidate::{BoardBuilder, Board, Square, ChessMove};

let board = Board::default()
    .make_move_new(ChessMove::new(Square::E2, Square::E4, None))
    .make_move_new(ChessMove::new(Square::H7, Square::H6, None))
    .make_move_new(ChessMove::new(Square::E4, Square::E5, None))
    .make_move_new(ChessMove::new(Square::D7, Square::D5, None));
let bb: BoardBuilder = board.into();
assert_eq!(bb.get_en_passant(), Some(Square::D5));

Set the side to move on the position

This function can be used on self directly or in a builder pattern.

use candidate::{BoardBuilder, Color};
BoardBuilder::new()
             .side_to_move(Color::Black);      

let mut bb = BoardBuilder::new();
bb.side_to_move(Color::Black);

Set the castle rights for a particular color on the position

This function can be used on self directly or in a builder pattern.

use candidate::{BoardBuilder, Color, CastleRights};
BoardBuilder::new()
             .castle_rights(Color::White, CastleRights::NoRights);

let mut bb = BoardBuilder::new();
bb.castle_rights(Color::Black, CastleRights::Both);

Set a piece on a square.

Note that this can and will overwrite another piece on the square if need.

Note also that this will not update your castle rights.

This function can be used on self directly or in a builder pattern.

use candidate::{BoardBuilder, Color, Square, Piece};

BoardBuilder::new()
             .piece(Square::A1, Piece::Rook, Color::White);

let mut bb = BoardBuilder::new();
bb.piece(Square::A8, Piece::Rook, Color::Black);

Clear a square on the board.

Note that this will not update your castle rights.

This function can be used on self directly or in a builder pattern.

use candidate::{BoardBuilder, Square, Board};

let mut bb: BoardBuilder = Board::default().into();
bb.clear_square(Square::A1);

Set or clear the en_passant File.

This function can be used directly or in a builder pattern.

use candidate::{BoardBuilder, Square, Board, File, Color, Piece};

BoardBuilder::new()
             .piece(Square::E4, Piece::Pawn, Color::White)
             .en_passant(Some(File::E));

Trait Implementations§

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Returns the “default value” for a type. Read more
Formats the value using the given formatter. Read more
Converts to this type from the input type.
Converts to this type from the input type.
The associated error which can be returned from parsing.
Parses a string s to return a value of this type. Read more
The returned type after indexing.
Performs the indexing (container[index]) operation. Read more
Performs the mutable indexing (container[index]) operation. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
Converts the given value to a String. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.