def go_for_food(self): food_path = self.find_path(self.enemy_food) mandist = manhattan_dist(self.me.current_pos, self.partner.me.current_pos) if mandist <=3 and self.round_index<100: distlst = [x for x in self.enemy_food if manhattan_dist(x, self.partner.me.current_pos)>5] food_path = self.find_path(distlst) if food_path==None: return self.random_move() if len(food_path)==0: return self.random_move() return diff_pos(self.current_pos, food_path.pop())
def get_move(self): if OurPlayer.talkcounter % 13 == 0: self.talk() if OurPlayer.talkcounter % 13 == 10: self.mess = "" self.partner.mess = "" OurPlayer.talkcounter += 1 self.say(self.mess) if self.round_index is None: self.round_index = 0 else: self.round_index += 1 self.read_score() #switch both players to chase mode, if both are close but on two sides en = self.get_closest_eatable_enemy_pos() en = False if en: other_bot = [x for x in self.team_bots if x != self.me][0] dist_enemy_to_other_bot = manhattan_dist(other_bot.current_pos, en[0]) if (en[1] <= 5) and (dist_enemy_to_other_bot <= 5) and (self.get_distance_to_me(other_bot.current_pos) > en[1]): self.start_chase() if self.chase_count > 5: self.stop_chase() else: self.stop_chase() if self.chase_mode: #self.say("Chasemode") return self.safe_move(self.attack_move()) if self.me.is_destroyer: if self.border_mode: m1 = self.go_for_border() if m1 != stop: next_move = m1 else: next_move = self.go_for_food() self.border_mode = False else: next_move = self.go_for_food() am = self.attack_move() if am and not self.border_mode and len(self.enemy_food) < self.FOOD_MIN: next_move = am self.say("".join(["I'm going for them, ", self.partner.name, '!!'])) else: next_move = self.go_for_food() final_move = self.safe_move(next_move) final_pos = tuple([sum(i) for i in zip(final_move,self.current_pos)]) self.memory.append(final_pos) st = list(set(self.memory)) if len(self.memory)>4 and len(st) <= 2: final_move = self.safe_move(next_move, st) self.memory[-1] = final_move return self.safe_move(next_move)
def test_manhattan_dist(self): self.assertEqual(0, manhattan_dist((0, 0), (0, 0))) self.assertEqual(0, manhattan_dist((1, 1), (1, 1))) self.assertEqual(0, manhattan_dist((20, 20), (20, 20))) self.assertEqual(1, manhattan_dist((0, 0), (1, 0))) self.assertEqual(1, manhattan_dist((0, 0), (0, 1))) self.assertEqual(1, manhattan_dist((1, 0), (0, 0))) self.assertEqual(1, manhattan_dist((0, 1), (0, 0))) self.assertEqual(2, manhattan_dist((0, 0), (1, 1))) self.assertEqual(2, manhattan_dist((1, 1), (0, 0))) self.assertEqual(2, manhattan_dist((1, 0), (0, 1))) self.assertEqual(2, manhattan_dist((0, 1), (1, 0))) self.assertEqual(2, manhattan_dist((0, 0), (2, 0))) self.assertEqual(2, manhattan_dist((0, 0), (0, 2))) self.assertEqual(2, manhattan_dist((2, 0), (0, 0))) self.assertEqual(2, manhattan_dist((0, 2), (0, 0))) self.assertEqual(4, manhattan_dist((1, 2), (3, 4)))
def test_manhattan_dist(self): assert 0 == manhattan_dist((0, 0), (0, 0)) assert 0 == manhattan_dist((1, 1), (1, 1)) assert 0 == manhattan_dist((20, 20), (20, 20)) assert 1 == manhattan_dist((0, 0), (1, 0)) assert 1 == manhattan_dist((0, 0), (0, 1)) assert 1 == manhattan_dist((1, 0), (0, 0)) assert 1 == manhattan_dist((0, 1), (0, 0)) assert 2 == manhattan_dist((0, 0), (1, 1)) assert 2 == manhattan_dist((1, 1), (0, 0)) assert 2 == manhattan_dist((1, 0), (0, 1)) assert 2 == manhattan_dist((0, 1), (1, 0)) assert 2 == manhattan_dist((0, 0), (2, 0)) assert 2 == manhattan_dist((0, 0), (0, 2)) assert 2 == manhattan_dist((2, 0), (0, 0)) assert 2 == manhattan_dist((0, 2), (0, 0)) assert 4 == manhattan_dist((1, 2), (3, 4))
def get_distance_to_me(self, pos): return manhattan_dist(self.current_pos, pos)