diff options
author | eug-vs <eugene@eug-vs.xyz> | 2023-01-26 20:27:35 +0300 |
---|---|---|
committer | eug-vs <eugene@eug-vs.xyz> | 2023-01-26 20:28:28 +0300 |
commit | 1eeda0725263aa1cab7c8f5a81773896ad8bda4f (patch) | |
tree | a14bd988f2a592545ce5e57cbaaaeb4303c8b708 /src/board/mod.rs | |
parent | 587378bc98797ae0b7d8befbd0da1543e138d973 (diff) | |
download | chessnost-1eeda0725263aa1cab7c8f5a81773896ad8bda4f.tar.gz |
fix: correct castle validations
Diffstat (limited to 'src/board/mod.rs')
-rw-r--r-- | src/board/mod.rs | 27 |
1 files changed, 17 insertions, 10 deletions
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 { |