def attacks_mask(board_state, square):
bb_square = BB_SQUARES[square]
if bb_square & board_state.pawns:
if bb_square & board_state.occupied_w:
return BB_PAWN_ATTACKS[WHITE][square]
else:
return BB_PAWN_ATTACKS[BLACK][square]
elif bb_square & board_state.knights:
return BB_KNIGHT_ATTACKS[square]
elif bb_square & board_state.kings:
return BB_KING_ATTACKS[square]
else:
attacks = np.uint64(0)
if bb_square & board_state.bishops or bb_square & board_state.queens:
attacks = DIAG_ATTACK_ARRAY[square][
khash_get(DIAG_ATTACK_INDEX_LOOKUP_TABLE, BB_DIAG_MASKS[square] & board_state.occupied, 0)]
if bb_square & board_state.rooks or bb_square & board_state.queens:
attacks |= (RANK_ATTACK_ARRAY[square][
khash_get(RANK_ATTACK_INDEX_LOOKUP_TABLE, BB_RANK_MASKS[square] & board_state.occupied,0)] |
FILE_ATTACK_ARRAY[square][
khash_get(FILE_ATTACK_INDEX_LOOKUP_TABLE, BB_FILE_MASKS[square] & board_state.occupied, 0)])
return attacks
评论列表
文章目录