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))
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)
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
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
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
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
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
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