fix calculations and not run in snake tail when in constrictor game mode

This commit is contained in:
2024-04-15 22:20:15 +02:00
parent 16cab3a9ca
commit 863ca1b277
+13 -9
View File
@@ -10,7 +10,7 @@ class BetterMasterSnake(TemplateSnake):
self.min_safe_area = 2 self.min_safe_area = 2
def get_possible_moves(self, my_head): def get_possible_moves(self, my_head):
self.safe_positions = { return {
"up": { "up": {
"x": my_head["x"], "x": my_head["x"],
"y": my_head["y"] + 1 "y": my_head["y"] + 1
@@ -71,8 +71,12 @@ class BetterMasterSnake(TemplateSnake):
continue continue
for direction, location in self.safe_positions.items(): for direction, location in self.safe_positions.items():
if location in self.get_snake_body_without_snake_tail(snake["body"]): if self.game_type == "constrictor":
remove.append(direction) if location in snake["body"]:
remove.append(direction)
else:
if location in self.get_snake_body_without_snake_tail(snake["body"]):
remove.append(direction)
remove = set(remove) remove = set(remove)
for direction in remove: for direction in remove:
@@ -97,7 +101,7 @@ class BetterMasterSnake(TemplateSnake):
del self.safe_positions[direction] del self.safe_positions[direction]
def find_safe_positions(self): def find_safe_positions(self):
self.get_possible_moves(self.my_head) self.safe_positions = self.get_possible_moves(self.my_head)
self.avoid_my_body(self.my_body) self.avoid_my_body(self.my_body)
self.avoid_walls(self.board_width, self.board_height) self.avoid_walls(self.board_width, self.board_height)
self.avoid_snakes(self.snakes) self.avoid_snakes(self.snakes)
@@ -115,14 +119,17 @@ 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']
self.game_type = game_data['game']["ruleset"]["name"]
self.find_safe_positions() self.find_safe_positions()
if self.eat_the_snake_overwrite: if self.eat_the_snake_overwrite:
self.add_calculations({"function": "eat_the_snake_overwrite", "my_head": self.my_head, "move": move, "safe_positions": self.safe_positions}) self.add_calculations({"function": "eat_the_snake_overwrite", "my_head": self.my_head, "move": move, "safe_positions": self.safe_positions})
return self.safe_positions return self.safe_positions
# Finde die nächstgelegene Nahrungsquelle, wenn Nahrung vorhanden ist if self.game_type == "constrictor":
try: move = self.ensure_escape_route(self.find_direction())
self.add_calculations({"function": "find_direction", "my_head": self.my_head, "move": move, "safe_positions": self.safe_positions})
else:
# Finde den besten Weg zur Nahrung # Finde den besten Weg zur Nahrung
if self.is_food_nearby() or self.disabled_find_near_by_food: if self.is_food_nearby() or self.disabled_find_near_by_food:
path_to_food = self.find_path_to_food() path_to_food = self.find_path_to_food()
@@ -137,9 +144,6 @@ class BetterMasterSnake(TemplateSnake):
# Überprfe, ob der Zug einen Ausweg lässt # Überprfe, ob der Zug einen Ausweg lässt
move = self.ensure_escape_route(move) move = self.ensure_escape_route(move)
self.add_calculations({"function": "ensure_escape_route", "my_head": self.my_head, "move": move, "safe_positions": self.safe_positions}) self.add_calculations({"function": "ensure_escape_route", "my_head": self.my_head, "move": move, "safe_positions": self.safe_positions})
except ValueError:
move = self.ensure_escape_route(self.find_direction())
self.add_calculations({"function": "ValueError - find_direction", "my_head": self.my_head, "move": move, "safe_positions": self.safe_positions})
self.add_to_history(self.calculations) self.add_to_history(self.calculations)
return move if move else "up" return move if move else "up"