Trait shakmaty::Position [−][src]
Required methods
fn legal_moves(&self) -> MoveList
[src]
Collects all legal moves in an existing buffer.
fn castles(&self) -> &Castles
[src]
Castling paths and unmoved rooks.
fn is_variant_end(&self) -> bool
[src]
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.
fn has_insufficient_material(&self, color: Color) -> bool
[src]
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.
fn variant_outcome(&self) -> Option<Outcome>
[src]
Tests special variant winning, losing and drawing conditions.
fn play_unchecked(&mut self, m: &Move)
[src]
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
fn san_candidates(&self, role: Role, to: Square) -> MoveList
[src]
Generates a subset of legal moves: All piece moves and drops of type
role
to the square to
, excluding castling moves.
fn castling_moves(&self, side: CastlingSide) -> MoveList
[src]
Generates legal castling moves.
fn en_passant_moves(&self) -> MoveList
[src]
Generates en passant moves.
fn capture_moves(&self) -> MoveList
[src]
Generates capture moves.
fn promotion_moves(&self) -> MoveList
[src]
Generate promotion moves.
fn is_irreversible(&self, m: &Move) -> bool
[src]
Tests if a move is irreversible.
In standard chess, pawn moves, captures, moves that destroy castling rights, and moves that cede en-passant are irreversible.
The implementation has false-negatives, because it does not consider forced lines. For example, a checking move that will force the king to lose castling rights is not considered irreversible, only the actual king move is.
fn king_attackers(
&self,
square: Square,
attacker: Color,
occupied: Bitboard
) -> Bitboard
[src]
&self,
square: Square,
attacker: Color,
occupied: Bitboard
) -> Bitboard
Attacks that a king on square
would have to deal with.
fn swap_turn(self) -> Result<Self, PositionError<Self>> where
Self: Sized + FromSetup,
[src]
Self: Sized + FromSetup,
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).
fn is_legal(&self, m: &Move) -> bool
[src]
Tests a move for legality.
fn checkers(&self) -> Bitboard
[src]
Bitboard of pieces giving check.
fn is_check(&self) -> bool
[src]
Tests if the king is in check.
fn is_checkmate(&self) -> bool
[src]
Tests for checkmate.
fn is_stalemate(&self) -> bool
[src]
Tests for stalemate.
fn is_insufficient_material(&self) -> bool
[src]
Tests if both sides have insufficient winning material.
fn is_game_over(&self) -> bool
[src]
Tests if the game is over due to checkmate, stalemate, insufficient material or variant end.
fn outcome(&self) -> Option<Outcome>
[src]
The outcome of the game, or None
if the game is not over.
fn play(self, m: &Move) -> Result<Self, PlayError<Self>> where
Self: Sized,
[src]
Self: Sized,
Implementors
impl Position for VariantPosition
[src]
variant
only.fn legal_moves(&self) -> MoveList
[src]
fn san_candidates(&self, role: Role, to: Square) -> MoveList
[src]
fn castling_moves(&self, side: CastlingSide) -> MoveList
[src]
fn en_passant_moves(&self) -> MoveList
[src]
fn capture_moves(&self) -> MoveList
[src]
fn promotion_moves(&self) -> MoveList
[src]
fn is_irreversible(&self, m: &Move) -> bool
[src]
fn king_attackers(
&self,
square: Square,
attacker: Color,
occupied: Bitboard
) -> Bitboard
[src]
&self,
square: Square,
attacker: Color,
occupied: Bitboard
) -> Bitboard
fn castles(&self) -> &Castles
[src]
fn is_variant_end(&self) -> bool
[src]
fn has_insufficient_material(&self, color: Color) -> bool
[src]
fn variant_outcome(&self) -> Option<Outcome>
[src]
fn play_unchecked(&mut self, m: &Move)
[src]
impl Position for Antichess
[src]
fn play_unchecked(&mut self, m: &Move)
[src]
fn castles(&self) -> &Castles
[src]
fn en_passant_moves(&self) -> MoveList
[src]
fn capture_moves(&self) -> MoveList
[src]
fn legal_moves(&self) -> MoveList
[src]
fn king_attackers(
&self,
_square: Square,
_attacker: Color,
_occupied: Bitboard
) -> Bitboard
[src]
&self,
_square: Square,
_attacker: Color,
_occupied: Bitboard
) -> Bitboard
fn is_variant_end(&self) -> bool
[src]
fn has_insufficient_material(&self, color: Color) -> bool
[src]
fn variant_outcome(&self) -> Option<Outcome>
[src]
impl Position for Atomic
[src]
fn castles(&self) -> &Castles
[src]
fn play_unchecked(&mut self, m: &Move)
[src]
fn legal_moves(&self) -> MoveList
[src]
fn king_attackers(
&self,
square: Square,
attacker: Color,
occupied: Bitboard
) -> Bitboard
[src]
&self,
square: Square,
attacker: Color,
occupied: Bitboard
) -> Bitboard