Compare commits
2 Commits
bbe3a648fb
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
86b537e3eb | ||
|
|
3be3030a37 |
@@ -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
|
||||
|
||||
|
||||
@@ -544,9 +682,12 @@ while board.playing:
|
||||
print(f"{COL.RESET}\n ---- CHESS ---- Turn: {turn}")
|
||||
board.print_board()
|
||||
move = input(text)
|
||||
if move == "exit":
|
||||
break
|
||||
if len(move) !=5 or not board.encode_and_make_move(move):
|
||||
text = "Move not possible new move: "
|
||||
continue
|
||||
|
||||
|
||||
turn += 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user