This commit is contained in:
SobolevNS 2026-05-22 13:48:08 +03:00
parent 0f03b4edd4
commit 70c8bbf3e7

View File

@ -0,0 +1,54 @@
"""
demo.py - короткая демонстрация всех паттернов на маленьком лабиринте.
"""
from maze_solver import (
TextFileMazeBuilder, MazeSolver, ConsoleView,
BFSStrategy, DFSStrategy, AStarStrategy, DijkstraStrategy,
Player, MoveCommand, CommandHistory,
)
def main():
print("=== Builder: загружаем small_10x10.txt ===")
builder = TextFileMazeBuilder()
maze = builder.build_from_file("mazes/small_10x10.txt")
view = ConsoleView(verbose=True)
view.update({"type": "maze_loaded", "maze": maze})
print("\nСам лабиринт:")
print(maze.render_text())
print("\n=== Strategy: пробуем все 4 алгоритма ===")
solver = MazeSolver(maze)
solver.attach(view)
for cls in (BFSStrategy, DFSStrategy, AStarStrategy, DijkstraStrategy):
solver.set_strategy(cls())
stats = solver.solve()
print(f"--- {stats['strategy']} путь длиной {stats['path_length']} ---")
print(maze.render_text(path=stats['path']))
print()
print("=== Command: пройдёмся вручную и сделаем undo ===")
player = Player(maze.start)
history = CommandHistory()
print(f"стартовая позиция: ({player.x},{player.y})")
# Несколько шагов вправо
for d in "DDDD":
ok = history.do(MoveCommand(maze, player, d))
print(f" move {d}: {'ok' if ok else 'blocked'} -> ({player.x},{player.y})")
print("Откатываем 2 хода (undo, undo):")
history.undo()
history.undo()
print(f" теперь игрок в ({player.x},{player.y})")
print("\nЛабиринт с игроком:")
print(maze.render_text(player=player))
if __name__ == "__main__":
main()