Beispiel #1
0
  def next_destination(self, unit):
    if len(self.to_visit) <= len(self.visiting):
      self.visiting.clear()
      self.AREA_SIZE /= 2
      for i in xrange(self.mapsize/self.AREA_SIZE):
        for j in xrange(self.mapsize/self.AREA_SIZE):
          self.to_visit.add((i*self.AREA_SIZE,j*self.AREA_SIZE))

    min_dist = 10000000000
    min_pos = None
    tries = 15
    while tries > 0:
      pos = random.choice(list(self.to_visit))
      tries -= 1
      if pos in self.visiting:
        continue
      cur_dist = unit.calcDistance(pos)
      if cur_dist < self.mapsize / self.AREA_SIZE / 2:
        return pos

      if min_dist > cur_dist:
        min_pos = pos
        min_dist = cur_dist

    return min_pos
Beispiel #2
0
  def calcDistance(self, end_square):
    total_dist = 0.0
    total_units = 0
    for pos in self.positions:
      unit = getattr(self, pos)
      if unit:
        total_dist = unit.calcDistance(end_square)
        total_units += 1

    if not total_units:
      return self.mapsize ** 2
    return total_dist / total_units