From 767e7d14fdabb1370db66f5a6c32e918a86cdf2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Fri, 28 Nov 2025 00:15:37 +0200 Subject: [PATCH] added and used method bitboard::makemove::castles::make_castle --- engine/src/bitboard/makemove.rs | 2 +- engine/src/bitboard/makemove/castles.rs | 32 ++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/engine/src/bitboard/makemove.rs b/engine/src/bitboard/makemove.rs index 3299469..f896377 100644 --- a/engine/src/bitboard/makemove.rs +++ b/engine/src/bitboard/makemove.rs @@ -20,7 +20,7 @@ impl Board { self.make_capture(played_move); } BitMoveType::Castle => { - + self.make_castle(played_move); } BitMoveType::EnPassant => { diff --git a/engine/src/bitboard/makemove/castles.rs b/engine/src/bitboard/makemove/castles.rs index 33c9bac..5025631 100644 --- a/engine/src/bitboard/makemove/castles.rs +++ b/engine/src/bitboard/makemove/castles.rs @@ -1,5 +1,35 @@ use super::*; impl Board { - + pub fn make_castle(&mut self, played_move: &BitMove) { + let main_from: usize = played_move.from_square() as usize; + let main_to: usize = played_move.to_square() as usize; + let main_piece: usize = self.piece_board(main_from as u8) as usize; + let friendly_occupancy = main_piece/6; + + let castling_offset = 2 - 2 * self.side_to_move as usize; + + let secondary_piece: usize = main_piece - 2; + let is_kingside = main_to%8 > 4; + let secondary_from: usize = if is_kingside { main_to + 1 } else { main_to - 2 }; + let secondary_to: usize = if is_kingside { main_to - 1 } else { main_to + 1 }; + + self.bitboards[main_piece] |= 1 << main_to; + self.occupancy[friendly_occupancy] |= 1 << main_to; + self.piece_board[main_to] = main_piece as u8; + + self.bitboards[main_piece] &= !(1 << main_from); + self.occupancy[friendly_occupancy] &= !(1 << main_from); + self.piece_board[main_from] = Self::EMPTY_SQUARE; + + self.bitboards[secondary_piece] |= 1 << secondary_to; + self.occupancy[friendly_occupancy] |= 1 << secondary_to; + self.piece_board[secondary_to] = secondary_piece as u8; + + self.bitboards[secondary_piece] &= !(1 << secondary_from); + self.occupancy[friendly_occupancy] &= !(1 << secondary_from); + self.piece_board[secondary_from] = Self::EMPTY_SQUARE; + + self.castling_rights &= !(3 << castling_offset); + } } \ No newline at end of file