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 - выход") +