Консольная визуализация лабиринта
This commit is contained in:
parent
99daffa959
commit
aaa3d93224
116
MininaVD/docs2/data2/visualizationConsole_view.ipynb
Normal file
116
MininaVD/docs2/data2/visualizationConsole_view.ipynb
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "9d15670f-4ae1-48f5-801c-7a1a84cafba3",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"import os\n",
|
||||||
|
"from typing import List, Optional, Set\n",
|
||||||
|
"from modelsMaze import Maze\n",
|
||||||
|
"from modelsCell import Cell\n",
|
||||||
|
"from visualizationObserver import Observer\n",
|
||||||
|
"\n",
|
||||||
|
"class ConsoleView(Observer):\n",
|
||||||
|
" \"\"\"Консольная визуализация лабиринта.\"\"\"\n",
|
||||||
|
" \n",
|
||||||
|
" # Символы для отображения\n",
|
||||||
|
" SYMBOLS = {\n",
|
||||||
|
" 'wall': '█',\n",
|
||||||
|
" 'path': '·',\n",
|
||||||
|
" 'start': 'S',\n",
|
||||||
|
" 'exit': 'E',\n",
|
||||||
|
" 'player': 'P',\n",
|
||||||
|
" 'solution': '★'\n",
|
||||||
|
" }\n",
|
||||||
|
" \n",
|
||||||
|
" def __init__(self, maze: Maze):\n",
|
||||||
|
" self.maze = maze\n",
|
||||||
|
" self.player_pos: Optional[Cell] = None\n",
|
||||||
|
" self.solution_path: Set[Cell] = set()\n",
|
||||||
|
" self.messages: List[str] = []\n",
|
||||||
|
" \n",
|
||||||
|
" def update(self, event: str) -> None:\n",
|
||||||
|
" \"\"\"Обработка событий от MazeSolver.\"\"\"\n",
|
||||||
|
" self.messages.append(f\"[СОБЫТИЕ] {event}\")\n",
|
||||||
|
" self.render()\n",
|
||||||
|
" \n",
|
||||||
|
" def set_solution_path(self, path: List[Cell]) -> None:\n",
|
||||||
|
" \"\"\"Установить найденный путь для отображения.\"\"\"\n",
|
||||||
|
" self.solution_path = set(path)\n",
|
||||||
|
" \n",
|
||||||
|
" def set_player_position(self, cell: Cell) -> None:\n",
|
||||||
|
" \"\"\"Установить позицию игрока.\"\"\"\n",
|
||||||
|
" self.player_pos = cell\n",
|
||||||
|
" \n",
|
||||||
|
" def render(self) -> None:\n",
|
||||||
|
" \"\"\"Отрисовать лабиринт в консоли.\"\"\"\n",
|
||||||
|
" # Очистка консоли (опционально)\n",
|
||||||
|
" # os.system('cls' if os.name == 'nt' else 'clear')\n",
|
||||||
|
" \n",
|
||||||
|
" print(\"\\n\" + \"=\" * (self.maze.width * 2 + 4))\n",
|
||||||
|
" print(f\"Лабиринт {self.maze.width}×{self.maze.height}\")\n",
|
||||||
|
" print(\"=\" * (self.maze.width * 2 + 4))\n",
|
||||||
|
" \n",
|
||||||
|
" for y in range(self.maze.height):\n",
|
||||||
|
" row = \"\"\n",
|
||||||
|
" for x in range(self.maze.width):\n",
|
||||||
|
" cell = self.maze.get_cell(x, y)\n",
|
||||||
|
" if not cell:\n",
|
||||||
|
" row += \" \"\n",
|
||||||
|
" continue\n",
|
||||||
|
" \n",
|
||||||
|
" if self.player_pos and cell == self.player_pos:\n",
|
||||||
|
" row += self.SYMBOLS['player'] + \" \"\n",
|
||||||
|
" elif cell.is_start:\n",
|
||||||
|
" row += self.SYMBOLS['start'] + \" \"\n",
|
||||||
|
" elif cell.is_exit:\n",
|
||||||
|
" row += self.SYMBOLS['exit'] + \" \"\n",
|
||||||
|
" elif cell in self.solution_path:\n",
|
||||||
|
" row += self.SYMBOLS['solution'] + \" \"\n",
|
||||||
|
" elif cell.is_wall:\n",
|
||||||
|
" row += self.SYMBOLS['wall'] * 2\n",
|
||||||
|
" else:\n",
|
||||||
|
" row += self.SYMBOLS['path'] * 2\n",
|
||||||
|
" print(row)\n",
|
||||||
|
" \n",
|
||||||
|
" print(\"-\" * (self.maze.width * 2 + 4))\n",
|
||||||
|
" \n",
|
||||||
|
" # Показать последние сообщения\n",
|
||||||
|
" if self.messages:\n",
|
||||||
|
" print(\"Последние события:\")\n",
|
||||||
|
" for msg in self.messages[-3:]:\n",
|
||||||
|
" print(f\" {msg}\")\n",
|
||||||
|
" \n",
|
||||||
|
" print()\n",
|
||||||
|
" \n",
|
||||||
|
" def clear_messages(self) -> None:\n",
|
||||||
|
" \"\"\"Очистить сообщения.\"\"\"\n",
|
||||||
|
" self.messages.clear()"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "Python [conda env:base] *",
|
||||||
|
"language": "python",
|
||||||
|
"name": "conda-base-py"
|
||||||
|
},
|
||||||
|
"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.13.9"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 5
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user