2026-rff_mp/nehoroshevaa/task2/builders/text_file_maze_builder.py
2026-05-24 21:49:38 +03:00

67 lines
1.5 KiB
Python

from builders.maze_builder import MazeBuilder
from models.cell import Cell
from models.maze import Maze
class TextFileMazeBuilder(MazeBuilder):
def create_cell(self, symbol, x, y):
if symbol == "#":
return Cell(x, y, is_wall=True)
if symbol == "S":
return Cell(x, y, is_start=True)
if symbol == "E":
return Cell(x, y, is_exit=True)
if symbol == " ":
return Cell(x, y)
raise ValueError(f"Unknown symbol: {symbol}")
def build_from_file(self, filename):
with open(filename, "r", encoding="utf-8") as file:
rows = [line.rstrip("\n") for line in file]
if not rows:
raise ValueError("File is empty")
width = len(rows[0])
for row in rows:
if len(row) != width:
raise ValueError("Maze rows must have same length")
cells = []
start_cell = None
exit_cell = None
for y, row in enumerate(rows):
current_row = []
for x, symbol in enumerate(row):
cell = self.create_cell(symbol, x, y)
if cell.is_start:
start_cell = cell
if cell.is_exit:
exit_cell = cell
current_row.append(cell)
cells.append(current_row)
if start_cell is None:
raise ValueError("Start not found")
if exit_cell is None:
raise ValueError("Exit not found")
return Maze(cells, start_cell, exit_cell)