def move_up(obs): army = scaux.select_army(obs, sc2_env.Race.terran) xs = [unit.x for unit in army] ys = [unit.y for unit in army] new_army_x = int(mean(xs)) new_army_y = int(mean(ys)) - VER_THRESHOLD for unit in army: PENDING_ACTIONS.append(actions.RAW_FUNCTIONS.Move_pt("now", unit.tag, [new_army_x, new_army_y]))
def move_up(self, obs): army = scaux.select_army(obs, sc2_env.Race.terran) xs = [unit.x for unit in army] ys = [unit.y for unit in army] new_army_x = int(mean(xs)) new_army_y = int(mean(ys)) - self.ver_threshold for unit in army: self.pending_actions.append( actions.RAW_FUNCTIONS.Move_pt("now", unit.tag, [new_army_x, new_army_y]))
def attack_nearest_inside_radius(self, obs, radius): #get army coordinates race = sc2_env.Race.terran army_x, army_y = self.get_race_unit_avg(obs, race) #get nearest unit enemy_unit = self.get_nearest_enemy_unit_inside_radius(army_x, army_y, obs, radius) #tell each unit in army to attack nearest enemy if enemy_unit is not None: army = scaux.select_army(obs, race) for unit in army: #self.pending_actions.append(actions.RAW_FUNCTIONS.Attack_pt("now", unit.tag, [enemy_unit.x, enemy_unit.y])) self.pending_actions.append(actions.RAW_FUNCTIONS.Attack_unit("now", unit.tag, enemy_unit.tag))
def attack_nearest_inside_radius(obs, radius): #get army coordinates army = scaux.select_army(obs, sc2_env.Race.terran) xs = [unit.x for unit in army] ys = [unit.y for unit in army] army_x = int(mean(xs)) army_y = int(mean(ys)) - VER_THRESHOLD #get nearest unit enemy_unit = get_nearest_enemy_unit_inside_radius(army_x, army_y, obs, radius) #tell each unit in army to attack nearest enemy for unit in army: PENDING_ACTIONS.append(actions.RAW_FUNCTIONS.Attack_pt("now", unit.tag, [enemy_unit.x, enemy_unit.y]))
def get_race_unit_avg(self, obs, race): army = scaux.select_army(obs, race) xs, ys = [], [] for unit in army: try: xs.append(unit.x) ys.append(unit.y) except AttributeError as ae: if not "'str' object has no attribute" in str(ae): raise army_x = int(mean(xs)) army_y = int(mean(ys)) return army_x, army_y
def run_(self, obs): #TODO #get player x and y avg p_army_x, p_army_y = self.get_race_unit_avg(obs, sc2_env.Race.terran) #get enemy x and y avg e_army_x, e_army_y = self.get_race_unit_avg(obs, sc2_env.Race.zerg) new_x = 0 new_y = 0 if p_army_x - e_army_x < 0: new_x = DefeatEnemiesStarcraftIIActionWrapper.MAP_X_CORNER_LEFT else: new_x = DefeatEnemiesStarcraftIIActionWrapper.MAP_X_CORNER_RIGHT if p_army_y - e_army_y < 0: new_y = DefeatEnemiesStarcraftIIActionWrapper.MAP_Y_CORNER_UP else: new_y = DefeatEnemiesStarcraftIIActionWrapper.MAP_Y_CORNER_DOWN army = scaux.select_army(obs, sc2_env.Race.terran) for unit in army: self.pending_actions.append( actions.RAW_FUNCTIONS.Move_pt("now", unit.tag, [new_x, new_y]))
def print_army_mean(obs): army = scaux.select_army(obs, sc2_env.Race.terran) xs = [unit.x for unit in army] ys = [unit.y for unit in army] print("Army position is [{x}, {y}]".format(x=int(mean(xs)),y=int(mean(ys))))