from models import Cell, Maze from .maze_builder import MazeBuilder class TextFileMazeBuilder(MazeBuilder): """Строитель лабиринта из текстового файла""" def build_from_file(self, filename: str) -> Maze: """Читает файл и строит лабиринт""" with open(filename, 'r', encoding='utf-8') as f: lines = [line.rstrip('\n') for line in f.readlines()] height = len(lines) width = len(lines[0]) if height > 0 else 0 maze = Maze(width, height) for y, line in enumerate(lines): for x, char in enumerate(line): is_wall = (char == '#') is_start = (char == 'S') is_exit = (char == 'E') cell = Cell(x, y, is_wall, is_start, is_exit) maze.set_cell(x, y, cell) if is_start: maze.start = cell if is_exit: maze.exit = cell # Валидация if maze.start is None: raise ValueError("В лабиринте нет стартовой клетки (S)") if maze.exit is None: raise ValueError("В лабиринте нет выходной клетки (E)") return maze