# модель клетки лабиринта

class Cell:
    def __init__(self, x, y, isWall=False, isStart=False, isExit=False):
        self.x = x
        self.y = y
        self.isWall = isWall
        self.isStart = isStart
        self.isExit = isExit

    def isPassable(self):
        return not self.isWall


# модель лабиринта

class Maze:

    def __init__(self, height, width, start=None, exit=None):
        self.height = height    # строки
        self.width = width  # столбцы
        self.__grid = [[Cell(x, y) for x in range(width)]
                       for y in range(height)]
        self.start = start
        self.exit = exit

    def getCell(self, x, y) -> Cell:
        if (0 <= x < self.width) and (0 <= y < self.height):
            return self.__grid[y][x]
        return None

    def getNeighbors(self, cell):
        dirs = {'left': (-1, 0), 'right': (1, 0),
                'up': (0, 1), 'down': (0, -1)}
        neighbors = []
        for _, val in dirs.items():
            dx, dy = val
            nx, ny = cell.x + dx, cell.y + dy
            neighbor = self.getCell(nx, ny)

            if neighbor and isinstance(neighbor, Cell) and neighbor.isPassable():
                neighbors.append(neighbor)
        return neighbors


if __name__ == "__main__":
    maze1 = Maze(height=5, width=5, start=0, exit=4)
    cell1 = maze1.getCell(2, 2)
    print(maze1.getNeighbors(cell1))
