Ejemplo n.º 1
0
    def render(maze: Maze, solution: Solution = None, filename=None):
        lw = ImageMazeRenderer.line_width
        dlw = 2 * lw

        def convert(maze_coord):
            return dlw * maze_coord + dlw

        img_size = convert(maze.n) + lw
        image = Image.new('RGB', (img_size, img_size), color='black')
        drawer = ImageDraw.Draw(image)

        def as_box(e: Edge):
            xr = {convert(vtx.x) for vtx in e.v}
            yr = {convert(vtx.y) for vtx in e.v}
            return min(xr), min(yr), max(xr) + 1, max(yr) + 1

        def draw(*edges, color='white'):
            for e in edges:
                drawer.rectangle(as_box(e), fill=color)

        entrance = Edge(Vertex(-1, 0), Vertex(0, 0))
        the_exit = Edge(Vertex(maze.n - 1, maze.n - 1),
                        Vertex(maze.n, maze.n - 1))

        draw(*maze.get_all_edges())
        draw(entrance, the_exit)

        if solution:
            solution_color = 'limegreen'
            draw(*solution.edges, color=solution_color)
            draw(entrance, the_exit, color=solution_color)

        image.save(build_output_path('jpg', file_name=filename), 'JPEG')
Ejemplo n.º 2
0
    def render(maze: Maze, filename=None):
        n = 3 * maze.n
        board = [[]] * n
        for i in range(0, n):
            board[i] = [True] * n

        def convert(maze_coord):
            return 1 + 3 * maze_coord

        for edge in maze.get_all_edges():
            xr = {convert(vtx.x) for vtx in edge.v}
            yr = {convert(vtx.y) for vtx in edge.v}
            for x in range(min(xr), max(xr) + 1):
                for y in range(min(yr), max(yr) + 1):
                    board[x][y] = False
        board[0][1] = False
        board[n - 1][n - 2] = False

        with open(build_output_path('txt', file_name=filename), 'w') as f:
            f.write(
                nl.join([
                    ''.join(u"\u2588" if cell else ' ' for cell in row)
                    for row in board
                ]))