Compare commits

...

2 Commits

Author SHA1 Message Date
VS-Code
86b537e3eb Chess_update 2026-02-25 11:11:21 +01:00
VS-Code
3be3030a37 Chess_update 2026-02-25 10:45:11 +01:00

View File

@@ -375,6 +375,144 @@ class Bitboard():
moves.append(to_sq | (bis_sq << 6) | ((bis + turn_offset) << 12) | (no_piece << 16) | quiet << 20) moves.append(to_sq | (bis_sq << 6) | ((bis + turn_offset) << 12) | (no_piece << 16) | quiet << 20)
# endregion # endregion
# endregion Bishop Moves # 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 return captures, moves
@@ -544,10 +682,13 @@ while board.playing:
print(f"{COL.RESET}\n ---- CHESS ---- Turn: {turn}") print(f"{COL.RESET}\n ---- CHESS ---- Turn: {turn}")
board.print_board() board.print_board()
move = input(text) move = input(text)
if move == "exit":
break
if len(move) !=5 or not board.encode_and_make_move(move): if len(move) !=5 or not board.encode_and_make_move(move):
text = "Move not possible new move: " text = "Move not possible new move: "
continue continue
turn += 1 turn += 1