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)
|
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,9 +682,12 @@ 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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user