add demo
This commit is contained in:
parent
0f03b4edd4
commit
70c8bbf3e7
54
SobolevNS/docs/data/task2_maze/demo.py
Normal file
54
SobolevNS/docs/data/task2_maze/demo.py
Normal 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()
|
||||||
Loading…
Reference in New Issue
Block a user