add function to avoid get eaten by head to head collisons when my snake is smaller else eat the other snake

This commit is contained in:
2024-04-15 02:13:11 +02:00
parent 87fe6550b2
commit 39b16a1702
+27 -1
View File
@@ -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