[2] mazebuilder
This commit is contained in:
parent
47404cfa9d
commit
4422dcb9e7
|
|
@ -66,3 +66,57 @@ class Maze:
|
|||
if cell:
|
||||
cell.isExit = True
|
||||
self.exit = cell
|
||||
|
||||
class MazeBuilder(ABC):
|
||||
|
||||
def buildFromFile(self, filename):
|
||||
pass
|
||||
|
||||
class TextileMazeBuilder(MazeBuilder):
|
||||
def buildFromFile(self, filename):
|
||||
with open(filename, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
|
||||
|
||||
lines = [line.rstrip('\n\r') for line in lines]
|
||||
|
||||
height = len(lines)
|
||||
width = len(lines[0]) if height > 0 else 0
|
||||
|
||||
|
||||
for line in lines:
|
||||
if len(line) != width:
|
||||
raise ValueError("все строки одинаковой длины")
|
||||
|
||||
|
||||
maze = Maze(width, height)
|
||||
|
||||
|
||||
for y in range(height):
|
||||
for x in range(width):
|
||||
char = lines[y][x]
|
||||
cell = maze.getCell(x, y)
|
||||
|
||||
if char == '#':
|
||||
cell.isWall = True
|
||||
elif char == ' ':
|
||||
cell.isWall = False
|
||||
elif char == 's':
|
||||
cell.isWall = False
|
||||
cell.isStart = True
|
||||
maze.start = cell
|
||||
elif char == 'e':
|
||||
cell.isWall = False
|
||||
cell.isExit = True
|
||||
maze.exit = cell
|
||||
else:
|
||||
raise ValueError(f"неизв сим")
|
||||
|
||||
|
||||
if maze.start is None:
|
||||
raise ValueError("в лабиринте не найден старт")
|
||||
if maze.exit is None:
|
||||
raise ValueError("в лабиринте не найден выход")
|
||||
|
||||
return maze
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user