написана визуализация и протестирована
This commit is contained in:
parent
e8de0e29c4
commit
f1dfbea54b
|
|
@ -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 - выход")
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user