Skip to content

Commit 3f29d7a

Browse files
committed
Tweak generate_castling_moves
1 parent fb8a96a commit 3f29d7a

1 file changed

Lines changed: 9 additions & 23 deletions

File tree

chess/__init__.py

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3476,16 +3476,11 @@ def _attacked_for_king(self, path):
34763476
return False
34773477

34783478
def generate_castling_moves(self, from_mask=BB_ALL, to_mask=BB_ALL):
3479-
king = self.occupied_co[self.turn] & self.kings & ~self.promoted & from_mask
3480-
king_square = bit_scan(king)
3481-
if king_square is None or king_square == -1:
3482-
return
3483-
3484-
if self.is_check():
3485-
return
3486-
3487-
king_file_index = file_index(bit_scan(king))
34883479
backrank = BB_RANK_1 if self.turn == WHITE else BB_RANK_8
3480+
king = self.occupied_co[self.turn] & self.kings & ~self.promoted & backrank & from_mask
3481+
king = king & -king
3482+
if not king or self.is_check():
3483+
return
34893484

34903485
bb_a = BB_FILE_A & backrank
34913486
bb_c = BB_FILE_C & backrank
@@ -3496,9 +3491,8 @@ def generate_castling_moves(self, from_mask=BB_ALL, to_mask=BB_ALL):
34963491
candidates = self.clean_castling_rights() & backrank & to_mask
34973492
while candidates:
34983493
rook = candidates & -candidates
3499-
rook_file_index = file_index(bit_scan(rook))
35003494

3501-
a_side = rook_file_index < king_file_index
3495+
a_side = rook < king
35023496

35033497
# In the special case where we castle queenside and our rook
35043498
# shielded us from an attack from a1 or a8, castling would be
@@ -3512,27 +3506,19 @@ def generate_castling_moves(self, from_mask=BB_ALL, to_mask=BB_ALL):
35123506

35133507
if a_side:
35143508
if not rook & bb_d:
3515-
empty_for_rook = (
3516-
RANK_ATTACKS[rook][rook | bb_d] &
3517-
RANK_ATTACKS[bb_d][bb_d | rook])
3509+
empty_for_rook = RANK_ATTACKS[rook][rook | bb_d] & RANK_ATTACKS[bb_d][bb_d | rook]
35183510
empty_for_rook |= bb_d
35193511

35203512
if not king & bb_c:
3521-
empty_for_king = (
3522-
RANK_ATTACKS[king][king | bb_c] &
3523-
RANK_ATTACKS[bb_c][bb_c | king])
3513+
empty_for_king = RANK_ATTACKS[king][king | bb_c] & RANK_ATTACKS[bb_c][bb_c | king]
35243514
empty_for_king |= bb_c
35253515
else:
35263516
if not rook & bb_f:
3527-
empty_for_rook = (
3528-
RANK_ATTACKS[rook][rook | bb_f] &
3529-
RANK_ATTACKS[bb_f][bb_f | rook])
3517+
empty_for_rook = RANK_ATTACKS[rook][rook | bb_f] & RANK_ATTACKS[bb_f][bb_f | rook]
35303518
empty_for_rook |= bb_f
35313519

35323520
if not king & bb_g:
3533-
empty_for_king = (
3534-
RANK_ATTACKS[king][king | bb_g] &
3535-
RANK_ATTACKS[bb_g][bb_g | king])
3521+
empty_for_king = RANK_ATTACKS[king][king | bb_g] & RANK_ATTACKS[bb_g][bb_g | king]
35363522
empty_for_king |= bb_g
35373523

35383524
empty_for_rook &= ~king

0 commit comments

Comments
 (0)