class Backtrace

Attributes

maze[R]

Public Class Methods

new(maze) click to toggle source
# File lib/algorithm/backtrace.rb, line 6
def initialize(maze)
@maze = maze
end

Public Instance Methods

generate() click to toggle source
# File lib/algorithm/backtrace.rb, line 10
def generate
        stack = []
        visited_cells = []
        all_cells = []
@maze.set_raw_value_all 1
all_cells = @maze.cells

all_cells.each do |cell|
    @maze.set_value *cell.coords.clone.push(0)
end

        current_cell = all_cells[rand(all_cells.length)]
        visited_cells.push current_cell

        while visited_cells.size != @maze.total_cells
                neighbours = current_cell.neighbours
                visited_cells.push current_cell
                unvisited_neighbours = (neighbours - visited_cells)
                if !unvisited_neighbours.empty?
                        stack.push current_cell
                        random_neighbour = unvisited_neighbours.shuffle.shift
        @maze.connect_cells current_cell, random_neighbour
                        current_cell = random_neighbour
                        visited_cells.push current_cell
                elsif !stack.empty?
                        current_cell = stack.pop
                else
                        unvisited_index_cells = all_cells - visited_cells
                        unvisited_index_cell = unvisited_index_cells.shuffle.shift
                        current_cell = unvisited_index_cell
                        visited_cells.push current_cell
                end
                visited_cells.uniq!
        end
        @maze
end