import time from .strategy import PathFindingStrategy from source.observer import Observer, Event from source.classes import Cell, Maze class MazeSolver: def __init__(self, maze: Maze, strategy: PathFindingStrategy, observer: Observer): self.maze = maze self.strategy = strategy self.observer = observer def strategyName(self) -> str: return self.strategy.name def setStrategy(self, strategy: PathFindingStrategy): self.strategy = strategy def solve(self): start_time = time.perf_counter() path, visited_cells = self.strategy.findPath(self.maze) finish_time = time.perf_counter() self.observer.update(Event( event="path_found", maze=self.maze, player_position=self.maze.exit, path=path )) return SearchStats( timeMs=(finish_time - start_time) * 1000, visitedCells=visited_cells, pathLength=len(path), path=path ) class SearchStats: """Общая информация о тесте алгоритма""" def __init__(self, timeMs: float, visitedCells: int, pathLength: int, path: list[Cell]): self.timeMs = timeMs self.visitedCells = visitedCells self.pathLength = pathLength self.path = path def show(self): """Вывод информации о тесте в консоль""" print(f'time: {self.timeMs} ms\nvisited cells: {self.visitedCells}\npath length: {self.pathLength}') # def toStr(self) -> str: # return f'{self.timeMs} {self.visitedCells} {self.pathLength}'