2026-rff_mp/ProninVV/task-2-oop/MazeBuilder.py

47 lines
1.2 KiB
Python
Raw Normal View History

from abc import ABC, abstractmethod
from labirint import Maze, Cell
class MazeBuilder(ABC):
@abstractmethod
def buildFromFile(self, filename):
pass
class TextFileMazeBuilder(MazeBuilder):
def __init__(self):
self._maze = None
def buildFromFile(self, filename: str):
with open(filename, mode='r', encoding='utf-8') as file:
lines = file.read().splitlines()
height = len(lines)
width = len(lines[0])
self._maze = Maze(height, width)
for y, line in enumerate(lines):
for x, char in enumerate(line):
cell = self._maze.getCell(x, y)
if char == '#':
cell.isWall = True
elif char == 'S':
cell.isStart = True
self._maze.start = cell
elif char == 'E':
cell.isExit = True
self._maze.exit = cell
return self._maze
def validate(self):
if self._maze.start is None:
raise "в лабиринте нет старта"
if self._maze.exit is None:
raise "в лабиринте нет начала"
# labir = TextFileMazeBuilder().buildFromFile('text.txt')
# print(labir)