pub trait Position: Setup {
Show 24 methods
fn from_setup<S: Setup>(setup: &S) -> Result<Self, PositionError>
where
Self: Sized;
fn legal_moves(&self, moves: &mut MoveList);
fn castles(&self) -> &Castles;
fn is_variant_end(&self) -> bool;
fn has_insufficient_material(&self, color: Color) -> bool;
fn variant_outcome(&self) -> Option<Outcome>;
fn play_unchecked(&mut self, m: &Move);
fn swap_turn(self) -> Result<Self, PositionError>
where
Self: Sized,
{ ... }
fn legals(&self) -> MoveList { ... }
fn san_candidates(&self, role: Role, to: Square, moves: &mut MoveList) { ... }
fn castling_moves(&self, side: CastlingSide, moves: &mut MoveList) { ... }
fn en_passant_moves(&self, moves: &mut MoveList) { ... }
fn capture_moves(&self, moves: &mut MoveList) { ... }
fn is_legal(&self, m: &Move) -> bool { ... }
fn is_irreversible(&self, m: &Move) -> bool { ... }
fn king_attackers(
&self,
square: Square,
attacker: Color,
occupied: Bitboard
) -> Bitboard { ... }
fn is_check(&self) -> bool { ... }
fn checkers(&self) -> Bitboard { ... }
fn is_checkmate(&self) -> bool { ... }
fn is_stalemate(&self) -> bool { ... }
fn is_insufficient_material(&self) -> bool { ... }
fn is_game_over(&self) -> bool { ... }
fn outcome(&self) -> Option<Outcome> { ... }
fn play(self, m: &Move) -> Result<Self, IllegalMoveError>
where
Self: Sized,
{ ... }
}
Expand description
A legal chess or chess variant position. See Chess
for a concrete
implementation.
Required Methods
sourcefn from_setup<S: Setup>(setup: &S) -> Result<Self, PositionError>where
Self: Sized,
fn from_setup<S: Setup>(setup: &S) -> Result<Self, PositionError>where
Self: Sized,
sourcefn legal_moves(&self, moves: &mut MoveList)
fn legal_moves(&self, moves: &mut MoveList)
Collects all legal moves in an existing buffer.
sourcefn is_variant_end(&self) -> bool
fn is_variant_end(&self) -> bool
Checks if the game is over due to a special variant end condition.
Note that for example stalemate is not considered a variant-specific
end condition (is_variant_end()
will return false
), but it can have
a special variant_outcome()
in suicide
chess.
sourcefn has_insufficient_material(&self, color: Color) -> bool
fn has_insufficient_material(&self, color: Color) -> bool
Tests if a side has insufficient winning material.
Returns false
if there is any series of legal moves that allows
color
to win the game.
The converse is not necessarily true: The position might be locked up
such that color
can never win the game (even if !color
cooperates),
or insufficient material might only become apparent after a forced
sequence of moves.
The current implementation can be summarized as follows: Looking
only at the material configuration, taking into account if bishops
are positioned on dark or light squares, but not concrete piece
positions, is there a position with the same material configuration
where color
can win with a series of legal moves. If not, then
color
has insufficient winning material.
sourcefn variant_outcome(&self) -> Option<Outcome>
fn variant_outcome(&self) -> Option<Outcome>
Tests special variant winning, losing and drawing conditions.
sourcefn play_unchecked(&mut self, m: &Move)
fn play_unchecked(&mut self, m: &Move)
Plays a move. It is the callers responsibility to ensure the move is legal.
Panics
Illegal moves can corrupt the state of the position and may
(or may not) panic or cause panics on future calls. Consider using
Position::play()
instead.
Provided Methods
sourcefn swap_turn(self) -> Result<Self, PositionError>where
Self: Sized,
fn swap_turn(self) -> Result<Self, PositionError>where
Self: Sized,
Swap turns. This is sometimes called “playing a null move”.
Errors
Returns PositionError
if swapping turns is not possible (usually
due to a check that has to be averted).
sourcefn san_candidates(&self, role: Role, to: Square, moves: &mut MoveList)
fn san_candidates(&self, role: Role, to: Square, moves: &mut MoveList)
Generates a subset of legal moves: All piece moves and drops of type
role
to the square to
, excluding castling moves.
sourcefn castling_moves(&self, side: CastlingSide, moves: &mut MoveList)
fn castling_moves(&self, side: CastlingSide, moves: &mut MoveList)
Generates legal castling moves.
sourcefn en_passant_moves(&self, moves: &mut MoveList)
fn en_passant_moves(&self, moves: &mut MoveList)
Generates en passant moves.
sourcefn capture_moves(&self, moves: &mut MoveList)
fn capture_moves(&self, moves: &mut MoveList)
Generates capture moves.
sourcefn is_irreversible(&self, m: &Move) -> bool
fn is_irreversible(&self, m: &Move) -> bool
Tests if a move is irreversible.
In standard chess pawn moves, captures and moves that destroy castling rights are irreversible.
sourcefn king_attackers(
&self,
square: Square,
attacker: Color,
occupied: Bitboard
) -> Bitboard
fn king_attackers(
&self,
square: Square,
attacker: Color,
occupied: Bitboard
) -> Bitboard
Attacks that a king on square
would have to deal with.
sourcefn is_checkmate(&self) -> bool
fn is_checkmate(&self) -> bool
Tests for checkmate.
sourcefn is_stalemate(&self) -> bool
fn is_stalemate(&self) -> bool
Tests for stalemate.
sourcefn is_insufficient_material(&self) -> bool
fn is_insufficient_material(&self) -> bool
Tests if both sides have insufficient winning material.
sourcefn is_game_over(&self) -> bool
fn is_game_over(&self) -> bool
Tests if the game is over due to checkmate, stalemate, insufficient material or variant end.