написана визуализация и протестирована

This commit is contained in:
konnovaea 2026-05-21 20:07:21 +03:00
parent e8de0e29c4
commit f1dfbea54b

View File

@ -167,15 +167,35 @@ class MazeSolver:
def __init__(self, maze, strategy=None): def __init__(self, maze, strategy=None):
self.maze = maze self.maze = maze
self.strategy = strategy 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): def set_strategy(self, strategy):
self.strategy = strategy self.strategy = strategy
def solve(self): def solve(self):
if self.strategy is None:
raise ValueError("Стратегия не установлена")
self.notify("search_started")
start_time = time.perf_counter() 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() 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): class Observer(ABC):
@ -266,6 +286,10 @@ class MoveCommand(Command):
self.player.move_to(self.new_cell) self.player.move_to(self.new_cell)
self.view.update("undo", None) self.view.update("undo", None)
def undo(self):
self.player.move_to(self.old_cell)
self.view.update("undo",None)
class GameController: class GameController:
def __init__(self, maze, view): def __init__(self, maze, view):
@ -326,7 +350,16 @@ class GameController:
command = input("Введите команду: ").lower().strip() 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 - выход")