pub trait Setup {
Show 13 methods
fn board(&self) -> &Board;
fn promoted(&self) -> Bitboard;
fn pockets(&self) -> Option<&Material>;
fn turn(&self) -> Color;
fn castling_rights(&self) -> Bitboard;
fn ep_square(&self) -> Option<Square>;
fn remaining_checks(&self) -> Option<&ByColor<RemainingChecks>>;
fn halfmoves(&self) -> u32;
fn fullmoves(&self) -> NonZeroU32;
fn us(&self) -> Bitboard { ... }
fn our(&self, role: Role) -> Bitboard { ... }
fn them(&self) -> Bitboard { ... }
fn their(&self, role: Role) -> Bitboard { ... }
}
Expand description
A not necessarily legal position.
Required methods
fn castling_rights(&self) -> Bitboard
fn castling_rights(&self) -> Bitboard
Castling rights in terms of corresponding rook positions.
use shakmaty::{Bitboard, Chess, Setup};
let pos = Chess::default();
let rooks = pos.castling_rights();
// 1 . . . . . . 1
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// 1 . . . . . . 1
assert_eq!(rooks, Bitboard::CORNERS);
En passant target square on the third or sixth rank.
When implemented by a Position
, en passant squares
are only given if there is a fully legal en passant capture.
fn remaining_checks(&self) -> Option<&ByColor<RemainingChecks>>
fn remaining_checks(&self) -> Option<&ByColor<RemainingChecks>>
Remaining checks in chess variants like Three-Check.
Number of half-moves since the last capture or pawn move.
Examples
use shakmaty::{Chess, Setup};
let pos = Chess::default();
assert_eq!(pos.halfmoves(), 0);
fn fullmoves(&self) -> NonZeroU32
fn fullmoves(&self) -> NonZeroU32
Current move number.
Starts at 1 and is increased after every black move.
Examples
use shakmaty::{Chess, Setup};
let pos = Chess::default();
assert_eq!(pos.fullmoves().get(), 1);
Provided methods
Squares occupied by the side to move.
Examples
use shakmaty::{Bitboard, Chess, Rank, Setup};
let pos = Chess::default();
let mask = pos.us();
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// 1 1 1 1 1 1 1 1
// 1 1 1 1 1 1 1 1
assert_eq!(mask, Bitboard::from(Rank::First) | Bitboard::from(Rank::Second));
Squares occupied by a given piece type of the side to move.
Examples
use shakmaty::{Bitboard, Chess, Role, Setup, Square};
let pos = Chess::default();
let mask = pos.our(Role::Queen);
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . 1 . . . .
assert_eq!(mask, Bitboard::from_square(Square::D1));
Squares occupied by the waiting player.
Examples
use shakmaty::{Bitboard, Chess, Rank, Setup};
let pos = Chess::default();
let mask = pos.them();
// 1 1 1 1 1 1 1 1
// 1 1 1 1 1 1 1 1
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
assert_eq!(mask, Bitboard::from(Rank::Seventh) | Bitboard::from(Rank::Eighth));
Squares occupied by a given piece type of the waiting player.
Examples
use shakmaty::{Bitboard, Chess, Role, Setup, Square};
let pos = Chess::default();
let mask = pos.their(Role::Queen);
// . . . 1 . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
// . . . . . . . .
assert_eq!(mask, Bitboard::from_square(Square::D8));