{ "cells": [ { "cell_type": "code", "execution_count": 12, "id": "4dbe48b6", "metadata": {}, "outputs": [], "source": [ "from source.builder import TextFileMazeBuilder\n", "from source.observer import ConsoleView, Event\n", "from source.strategy import MazeSolver, BFS, DFS\n", "# from source.strategy.maze_solver import \n", "from source.classes import Cell\n", "# from source.strategy import " ] }, { "cell_type": "code", "execution_count": 13, "id": "007bf97a", "metadata": {}, "outputs": [], "source": [ "test_lab = './mazes/tests/test_lab.txt'\n", "test_lab2 = './mazes/tests/test_lab2.txt'\n", "test_lab3 = './mazes/tests/test_lab20x20.txt'" ] }, { "cell_type": "code", "execution_count": 14, "id": "4489fc7e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "S # ###\n", "## # # E\n", "# # #\n", "### ## #\n", "# #\n", "########\n" ] } ], "source": [ "with open(test_lab) as f:\n", " data = f.readlines()\n", " for el in data:\n", " print(el.rstrip())" ] }, { "cell_type": "code", "execution_count": 15, "id": "fde1eddb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "S # ###\n", "## # # E\n", "# # #\n", "### ## #\n", "# #\n", "########\n" ] } ], "source": [ "\n", "\n", "builder = TextFileMazeBuilder()\n", "maze = builder.buildFromFile(filename=test_lab)\n", "\n", "maze.printer()" ] }, { "cell_type": "code", "execution_count": 16, "id": "22325f68", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Загружен лабиринт:\n", "S.P# ###\n", "## # # E\n", "# # #\n", "### ## #\n", "# #\n", "########\n" ] } ], "source": [ "\n", "# from source.observer.observer import \n", "\n", "view = ConsoleView()\n", "view.update(Event(\n", " event=\"maze_loaded\",\n", " maze=maze,\n", " player_position=(2, 0),\n", " path=[(0, 0), (1, 0)]\n", "))" ] }, { "cell_type": "code", "execution_count": 17, "id": "19840429", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Путь найден:\n", "S..# ###\n", "##.# #.E\n", "# .. #.#\n", "###.##.#\n", "# ....#\n", "########\n" ] }, { "data": { "text/plain": [ "([(2, 1), (1, 0)],\n", " [(0, 0),\n", " (1, 0),\n", " (2, 0),\n", " (2, 1),\n", " (2, 2),\n", " (3, 2),\n", " (3, 3),\n", " (3, 4),\n", " (4, 4),\n", " (5, 4),\n", " (6, 4),\n", " (6, 3),\n", " (6, 2),\n", " (6, 1),\n", " (7, 1)])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solver = MazeSolver(maze, DFS(), ConsoleView())\n", "stats = solver.solve()\n", "\n", "[cord.getXY() for cord in maze.getNeighbors(cell=Cell(2, 0))], [cord.getXY() for cord in stats.path]" ] }, { "cell_type": "code", "execution_count": 18, "id": "73ba37a8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Путь найден:\n", "S..# ###\n", "##.# #.E\n", "# .. #.#\n", "###.##.#\n", "# ....#\n", "########\n" ] }, { "data": { "text/plain": [ "([(2, 1), (1, 0)],\n", " [(0, 0),\n", " (1, 0),\n", " (2, 0),\n", " (2, 1),\n", " (2, 2),\n", " (3, 2),\n", " (3, 3),\n", " (3, 4),\n", " (4, 4),\n", " (5, 4),\n", " (6, 4),\n", " (6, 3),\n", " (6, 2),\n", " (6, 1),\n", " (7, 1)])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solver = MazeSolver(maze, BFS(), ConsoleView())\n", "stats = solver.solve()\n", "\n", "[cord.getXY() for cord in maze.getNeighbors(cell=Cell(2, 0))], [cord.getXY() for cord in stats.path]" ] }, { "cell_type": "code", "execution_count": 19, "id": "857c5c04", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "4\n", "2\n", "3\n", "3\n", "2\n" ] }, { "data": { "text/plain": [ "{'0', '1', '2', '3', '4'}" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def dfs(graph, start, visited=None):\n", " if visited is None:\n", " visited = set()\n", " visited.add(start)\n", "\n", " print(start)\n", "\n", " for next in graph[start] - visited:\n", " dfs(graph, next, visited)\n", " return visited\n", "\n", "\n", "graph = {'0': set(['1', '2']),\n", " '1': set(['0', '3', '4']),\n", " '2': set(['0']),\n", " '3': set(['1']),\n", " '4': set(['2', '3'])}\n", "\n", "dfs(graph, '0')" ] }, { "cell_type": "code", "execution_count": 20, "id": "9a5ea5cb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Размер: 8x6\n", "(0,0): wall=False, start=True, exit=False\n", "(1,0): wall=False, start=False, exit=False\n", "(2,0): wall=False, start=False, exit=False\n", "(3,0): wall=True, start=False, exit=False\n", "(4,0): wall=False, start=False, exit=False\n", "(5,0): wall=True, start=False, exit=False\n", "(6,0): wall=True, start=False, exit=False\n", "(7,0): wall=True, start=False, exit=False\n", "(0,1): wall=True, start=False, exit=False\n", "(1,1): wall=True, start=False, exit=False\n", "(2,1): wall=False, start=False, exit=False\n", "(3,1): wall=True, start=False, exit=False\n", "(4,1): wall=False, start=False, exit=False\n", "(5,1): wall=True, start=False, exit=False\n", "(6,1): wall=False, start=False, exit=False\n", "(7,1): wall=False, start=False, exit=True\n", "(0,2): wall=True, start=False, exit=False\n", "(1,2): wall=False, start=False, exit=False\n", "(2,2): wall=False, start=False, exit=False\n", "(3,2): wall=False, start=False, exit=False\n", "(4,2): wall=False, start=False, exit=False\n", "(5,2): wall=True, start=False, exit=False\n", "(6,2): wall=False, start=False, exit=False\n", "(7,2): wall=True, start=False, exit=False\n", "(0,3): wall=True, start=False, exit=False\n", "(1,3): wall=True, start=False, exit=False\n", "(2,3): wall=True, start=False, exit=False\n", "(3,3): wall=False, start=False, exit=False\n", "(4,3): wall=True, start=False, exit=False\n", "(5,3): wall=True, start=False, exit=False\n", "(6,3): wall=False, start=False, exit=False\n", "(7,3): wall=True, start=False, exit=False\n", "(0,4): wall=True, start=False, exit=False\n", "(1,4): wall=False, start=False, exit=False\n", "(2,4): wall=False, start=False, exit=False\n", "(3,4): wall=False, start=False, exit=False\n", "(4,4): wall=False, start=False, exit=False\n", "(5,4): wall=False, start=False, exit=False\n", "(6,4): wall=False, start=False, exit=False\n", "(7,4): wall=True, start=False, exit=False\n", "(0,5): wall=True, start=False, exit=False\n", "(1,5): wall=True, start=False, exit=False\n", "(2,5): wall=True, start=False, exit=False\n", "(3,5): wall=True, start=False, exit=False\n", "(4,5): wall=True, start=False, exit=False\n", "(5,5): wall=True, start=False, exit=False\n", "(6,5): wall=True, start=False, exit=False\n", "(7,5): wall=True, start=False, exit=False\n", "\n", "Клетка (2,0) из лабиринта: wall=True\n", "Соседи (2,0): [(1, 2)]\n", "Соседи (1,0): [(0, 0)]\n" ] } ], "source": [ "# Проверьте структуру лабиринта\n", "print(f\"Размер: {maze.width}x{maze.height}\")\n", "\n", "# Проверьте конкретные клетки\n", "for y in range(maze.height):\n", " for x in range(maze.width):\n", " cell = maze.cells[y][x]\n", " print(f\"({x},{y}): wall={cell.isWall}, start={cell.isStart}, exit={cell.isExit}\")\n", "\n", "# Проверьте соседей конкретной клетки из лабиринта\n", "cell_from_maze = maze.cells[2][0] # Берём реальную клетку из лабиринта\n", "print(f\"\\nКлетка (2,0) из лабиринта: wall={cell_from_maze.isWall}\")\n", "print(f\"Соседи (2,0): {[n.getXY() for n in maze.getNeighbors(cell_from_maze)]}\")\n", "\n", "# Проверьте соседей (1,0)\n", "cell_1_0 = maze.cells[1][0]\n", "print(f\"Соседи (1,0): {[n.getXY() for n in maze.getNeighbors(cell_1_0)]}\")" ] }, { "cell_type": "code", "execution_count": 21, "id": "32edf4d1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['S # ###', '## # # E', '# # #', '### ## #', '# #', '########']\n", "8 6\n" ] } ], "source": [ "with open(test_lab) as f:\n", " data = f.read().splitlines()\n", " x, y = 0, 0\n", " width = len(data[0])\n", " height = len(data)\n", " print(data)\n", " print(width, height)" ] }, { "cell_type": "code", "execution_count": 22, "id": "48d20564", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Путь найден:\n", "# # # # # # # # # # # # # # # # # # # #\n", "S. # # # #\n", "#.# # # # # # # # # # # # #\n", "#..... # # # # # # # # #\n", "# #.# # # # # # # # # # # #\n", "# #............. # # # # #\n", "# # # # # # #. # # # # # # #\n", "# # # # #..... # # # # #\n", "# # # # # # #. # # # # #\n", "# # # # #. # # # # #\n", "# # # # # # #. # # # # #\n", "# # # # #..... # # # #\n", "# # # # # # # # #. # # # #\n", "# # # # #. # # #\n", "# # # # # # # # #. # # # # #\n", "# # # # # # #. # # # #\n", "# # # # # # #. # # # #\n", "# # # # # # #. # # # #\n", "# # # #...........E #\n", "# # # # # # # # # # # # # # # # # # # #\n" ] } ], "source": [ "maze2 = builder.buildFromFile(test_lab3)\n", "\n", "solver = MazeSolver(maze2, BFS(), ConsoleView())\n", "stats = solver.solve()" ] }, { "cell_type": "code", "execution_count": 23, "id": "bf13d5ba", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Путь найден:\n", "# # # # # # # # # # # # # # # # # # # #\n", "S.......# # # #\n", "# # # .# # # # # # # # # # #\n", "#.......# # # # # # # # #\n", "#. # # # # # # # # # # # # #\n", "#...# ...........# # # # #\n", "# .# # #. # # # .# # # # # # #\n", "#...# #...# # .....# # # # #\n", "#. # # .# # # # .# # # # #\n", "#...# #...# #...# # # # #\n", "# .# #. # # # #. # # # # #\n", "#...# #..... # #.......# # # #\n", "#. # # # #...# # # # .# # # #\n", "#...#.......# .# #...# # #\n", "# .#.# # .#...# # # #. # # # # #\n", "#...#. #...#. # # #...# # # #\n", "#. #...#. #...# # # .# # # #\n", "#...# .#...# .# # # .# # # #\n", "# .....# .....# # .........E #\n", "# # # # # # # # # # # # # # # # # # # #\n" ] } ], "source": [ "maze2 = builder.buildFromFile(test_lab3)\n", "\n", "solver = MazeSolver(maze2, DFS(), ConsoleView())\n", "stats = solver.solve()" ] }, { "cell_type": "code", "execution_count": null, "id": "9383cb75", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.6" } }, "nbformat": 4, "nbformat_minor": 5 }