Implement halfmove/fullmove counters
This commit is contained in:
19
src/move.rs
19
src/move.rs
@@ -125,8 +125,9 @@ impl Board {
|
||||
Some(mv.src - 8),
|
||||
),
|
||||
};
|
||||
let pawn_move = Self::is_pawn_move(mv.src, &own_pieces[Kind::Pawn]);
|
||||
|
||||
Self::update_game_state(&mut self.state, mv.src, mv.dst, color);
|
||||
Self::update_game_state(&mut self.state, mv, color, pawn_move);
|
||||
|
||||
match &mv.move_type {
|
||||
MoveType::Quiet => {
|
||||
@@ -161,10 +162,12 @@ impl Board {
|
||||
}
|
||||
}
|
||||
|
||||
fn update_game_state(state: &mut State, src: usize, dst: usize, color: Color) {
|
||||
fn update_game_state(state: &mut State, mv: &Move, color: Color, pawn_move: bool) {
|
||||
state.set_en_passant_target_square(None);
|
||||
state.update_castling_state_quiet(src, color);
|
||||
state.update_castling_state_capture(dst, Color::opponent_color(color));
|
||||
state.update_castling_state_quiet(mv.src, color);
|
||||
state.update_castling_state_capture(mv.dst, Color::opponent_color(color));
|
||||
state.update_half_move(mv.move_type, pawn_move);
|
||||
state.update_full_move(color);
|
||||
state.change_side();
|
||||
}
|
||||
|
||||
@@ -214,6 +217,10 @@ impl Board {
|
||||
|
||||
Self::remove_piece(piece_to_remove, pieces);
|
||||
}
|
||||
|
||||
const fn is_pawn_move(square: usize, pawns: &Piece) -> bool {
|
||||
have_common_bit(square_to_bitboard(square), pawns.bitboard)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -257,7 +264,7 @@ mod tests {
|
||||
|
||||
const FEN_EN_PASSANT: [&str; 2] = [
|
||||
"r3k2r/2p1p1qp/2npb3/1p3p2/p3P1pP/P1PB1Q2/1P1PNPP1/R3K2R b KQkq h3 0 1",
|
||||
"r3k2r/2p1p1qp/2npb3/1p3p2/p3P3/P1PB1Q1p/1P1PNPP1/R3K2R w KQkq - 0 1",
|
||||
"r3k2r/2p1p1qp/2npb3/1p3p2/p3P3/P1PB1Q1p/1P1PNPP1/R3K2R w KQkq - 0 2",
|
||||
];
|
||||
|
||||
#[test]
|
||||
@@ -316,7 +323,7 @@ mod tests {
|
||||
|
||||
const FEN_CASTLE: [&str; 2] = [
|
||||
"r3k2r/2p1p1qp/2npb3/1p3p2/p3P1pP/P1PB1Q2/1P1PNPP1/R3K2R w KQkq - 0 1",
|
||||
"r3k2r/2p1p1qp/2npb3/1p3p2/p3P1pP/P1PB1Q2/1P1PNPP1/R4RK1 b kq - 0 1",
|
||||
"r3k2r/2p1p1qp/2npb3/1p3p2/p3P1pP/P1PB1Q2/1P1PNPP1/R4RK1 b kq - 1 1",
|
||||
];
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user