47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
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)
|