Exemplo n.º 1
0
def piece_attack_counts(board: Board):
    white_pawn_attacks = sum(
        popcount(BB_PAWN_ATTACKS[WHITE][sq] & board.occupied_co[BLACK])
        for sq in scan_forward(board.pawns & board.occupied_co[WHITE]))
    black_pawn_attacks = sum(
        popcount(BB_PAWN_ATTACKS[BLACK][sq] & board.occupied_co[WHITE])
        for sq in scan_forward(board.pawns & board.occupied_co[BLACK]))
    white_knight_attacks = sum(
        popcount(BB_KNIGHT_ATTACKS[sq] & board.occupied_co[BLACK])
        for sq in scan_forward(board.knights & board.occupied_co[WHITE]))
    black_knight_attacks = sum(
        popcount(BB_KNIGHT_ATTACKS[sq] & board.occupied_co[WHITE])
        for sq in scan_forward(board.knights & board.occupied_co[BLACK]))
    white_bishop_attacks = sum(
        popcount(
            board.attacks_mask(sq) & board.occupied_co[BLACK]
            & (board.kings | board.queens | board.rooks))
        for sq in scan_forward(board.bishops & board.occupied_co[WHITE]))
    black_bishop_attacks = sum(
        popcount(
            board.attacks_mask(sq) & board.occupied_co[WHITE]
            & (board.kings | board.queens | board.rooks))
        for sq in scan_forward(board.bishops & board.occupied_co[BLACK]))
    white_rook_attacks = sum(
        popcount(
            board.attacks_mask(sq) & board.occupied_co[BLACK]
            & (board.kings | board.queens))
        for sq in scan_forward(board.bishops & board.occupied_co[WHITE]))
    black_rook_attacks = sum(
        popcount(
            board.attacks_mask(sq) & board.occupied_co[WHITE]
            & (board.kings | board.queens))
        for sq in scan_forward(board.bishops & board.occupied_co[BLACK]))
    white_queen_attacks = sum(
        popcount(
            board.attacks_mask(sq) & board.occupied_co[BLACK] & board.kings)
        for sq in scan_forward(board.bishops & board.occupied_co[WHITE]))
    black_queen_attacks = sum(
        popcount(
            board.attacks_mask(sq) & board.occupied_co[WHITE] & board.kings)
        for sq in scan_forward(board.bishops & board.occupied_co[BLACK]))
    black = black_pawn_attacks + black_knight_attacks + black_bishop_attacks + black_rook_attacks + black_queen_attacks
    white = white_pawn_attacks + white_knight_attacks + white_bishop_attacks + white_rook_attacks + white_queen_attacks
    return black - white