Struct bughouse::BoardBuilder[][src]

pub struct BoardBuilder { /* fields omitted */ }
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 chess::{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 chess::{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 chess::{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 chess::{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 chess::{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 chess::{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 chess::{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 chess::{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 chess::{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 chess::{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 chess::{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

Performs the conversion.

Performs the conversion.

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

Performs the conversion.

Performs the conversion.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

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.