Example #1
0
    def create_guide(self):
      self.level_guide = copy.copy(self.level_fog)
      for y in range(0, self.level_size[1]):
	for x in range(0, self.level_size[0]):
	  if self.level_fog[y][x] == '*':
	    diffusion.diffuse_point(self.level_guide, (y, x), 10)
      l.log("Guide:\n", util.array_to_string(self.level_guide, True))
Example #2
0
 def do_turn(self, ants):
   "Use each ants guide map to determine direction to give to server"
   l.log_on = True
   self.turn += 1
   l.log("Turn: ", self.turn)
   self.update_level(ants)
   self.update(ants)
   self.assign_orders(ants)
Example #3
0
    def assign_defense(self, ants):
      "Assign defensive perimeter based on attack radius"
      l.log_on = True
      a = []
      num_hills = max(len(self.my_hills), 1)
      ant_hill_ratio = self.total_ants / num_hills
      defense_guide, num_dest, run_status = pathfind.create_defensive_guide(self.attack_radius - 1, self.my_hills ,self.level_tiles_seen, ants)
      #l.log("defense: ", run_status)
      if run_status == "stop":
	  return ["stop"]
      if ant_hill_ratio >=4 and ant_hill_ratio <= 7:
	ant_num = 1 * num_hills
      elif ant_hill_ratio > 7:
	ant_num = min(self.total_ants / 7, num_dest) * num_hills
      else: ant_num = 0
      if ant_num > 0:
	rankings = self.rank_ants_proximity(defense_guide)
	#l.log("Rankings: ", rankings)
	for ant in rankings:
	  if self.ant_lookup[ant] == None:
	    self.ant_lookup[ant] = defense_guide
	    a.append(ant)
	  if len(a) >= ant_num:
	    l.log("Defense Ants: ", str(len(a)) + ' ' + str(a))
	    l.log("Defense Guide: \n", util.array_to_string(defense_guide, True)) 
	    return a
	l.log("Defense Ants: ", str(len(a)) + ' ' + str(a))
	l.log("Defense Guide: \n", util.array_to_string(defense_guide, True)) 
      return a 
Example #4
0
    def assign_enemy(self, ants):
      "Assign enemy ants as location"
      l.log_on = True
      a = []
      if len(self.enemy_ants) > 0 and self.num_ants_without_assignment() > 0:
	guide, run_status = pathfind.create_guide(self.enemy_ants, self.level_array, ants, depth=self.view_radius)
	#l.log("Enemy: ", run_status)
	if run_status == "stop":
	  return ["stop"]
	rankings = self.rank_ants_proximity(guide)
	for ant in rankings:
	  if self.ant_lookup[ant] == None:
	    self.ant_lookup[ant] = guide
	    a.append(ant)
	l.log("Attack Ants: ", str(len(a)) + ' ' + str(a))
	l.log("Attack Guide: \n", util.array_to_string(guide, True))
      return a
Example #5
0
    def assign_hills(self, ants):
      "Assign all enemy hills as destination"
      l.log_on = True
      a = []
      if len(self.enemy_hills) > 0:
	hills_guide, run_status = pathfind.create_guide(self.enemy_hills, self.level_tiles_seen, ants)
	if run_status == "stop":
	  return ["stop"]
	rankings = self.rank_ants_proximity(hills_guide)
	ant_num = self.total_ants / 2
	for ant in rankings:
	  if self.ant_lookup[ant] == None:
	    self.ant_lookup[ant] = hills_guide
	    a.append(ant)
	  if len(a) >= ant_num:
	    l.log("Hill Ants: ", str(len(a)) + ' ' + str(a))
	    l.log("Hill Guide: \n", util.array_to_string(hills_guide, True))
	    return a
	l.log("Hill Ants: ", str(len(a)) + ' ' + str(a))
	l.log("Hill Guide: \n", util.array_to_string(hills_guide, True))
      return a
Example #6
0
    def assign_unseen(self, ants):
      "Assign all regions that have not been seen as destination"
      l.log_on = True
      a = []
      num_ants_no_guide = self.num_ants_without_assignment()
      if num_ants_no_guide > 0 and self.outskirts > 0:
	unseen_guide, run_status = pathfind.create_guide(self.outskirts, self.level_tiles_seen, ants)
	if run_status == "stop":
	  return ["stop"]
	ant_num = int(num_ants_no_guide * min(self.percentage_unseen + .3, 1))
	rankings = self.rank_ants_proximity(unseen_guide)
	for ant in rankings:
	  if self.ant_lookup[ant] == None:
	    self.ant_lookup[ant] = unseen_guide
	    a.append(ant)
	  if len(a) >= ant_num:
	    l.log("Unseen Ants: ", str(len(a)) + ' ' + str(a))
	    l.log("Unseen Guide: \n", util.array_to_string(unseen_guide, True))
	    return a
	l.log("Unseen Ants: ", str(len(a)) + ' ' + str(a))
	l.log("Unseen Guide: \n", util.array_to_string(unseen_guide, True))
      return a
Example #7
0
    def assign_food(self, ants):
      "Assign all food locations as destination"
      l.log_on = True
      a = []
      if len(self.food) > 0:
	food_guide, run_status = pathfind.create_guide(self.food, self.level_tiles_seen, ants, depth=self.view_radius + 5)
	#l.log("food: ", run_status)
	if run_status == "stop":
	  return ["stop"]
	rankings = self.rank_ants_proximity(food_guide)
	ant_num = len(self.food)
	for ant in rankings:
	  if self.ant_lookup[ant] == None:
	    self.ant_lookup[ant] = food_guide
	    a.append(ant)
	  if len(a) >= ant_num:
	    l.log("Food Ants: ", str(len(a)) + ' ' + str(a))
	    l.log("Food Guide: \n", util.array_to_string(food_guide, True))
	    return a
	l.log("Food Ants: ", str(len(a)) + ' ' + str(a))
	l.log("Food Guide: \n", util.array_to_string(food_guide, True))
      return a
Example #8
0
    def do_turn(self, ants):
      "Use each ants guide map to determine direction to give to server"
      self.turn += 1
      l.log("Turn: ", self.turn)
      l.log("# Ants: ", len(self.ant_lookup))
      l.log("Mao: ", ants.render_text_map())
      self.update_level(ants)
      self.update(ants)
      self.assign_orders(ants)
      destinations = []
      for ant in ants.my_ants():
	if self.ant_lookup[ant] != None:
	  direction = self.smart_move(ants, ant, self.ant_lookup[ant])
	else: direction = None
	if direction != None:
	  dest = ants.destination(ant, direction)
	  if dest not in destinations:
	    ants.issue_order((ant, direction))
	    del self.ant_lookup[ant]
	    self.ant_lookup[dest] = None
	  destinations.append(dest)
	if ants.time_remaining() < 10:
	  break