def calculate_score(move):
    """
    Calculate the chance of this being a "good move" based on the following criteria:

    :moves_available: number of moves to choose between\n
    :move_num: how many moves we are into the game\n
    :num_pieces_self: how many pieces pieces we have left\n
    :num_pieces_opp: how many pieces the opponent has left\n
    :num_kings_self: how many kings we have\n
    :num_kings_opp: how many kings the opponent has\n
    :makes_king: whether this move will make us a king piece\n
    :takes_king: whether this move will capture a king\n
    :num_resulting_moves: how many moves the opponent can choose between after this one\n
    :self_pieces_threatened: how many pieces of ours will be under threat\n
    :num_threats: total number of jump moves opponent can make\n\n

    Returns: Calculated chance of success
    """
    score = 0.5 # DEFAULT SCORE 50% CHANCE OF SUCCESS

    # AI_MULTIPLIERS = {\
    #     'moves_available': 1,\
    #     'move_num': 1,\
    #     'num_pieces_self': 1,\
    #     'num_pieces_opp': 1,\
    #     'num_kings_self': 1,\
    #     'num_kings_opp': 1,\
    #     'makes_king': 1.5,\
    #     'takes_king': 1.5,\
    #     'num_resulting_moves': 0.5,\
    #     'self_pieces_threatened': 0.25,\
    #     'num_threats': 0.25}

    ### INCREASE SCORE FOR DECREASED OPP MOVES
    MAKE_KING = 0.1
    TAKE_KING = 0.15
    MULT_JUMP = 0.2
    PCS_THREATENED = 0.1
    NUM_THREATS = 0.25
    NUM_RES_OPT = 0.05

    if move.makes_king:
        score = score + MAKE_KING

    if move.takes_king:
        score = score + TAKE_KING

    if move.self_pieces_threatened != 0:
        score = score - PCS_THREATENED * move.self_pieces_threatened

    if move.num_threats != 0:
        score = score * NUM_THREATS / move.num_threats

    # increase score for more options if current player goes again
    if move.is_jump:
        score = score + move.num_result_options * NUM_RES_OPT
    else:
        # decrease score for more options if opponent plays next
        score = score - move.num_result_options * NUM_RES_OPT
    if move.is_jump() and move.forces_jump:
        score = score + MULT_JUMP

    return score