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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user