From 39b16a1702863afa207acf88fada7f1428a7635e Mon Sep 17 00:00:00 2001 From: Daniel Dolezal Date: Mon, 15 Apr 2024 02:13:11 +0200 Subject: [PATCH] add function to avoid get eaten by head to head collisons when my snake is smaller else eat the other snake --- snakes/BetterMasterSnake.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/snakes/BetterMasterSnake.py b/snakes/BetterMasterSnake.py index 0171b3a..a104669 100644 --- a/snakes/BetterMasterSnake.py +++ b/snakes/BetterMasterSnake.py @@ -80,16 +80,39 @@ class BetterMasterSnake(TemplateSnake): return possible_moves + def avoid_get_eaten_by_other_snakes(self, snakes:list, possible_moves:dict): + remove = [] + for snake in snakes: + if snake["id"] == self.my_snake["id"]: + continue + + for direction, location in possible_moves.items(): + if len(possible_moves) > 1: + if snake["length"] < self.my_snake["length"] and location in [{"x": v["x"], "y": v["y"]} for k, v in self.get_possible_moves(snake["head"]).items()]: + self.eat_the_snake_overwrite = True + return direction + elif location in [{"x": v["x"], "y": v["y"]} for k, v in self.get_possible_moves(snake["head"]).items()]: + remove.append(direction) + + remove = set(remove) + for direction in remove: + del possible_moves[direction] + return possible_moves + def find_safe_positions(self): safe_positions = self.get_possible_moves(self.my_head) safe_positions = self.avoid_my_body(self.my_body, safe_positions) safe_positions = self.avoid_walls(self.board_width, self.board_height, safe_positions) safe_positions = self.avoid_snakes(self.snakes, safe_positions) + safe_positions = self.avoid_get_eaten_by_other_snakes(self.snakes, safe_positions) return safe_positions def choose_move(self, game_data): self.calculations = [] + self.eat_the_snake_overwrite = False + move = None + self.board_width = game_data['board']['width'] self.board_height = game_data['board']['height'] self.snakes = game_data['board']['snakes'] @@ -97,9 +120,12 @@ class BetterMasterSnake(TemplateSnake): self.my_head = self.my_snake['head'] self.my_body = self.my_snake["body"] self.food_positions = game_data['board']['food'] - move = None safe_positions = self.find_safe_positions() + if self.eat_the_snake_overwrite: + self.add_calculations({"function": "eat_the_snake_overwrite", "my_head": self.my_head, "move": move, "safe_positions": safe_positions}) + return safe_positions + # Finde die nächstgelegene Nahrungsquelle, wenn Nahrung vorhanden ist try: # Finde den besten Weg zur Nahrung