From 1eeda0725263aa1cab7c8f5a81773896ad8bda4f Mon Sep 17 00:00:00 2001 From: eug-vs Date: Thu, 26 Jan 2023 20:27:35 +0300 Subject: fix: correct castle validations --- src/board/mod.rs | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'src/board/mod.rs') diff --git a/src/board/mod.rs b/src/board/mod.rs index 76ebd59..589da8a 100644 --- a/src/board/mod.rs +++ b/src/board/mod.rs @@ -316,14 +316,18 @@ impl Board { { match rook_square.file() { 0 => { - let castle_line = [ - king_home_position, + let all_empty = [ king_home_position.west_one(), king_home_position.west_one().west_one(), - ]; + king_home_position.west_one().west_one().west_one(), - let all_empty = castle_line.iter().skip(1).all(|square| empty & square.to_bitboard() > 0); - let any_checks = castle_line.iter().any(|square| self.is_square_attacked(*square, color.flip())); + ].iter().all(|square| empty & square.to_bitboard() > 0); + + let any_checks = [ + king_home_position, + king_home_position.west_one(), + king_home_position.west_one().west_one(), + ].iter().any(|square| self.is_square_attacked(*square, color.flip())); if all_empty && !any_checks && self.castling_rights[color as usize][CastlingSide::Queen as usize] { moves.push(Move { @@ -334,14 +338,17 @@ impl Board { } }, 7 => { - let castle_line = [ - king_home_position, + let all_empty = [ king_home_position.east_one(), king_home_position.east_one().east_one(), - ]; - let all_empty = castle_line.iter().skip(1).all(|square| empty & square.to_bitboard() > 0); - let any_checks = castle_line.iter().any(|square| self.is_square_attacked(*square, color.flip())); + ].iter().all(|square| empty & square.to_bitboard() > 0); + + let any_checks = [ + king_home_position, + king_home_position.east_one(), + king_home_position.east_one().east_one(), + ].iter().any(|square| self.is_square_attacked(*square, color.flip())); if all_empty && !any_checks && self.castling_rights[color as usize][CastlingSide::King as usize] { moves.push(Move { -- cgit v1.2.3