[2] #344
|
|
@ -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("Неверный выбор.")
|
||||
Loading…
Reference in New Issue
Block a user