From 3be3030a3768686de2a86965528f630191d33962 Mon Sep 17 00:00:00 2001 From: VS-Code <-> Date: Wed, 25 Feb 2026 10:45:11 +0100 Subject: [PATCH] Chess_update --- chess/chess_64.py | 138 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/chess/chess_64.py b/chess/chess_64.py index 38b8d38..0df1bd3 100644 --- a/chess/chess_64.py +++ b/chess/chess_64.py @@ -375,6 +375,144 @@ class Bitboard(): moves.append(to_sq | (bis_sq << 6) | ((bis + turn_offset) << 12) | (no_piece << 16) | quiet << 20) # endregion # endregion Bishop Moves + + # region --- Rook Moves --- + + roo_bb = bbs [roo + turn_offset] + while roo_bb: + roo_sq = (roo_bb & -roo_bb).bit_length() -1 + roo_bb &= (roo_bb -1) + + # region North + ray = rays_n[roo_sq] + blockers = ray & occupancy + if blockers: + blocker_sq = blockers.bit_length() - 1 + ray_to_del = rays_n[blocker_sq] + roo_attacks = (ray ^ ray_to_del) & ~friendly_pcs + else: + roo_attacks = ray + + while roo_attacks: + to_sq = (roo_attacks & -roo_attacks).bit_length() - 1 + to_mask = 1 << to_sq + roo_attacks &= (roo_attacks - 1) + + if to_mask & opponent_pcs: + if to_mask & bbs[paw + opp_offset]: + captured = paw + opp_offset + elif to_mask & bbs[nht + opp_offset]: + captured = nht + opp_offset + elif to_mask & bbs[bis + opp_offset]: + captured = bis + opp_offset + elif to_mask & bbs[roo + opp_offset]: + captured = roo + opp_offset + else: + captured = que + opp_offset + captures.append(to_sq | (roo_sq << 6) | ((roo + turn_offset) << 12) | (captured << 16) | capture << 20) + else: + moves.append(to_sq | (roo_sq << 6) | ((roo + turn_offset) << 12) | (no_piece << 16) | quiet << 20) + # endregion + + # region East + ray = rays_e[roo_sq] + blockers = ray & occupancy + if blockers: + blocker_sq = blockers.bit_length() - 1 + ray_to_del = rays_e[blocker_sq] + roo_attacks = (ray ^ ray_to_del) & ~friendly_pcs + else: + roo_attacks = ray + + while roo_attacks: + to_sq = (roo_attacks & -roo_attacks).bit_length() - 1 + to_mask = 1 << to_sq + roo_attacks &= (roo_attacks - 1) + + if to_mask & opponent_pcs: + if to_mask & bbs[paw + opp_offset]: + captured = paw + opp_offset + elif to_mask & bbs[nht + opp_offset]: + captured = nht + opp_offset + elif to_mask & bbs[bis + opp_offset]: + captured = bis + opp_offset + elif to_mask & bbs[roo + opp_offset]: + captured = roo + opp_offset + else: + captured = que + opp_offset + captures.append(to_sq | (roo_sq << 6) | ((roo + turn_offset) << 12) | (captured << 16) | capture << 20) + else: + moves.append(to_sq | (roo_sq << 6) | ((roo + turn_offset) << 12) | (no_piece << 16) | quiet << 20) + # endregion + + # region South + ray = rays_s[roo_sq] + blockers = ray & occupancy + if blockers: + blocker_sq = blockers.bit_length() - 1 + ray_to_del = rays_s[blocker_sq] + roo_attacks = (ray ^ ray_to_del) & ~friendly_pcs + else: + roo_attacks = ray + + while roo_attacks: + to_sq = (roo_attacks & -roo_attacks).bit_length() - 1 + to_mask = 1 << to_sq + roo_attacks &= (roo_attacks - 1) + + if to_mask & opponent_pcs: + if to_mask & bbs[paw + opp_offset]: + captured = paw + opp_offset + elif to_mask & bbs[nht + opp_offset]: + captured = nht + opp_offset + elif to_mask & bbs[bis + opp_offset]: + captured = bis + opp_offset + elif to_mask & bbs[roo + opp_offset]: + captured = roo + opp_offset + else: + captured = que + opp_offset + captures.append(to_sq | (roo_sq << 6) | ((roo + turn_offset) << 12) | (captured << 16) | capture << 20) + else: + moves.append(to_sq | (roo_sq << 6) | ((roo + turn_offset) << 12) | (no_piece << 16) | quiet << 20) + # endregion + + # region West + ray = rays_w[roo_sq] + blockers = ray & occupancy + if blockers: + blocker_sq = blockers.bit_length() - 1 + ray_to_del = rays_w[blocker_sq] + roo_attacks = (ray ^ ray_to_del) & ~friendly_pcs + else: + roo_attacks = ray + + while roo_attacks: + to_sq = (roo_attacks & -roo_attacks).bit_length() - 1 + to_mask = 1 << to_sq + roo_attacks &= (roo_attacks - 1) + + if to_mask & opponent_pcs: + if to_mask & bbs[paw + opp_offset]: + captured = paw + opp_offset + elif to_mask & bbs[nht + opp_offset]: + captured = nht + opp_offset + elif to_mask & bbs[bis + opp_offset]: + captured = bis + opp_offset + elif to_mask & bbs[roo + opp_offset]: + captured = roo + opp_offset + else: + captured = que + opp_offset + captures.append(to_sq | (roo_sq << 6) | ((roo + turn_offset) << 12) | (captured << 16) | capture << 20) + else: + moves.append(to_sq | (roo_sq << 6) | ((roo + turn_offset) << 12) | (no_piece << 16) | quiet << 20) + # endregion + + + + # endregion Rook Moves + + + return captures, moves