class MazeMagic::Generate

Attributes

algorithm[W]
height[R]
instructions_grid[R]
maze[R]
options[R]
width[R]

Public Class Methods

new(height:, width:, **options) click to toggle source
# File lib/maze_magic/generate.rb, line 6
def initialize(height:, width:, **options)
  @height = height
  @width  = width
  @options = options
end

Public Instance Methods

algorithm() click to toggle source
# File lib/maze_magic/generate.rb, line 18
def algorithm
  @algorithm ||= MazeMagic::MazeGenerator::RecursiveBacktracking
end
generate_maze() click to toggle source
# File lib/maze_magic/generate.rb, line 12
def generate_maze
  initialize_instructions_grid
  generate_maze_cells_from_instructions
  maze
end

Private Instance Methods

generate_maze_cells_from_instructions() click to toggle source

Generate Maze Cell objects from instructions:

2 dimensional array of these singleton objects:

MazeMagic::Edge.instance              # ' '
MazeMagic::HorizontalWall.instance    #  _
MazeMagic::VerticalWall.instance      #  |
MazeMagic::Passage.instance           # ' '

Objects inside can be translated to maze walls:

 _________
|_  |  _  |
|  _| |  _|
| |_  | | |
| |  _| | |
|___|_____|
# File lib/maze_magic/generate.rb, line 59
def generate_maze_cells_from_instructions
  @maze ||= algorithm
    .new(grid: instructions_grid)
    .tap { |generator| generator.generate }
    .maze
end
grid_klass() click to toggle source
# File lib/maze_magic/generate.rb, line 66
def grid_klass
  MazeMagic::Grid
end
initialize_instructions_grid() click to toggle source

Initialize instructions grid

 _________
|_|_|_|_|_|
|_|_|_|_|_|
|_|_|_|_|_|
|_|_|_|_|_|
|_|_|_|_|_|
# File lib/maze_magic/generate.rb, line 35
def initialize_instructions_grid
  grid_options = options.select { |k,v| %i(start_x start_y).include?(k) }
  args = { height: height, width: width }.merge(grid_options)
  @instructions_grid = grid_klass.new(args)
end