From f1dfbea54b2885285ceb148da0b2a1c643c7b05b Mon Sep 17 00:00:00 2001 From: konnovaea Date: Thu, 21 May 2026 20:07:21 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B2=D0=B8=D0=B7=D1=83=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=B8=20=D0=BF=D1=80=D0=BE=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- konnovaea/maze_solver.py | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/konnovaea/maze_solver.py b/konnovaea/maze_solver.py index ec7d079..c22b789 100644 --- a/konnovaea/maze_solver.py +++ b/konnovaea/maze_solver.py @@ -167,15 +167,35 @@ class MazeSolver: def __init__(self, maze, strategy=None): self.maze = maze self.strategy = strategy + self.observers = [] + + def attach(self, observer): + self.observers.append(observer) + + def detach(self, observer): + self.observers.remove(observer) + + def notify(self, event, data=None): + for observer in self.observers: + observer.update(event, data) def set_strategy(self, strategy): self.strategy = strategy def solve(self): + if self.strategy is None: + raise ValueError("Стратегия не установлена") + self.notify("search_started") + start_time = time.perf_counter() - path, visited = self.strategy.find_path(self.maze, self.maze.start, self.maze.exit) + path, visited_count = self.strategy.find_path(self.maze, self.maze.start, self.maze.exit) end_time = time.perf_counter() - return SearchStats(path, (end_time - start_time) * 1000, visited) + time_ms = (end_time - start_time) * 1000 + + self.notify("search_finished", time_ms) + self.notify("path_found", path) + + return SearchStats(path, time_ms, visited_count) class Observer(ABC): @@ -266,6 +286,10 @@ class MoveCommand(Command): self.player.move_to(self.new_cell) self.view.update("undo", None) + def undo(self): + self.player.move_to(self.old_cell) + self.view.update("undo",None) + class GameController: def __init__(self, maze, view): @@ -326,7 +350,16 @@ class GameController: command = input("Введите команду: ").lower().strip() - + if command in ['w', 'a', 's', 'd']: + self.try_move(command) + elif command == 'u': + self.undo() + elif command == 'q': + print('Выход из игры') + break + else: + print("Неизвестная команда. Используйте: W/A/S/D - движение, U - отмена, Q - выход") +