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')
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 ]))