[board, core, moves, position] Implement castling
Implement a new method on Position that evaluates whether the active color can castle on a given wing of the board. Then, implement making a castling move in the position. Make a new Wing enum in the core crate to specify kingside or queenside. Replace the Castle enum from the board crate with this one. This caused a lot of churn... Along the way fix a bunch of tests. Note: there's still no way to actually make a castling move in explorer.
This commit is contained in:
parent
6816e350eb
commit
0c1863acb9
18 changed files with 499 additions and 258 deletions
|
@ -7,7 +7,7 @@ use crate::{
|
|||
PieceSet,
|
||||
};
|
||||
use chessfriend_bitboard::BitBoard;
|
||||
use chessfriend_core::{Color, Piece, Shape, Square};
|
||||
use chessfriend_core::{Color, Piece, Shape, Square, Wing};
|
||||
|
||||
#[derive(Clone, Debug, Default, Eq, PartialEq)]
|
||||
pub struct Board {
|
||||
|
@ -82,10 +82,12 @@ impl Board {
|
|||
}
|
||||
|
||||
impl Board {
|
||||
/// A [`BitBoard`] of squares occupied by pieces of all colors.
|
||||
pub fn occupancy(&self) -> BitBoard {
|
||||
self.pieces.occpuancy()
|
||||
}
|
||||
|
||||
/// A [`BitBoard`] of squares that are vacant.
|
||||
pub fn vacancy(&self) -> BitBoard {
|
||||
!self.occupancy()
|
||||
}
|
||||
|
@ -99,6 +101,13 @@ impl Board {
|
|||
}
|
||||
}
|
||||
|
||||
impl Board {
|
||||
#[must_use]
|
||||
pub fn castling_parameters(&self, wing: Wing) -> &'static castle::Parameters {
|
||||
&castle::Parameters::BY_COLOR[self.active_color as usize][wing as usize]
|
||||
}
|
||||
}
|
||||
|
||||
impl Board {
|
||||
pub fn display(&self) -> DiagramFormatter<'_> {
|
||||
DiagramFormatter::new(self)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue