Exemplo n.º 1
0
    def _compute_dist(self, env):
        scout = env.scout()
        home = env.owner_base()
        enemy_base = env.enemy_base()
        home_dist = sm.calculate_distance(scout.float_attr.pos_x,
                                          scout.float_attr.pos_y, home[0],
                                          home[1])

        enemy_dist = sm.calculate_distance(scout.float_attr.pos_x,
                                           scout.float_attr.pos_y,
                                           enemy_base[0], enemy_base[1])
        return (home_dist + enemy_dist)
Exemplo n.º 2
0
 def in_range(self, pos):
     dist = sm.calculate_distance(pos[0], pos[1], self._center[0],
                                  self._center[1])
     if dist > DEST_RANGE:
         return False
     else:
         return True
Exemplo n.º 3
0
 def check_enter(self, pos):
     if self.enter:
         return
     dist = sm.calculate_distance(pos[0], pos[1], self._center[0],
                                  self._center[1])
     if dist < self._dest_range:
         self.enter = True
Exemplo n.º 4
0
 def check_hit(self, pos):
     if self.hit:
         return
     dist = sm.calculate_distance(pos[0], pos[1], self._center[0],
                                  self._center[1])
     if dist < self._hit_range:
         self.hit = True
Exemplo n.º 5
0
 def _compute_dist(self, env):
     scout = env.scout()
     enemy_base = env.enemy_base()
     dist = sm.calculate_distance(scout.float_attr.pos_x,
                                  scout.float_attr.pos_y, enemy_base[0],
                                  enemy_base[1])
     return dist
Exemplo n.º 6
0
 def _compute_curr_dist(self, env):
     scout = env.unwrapped.scout()
     enemy_pos = env.unwrapped.enemy_base()
     dist = sm.calculate_distance(scout.float_attr.pos_x,
                                  scout.float_attr.pos_y, enemy_pos[0],
                                  enemy_pos[1])
     return dist - self._target_range
Exemplo n.º 7
0
    def act(self, observation, reward, done):
        queen = None
        enemy = None
        for u in observation.observation['units']:
            if (u.int_attr.unit_type == UNIT_TYPEID.ZERG_QUEEN.value
                    and u.int_attr.alliance == sm.AllianceType.SELF.value):
                queen = u
            elif (u.int_attr.unit_type == UNIT_TYPEID.ZERG_OVERLORD.value
                  and u.int_attr.alliance == sm.AllianceType.ENEMY.value):
                enemy = u

        if queen is None:
            print('ZergBotAgent cannot find queue')
            return [self._noop()]

        dist = sm.calculate_distance(queen.float_attr.pos_x,
                                     queen.float_attr.pos_y, self._target[0],
                                     self._target[1])
        if self._check_defense(dist):
            #print('ZergBotAgent queen on defense')
            return [self._defense(queen)]
        if self._check_out_of_range(dist):
            #print('ZergBotAgent queen defense while out of range')
            return [self._defense(queen)]

        if enemy is None:
            #print('ZergBotAgent queen random')
            return [self._random(queen)]

        diff_dist = sm.calculate_distance(queen.float_attr.pos_x,
                                          queen.float_attr.pos_y,
                                          enemy.float_attr.pos_x,
                                          enemy.float_attr.pos_y)
        if diff_dist < self._attack_range:
            #print('ZergBotAgent queen attack')
            return [
                self._attack_target(
                    queen, [enemy.float_attr.pos_x, enemy.float_attr.pos_y])
            ]

        else:
            #print('ZergBotAgent queen catch-up')
            return [
                self._move_to_target(
                    queen, [enemy.float_attr.pos_x, enemy.float_attr.pos_y])
            ]
Exemplo n.º 8
0
 def _in_range(self, env):
     scout = env.unwrapped.scout()
     dist = sm.calculate_distance(scout.float_attr.pos_x,
                                  scout.float_attr.pos_y, self._target[0],
                                  self._target[1])
     if dist <= self._range_width:
         return True
     else:
         return False
Exemplo n.º 9
0
    def check_leave(self, pos):
        if not self.enter:
            return

        if self.leave:
            return
        dist = sm.calculate_distance(pos[0], pos[1], self._center[0],
                                     self._center[1])
        if dist > self._dest_range:
            self.leave = True
Exemplo n.º 10
0
 def _check_view(self, env, unit):
     scout = env.unwrapped.scout()
     dist = sm.calculate_distance(scout.float_attr.pos_x,
                                  scout.float_attr.pos_y,
                                  unit.float_attr.pos_x,
                                  unit.float_attr.pos_y)
     if dist <= MAX_VIEW_RANGE:
         return True
     else:
         return False
Exemplo n.º 11
0
 def _find_furthest_target(self):
     furthest_dist = 0.0
     furthest_base = None
     for key, value in self._target_bases.items():
         dist = sm.calculate_distance(self._owner_base_pos[0],
                                      self._owner_base_pos[1], value[0],
                                      value[1])
         if furthest_dist < dist:
             furthest_dist = dist
             furthest_base = key
     return furthest_base
Exemplo n.º 12
0
    def get_id_by_pos(self, pos):
        min_dist = None
        min_base_gap = 5
        base_id = None
        for key, value in self._target_bases.items():
            dist = sm.calculate_distance(pos[0], pos[1], value[0], value[1])
            if min_dist is None:
                min_dist = dist
                base_id = key
            elif min_dist > dist:
                min_dist = dist
                base_id = key

        if min_dist > min_base_gap:
            return None
        else:
            return base_id
Exemplo n.º 13
0
 def _compute_dist(self, scout):
     dist = sm.calculate_distance(scout.float_attr.pos_x,
                                  scout.float_attr.pos_y, self._home[0],
                                  self._home[1])
     return dist
Exemplo n.º 14
0
 def _dist(self, base):
     pos = base.pos
     dist = sm.calculate_distance(self._owner_base_pos[0],
                                  self._owner_base_pos[1], pos[0], pos[1])
     return dist