[2] mazebuilder
This commit is contained in:
parent
47404cfa9d
commit
4422dcb9e7
|
|
@ -65,4 +65,58 @@ class Maze:
|
||||||
cell = self.getCell(x, y)
|
cell = self.getCell(x, y)
|
||||||
if cell:
|
if cell:
|
||||||
cell.isExit = True
|
cell.isExit = True
|
||||||
self.exit = cell
|
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