Exemplo n.º 1
0
def generate_walls_from_maze(width, height, maze):
    """ Converts a wall given in right/bottom walls into rectangular walls of the correct width. """

    walls = []

    # Edges
    walls.append(Wall.generate_horizontal_wall(0, 0, width))
    walls.append(Wall.generate_horizontal_wall(0, height, width))
    walls.append(Wall.generate_vertical_wall(0, 0, height))
    walls.append(Wall.generate_vertical_wall(width, 0, height))

    (right_walls, bottom_walls) = maze

    # Horizontal walls
    for y in range(height - 1):
        x = 0
        current_wall_start_x = 0
        current_wall_length = 0

        while x < width:
            while x < width and bottom_walls[y][x]:
                x += 1
                current_wall_length += 1

            if current_wall_length > 0:
                walls.append(
                    Wall.generate_horizontal_wall(current_wall_start_x, y + 1,
                                                  current_wall_length))

            x += 1
            current_wall_start_x = x
            current_wall_length = 0

    # Vertical walls
    for x in range(width - 1):
        y = 0
        current_wall_start_y = 0
        current_wall_length = 0

        while y < height:
            while y < height and right_walls[y][x]:
                y += 1
                current_wall_length += 1

            if current_wall_length > 0:
                walls.append(
                    Wall.generate_vertical_wall(x + 1, current_wall_start_y,
                                                current_wall_length))

            y += 1
            current_wall_start_y = y
            current_wall_length = 0

    return walls