[2] #344

Merged
kit8nino merged 14 commits from novikovsd/2026-rff_mp:lab2 into develop 2026-05-30 12:05:52 +00:00
Showing only changes of commit 287a6098b5 - Show all commits

View File

@ -490,4 +490,79 @@ def run_experiment():
plt.close()
print(f"Графики сохранены в папку {RESULTS_DIR}")
except ImportError:
print("matplotlib не установлен. Графики не построены.")
print("matplotlib не установлен. Графики не построены.")
def demo_interactive():
ensure_results_dir()
builder = TextFileMazeBuilder()
filename = input("Введите имя файла с лабиринтом (например, maze_small.txt): ").strip()
if not os.path.exists(filename) and not os.path.exists(os.path.join(RESULTS_DIR, filename)):
print(f"Файл {filename} не найден. Создаю тестовый лабиринт small в папке {RESULTS_DIR}")
generate_test_maze_file("demo_maze.txt", "small")
filename = os.path.join(RESULTS_DIR, "demo_maze.txt")
elif os.path.exists(os.path.join(RESULTS_DIR, filename)):
filename = os.path.join(RESULTS_DIR, filename)
maze = builder.build_from_file(filename)
view = ConsoleView()
view.update("maze_loaded", {"maze": maze})
print("Выберите алгоритм поиска:")
print("1. BFS")
print("2. DFS")
print("3. A*")
choice = input("Ваш выбор: ")
if choice == "1":
strategy = BFSStrategy()
elif choice == "2":
strategy = DFSStrategy()
else:
strategy = AStarStrategy()
solver = MazeSolver(maze, strategy)
solver.attach(view)
path, stats = solver.solve()
print(f"Поиск завершён. Статистика: {stats}")
if path:
print("Найден путь. Хотите пройти по нему пошагово? (y/n): ", end="")
ans = input().lower()
if ans == 'y':
player = Player(maze.start)
cmd_history = []
for step_cell in path[1:]:
dx = step_cell.x - player.current_cell.x
dy = step_cell.y - player.current_cell.y
if dx == 1:
dir_char = 'd'
elif dx == -1:
dir_char = 'a'
elif dy == 1:
dir_char = 's'
else:
dir_char = 'w'
cmd = MoveCommandImpl(player, dir_char, maze)
if cmd.execute():
cmd_history.append(cmd)
view.update("player_moved", {"player_cell": player.current_cell})
input("Нажмите Enter для следующего шага...")
print("Вы достигли выхода!")
print("Отменить последний шаг? (y/n): ", end="")
if input().lower() == 'y' and cmd_history:
cmd_history[-1].undo()
view.update("player_moved", {"player_cell": player.current_cell})
print("Последний шаг отменён.")
else:
print("Путь не найден.")
if __name__ == "__main__":
print("Лабораторная работа: Поиск выхода из лабиринта")
print("1. Запустить эксперименты (сравнение алгоритмов)")
print("2. Интерактивный режим (загрузка своего лабиринта)")
mode = input("Выберите режим (1 или 2): ")
if mode == "1":
run_experiment()
elif mode == "2":
demo_interactive()
else:
print("Неверный выбор.")