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
|
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):
|
def find_safe_positions(self):
|
||||||
safe_positions = self.get_possible_moves(self.my_head)
|
safe_positions = self.get_possible_moves(self.my_head)
|
||||||
safe_positions = self.avoid_my_body(self.my_body, safe_positions)
|
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_walls(self.board_width, self.board_height, safe_positions)
|
||||||
safe_positions = self.avoid_snakes(self.snakes, 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
|
return safe_positions
|
||||||
|
|
||||||
def choose_move(self, game_data):
|
def choose_move(self, game_data):
|
||||||
self.calculations = []
|
self.calculations = []
|
||||||
|
self.eat_the_snake_overwrite = False
|
||||||
|
move = None
|
||||||
|
|
||||||
self.board_width = game_data['board']['width']
|
self.board_width = game_data['board']['width']
|
||||||
self.board_height = game_data['board']['height']
|
self.board_height = game_data['board']['height']
|
||||||
self.snakes = game_data['board']['snakes']
|
self.snakes = game_data['board']['snakes']
|
||||||
@@ -97,9 +120,12 @@ class BetterMasterSnake(TemplateSnake):
|
|||||||
self.my_head = self.my_snake['head']
|
self.my_head = self.my_snake['head']
|
||||||
self.my_body = self.my_snake["body"]
|
self.my_body = self.my_snake["body"]
|
||||||
self.food_positions = game_data['board']['food']
|
self.food_positions = game_data['board']['food']
|
||||||
move = None
|
|
||||||
|
|
||||||
safe_positions = self.find_safe_positions()
|
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
|
# Finde die nächstgelegene Nahrungsquelle, wenn Nahrung vorhanden ist
|
||||||
try:
|
try:
|
||||||
# Finde den besten Weg zur Nahrung
|
# Finde den besten Weg zur Nahrung
|
||||||
|
|||||||
Reference in New Issue
Block a user