示例#1
0
def get_best_target_in_quadrant(gc, unit, loc_coords, priority_order):
    """
    Returns best_target, best_loc to move towards. 
    """
    enemy_team = variables.enemy_team
    location = bc.MapLocation(variables.curr_planet, loc_coords[0],
                              loc_coords[1])
    vuln_enemies = gc.sense_nearby_units_by_team(location, unit.attack_range(),
                                                 enemy_team)
    # If there is a vuln enemy but can't attack then don't move
    if len(vuln_enemies) > 0:
        if not gc.is_attack_ready(unit.id):
            return (None, None)
        else:
            best_target = max(vuln_enemies,
                              key=lambda x: attack.coefficient_computation(
                                  gc, unit, x, location, priority_order))
            return (best_target, None)
    # If there are no vuln enemies then look at vision range and choose to move towards nearby enemies
    else:
        vuln_enemies = gc.sense_nearby_units_by_team(location,
                                                     unit.vision_range,
                                                     enemy_team)
        if len(vuln_enemies) > 0:
            best_target = max(
                vuln_enemies,
                key=lambda x: attack.coefficient_computation(
                    gc, unit, x, location, priority_order, far=True))
            best_loc = (best_target.location.map_location().x,
                        best_target.location.map_location().y)
            return (None, best_loc)
        return (None, None)
示例#2
0
def get_best_target(gc, unit, loc_coords, priority_order, javelin=False):
    enemy_team = variables.enemy_team
    location = bc.MapLocation(variables.curr_planet, loc_coords[0],
                              loc_coords[1])
    vuln_enemies = gc.sense_nearby_units_by_team(location, unit.attack_range(),
                                                 enemy_team)
    if len(vuln_enemies) == 0 or not gc.is_attack_ready(unit.id):
        return None
    best_target = max(vuln_enemies,
                      key=lambda x: attack.coefficient_computation(
                          gc, unit, x, location, priority_order))
    return best_target
示例#3
0
def get_best_target(gc,
                    unit,
                    location,
                    priority_order,
                    enemy_team,
                    javelin=False):
    vuln_enemies = gc.sense_nearby_units_by_team(location, unit.attack_range(),
                                                 enemy_team)
    if len(vuln_enemies) == 0 or not gc.is_attack_ready(unit.id):
        return None
    best_target = max(vuln_enemies,
                      key=lambda x: attack.coefficient_computation(
                          gc, unit, x, location, priority_order))
    return best_target
def get_best_target(gc, unit, loc_coords, priority_order, javelin=False):
    assigned_knights = variables.assigned_knights

    enemy_team = variables.enemy_team
    location = bc.MapLocation(variables.curr_planet, loc_coords[0],
                              loc_coords[1])
    vuln_enemies = gc.sense_nearby_units_by_team(location, unit.attack_range(),
                                                 enemy_team)
    if len(vuln_enemies) == 0 or not gc.is_attack_ready(unit.id):
        return None
    best_target = max(vuln_enemies,
                      key=lambda x: attack.coefficient_computation(
                          gc, unit, x, location, priority_order))

    ## Make this the new target loc
    if not variables.knight_rush:
        best_target_loc = best_target.location.map_location()
        assigned_knights[unit.id] = (best_target_loc.x, best_target_loc.y)
    return best_target
def get_best_target_in_quadrant(gc, unit, loc_coords, priority_order):
    """
    Returns best_target, best_loc to move towards. 
    """
    quadrant_battles = variables.quadrant_battle_locs
    if variables.curr_planet == bc.Planet.Earth:
        quadrant_size = variables.earth_quadrant_size
    else:
        quadrant_size = variables.mars_quadrant_size

    enemy_team = variables.enemy_team
    location = bc.MapLocation(variables.curr_planet, loc_coords[0],
                              loc_coords[1])
    vuln_enemies = gc.sense_nearby_units_by_team(location, unit.attack_range(),
                                                 enemy_team)
    # If there is a vuln enemy but can't attack then don't move
    if len(vuln_enemies) > 0:
        if not gc.is_attack_ready(unit.id):
            return (None, None)
        else:
            best_target = max(vuln_enemies,
                              key=lambda x: attack.coefficient_computation(
                                  gc, unit, x, location, priority_order))
            return (best_target, None)
    # If there are no vuln enemies then look at vision range and choose to move towards nearby enemies
    else:
        # vuln_enemies = gc.sense_nearby_units_by_team(location, unit.vision_range, enemy_team)
        # if len(vuln_enemies) > 0:
        #     best_target = max(vuln_enemies, key=lambda x: attack.coefficient_computation(gc, unit, x, location, priority_order, far=True))
        #     best_loc = (best_target.location.map_location().x, best_target.location.map_location().y)
        #     return (None, best_loc)
        # return (None, None)
        quadrant = (int(loc_coords[0] / quadrant_size),
                    int(loc_coords[1] / quadrant_size))
        q_info = quadrant_battles[quadrant]
        if len(q_info.enemy_locs) > 0:
            for loc in q_info.enemy_locs:
                if is_accessible(loc_coords, loc):
                    return (None, loc)
        return (None, q_info.target_loc)