From 5ce12d70c1ad625a713c505460e99431b90b71df Mon Sep 17 00:00:00 2001 From: Daniel Dolezal Date: Wed, 17 Apr 2024 15:17:09 +0200 Subject: [PATCH] remove pos where other snake head is to not go into a dead end or use the pos where the snake head could be to find new food --- snakes/BetterMasterSnake.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/snakes/BetterMasterSnake.py b/snakes/BetterMasterSnake.py index 708d021..3253aad 100644 --- a/snakes/BetterMasterSnake.py +++ b/snakes/BetterMasterSnake.py @@ -75,12 +75,19 @@ class BetterMasterSnake(TemplateSnake): for part in snake['body']: obstacles.add((part['x'], part['y'])) - # Choose the closest food source based on the heuristic - closest_food = min(self.food_positions, key=lambda food: abs(food['x'] - self.my_head['x']) + abs(food['y'] - self.my_head['y'])) + other_snakes_other_snake_posible_moves_set = {(d['x'], d['y']) for d in self.other_snake_posible_moves} + removed_elements_set = set([(elem['x'], elem['y']) for elem in self.food_positions if (elem['x'], elem['y']) in other_snakes_other_snake_posible_moves_set]) + obstacles |= removed_elements_set - # Use A* to search for a safe path - path = self.a_star_search(self.my_head, closest_food, obstacles) - return path + self.food_positions = [elem for elem in self.food_positions if (elem['x'], elem['y']) not in other_snakes_other_snake_posible_moves_set] + + if len(self.food_positions) > 0: + # Choose the closest food source based on the heuristic + closest_food = min(self.food_positions, key=lambda food: abs(food['x'] - self.my_head['x']) + abs(food['y'] - self.my_head['y'])) + + # Use A* to search for a safe path + return self.a_star_search(self.my_head, closest_food, obstacles) + return None def find_path_to_tail(self): # Exclude other snake's body from obstacles