class Mazinator::MazeSolver

Constants

EAST
NORTH
SOUTH
WEST

Attributes

current[RW]
direction[RW]
maze[RW]
solved[RW]

Public Class Methods

new(maze, direction=EAST) click to toggle source
# File lib/mazinator/maze_solver.rb, line 12
def initialize(maze, direction=EAST)
  @direction = direction
  @solved = false
  @maze = maze
  @current = maze.start
end

Public Instance Methods

can_go_forward?() click to toggle source
# File lib/mazinator/maze_solver.rb, line 49
def can_go_forward?
  case self.direction
    when NORTH
      !self.current.walls[:up]
    when SOUTH
      !self.current.walls[:down]
    when EAST
      !self.current.walls[:right]
    when WEST
      !self.current.walls[:left]
  end
end
can_go_left?() click to toggle source
# File lib/mazinator/maze_solver.rb, line 63
def can_go_left?
  case self.direction
    when NORTH
      !self.current.walls[:left]
    when SOUTH
      !self.current.walls[:right]
    when EAST
      !self.current.walls[:up]
    when WEST
      !self.current.walls[:down]
  end
end
can_go_right?() click to toggle source
# File lib/mazinator/maze_solver.rb, line 36
def can_go_right?
  case self.direction
    when NORTH
      !self.current.walls[:right]
    when SOUTH
      !self.current.walls[:left]
    when EAST
      !self.current.walls[:down]
    when WEST
      !self.current.walls[:up]
  end
end
go_forward() click to toggle source
# File lib/mazinator/maze_solver.rb, line 76
def go_forward
  case self.direction
    when NORTH
      self.current = self.maze.maze[self.current.row-1, self.current.col]
    when SOUTH
      self.current = self.maze.maze[self.current.row+1, self.current.col]
    when EAST
      self.current = self.maze.maze[self.current.row, self.current.col+1]
    when WEST
      self.current = self.maze.maze[self.current.row, self.current.col-1]
  end
end
mark_current_as_visited() click to toggle source
# File lib/mazinator/maze_solver.rb, line 128
def mark_current_as_visited
  self.current.visited = true
end
reverse() click to toggle source
# File lib/mazinator/maze_solver.rb, line 115
def reverse
  case self.direction
    when NORTH
      self.direction = SOUTH
    when SOUTH
      self.direction = NORTH
    when EAST
      self.direction = WEST
    when WEST
      self.direction = EAST
  end
end
solve() click to toggle source
# File lib/mazinator/maze_solver.rb, line 19
def solve
  while self.current != self.maze.exit do
    self.mark_current_as_visited
    if self.can_go_right? 
      self.turn_right and self.go_forward
    elsif self.can_go_forward?
      self.go_forward
    elsif self.can_go_left?
      self.turn_left and self.go_forward
    else 
      self.reverse and self.go_forward
    end     
  end
  # mark the last cell as
  self.mark_current_as_visited
end
turn_left() click to toggle source
# File lib/mazinator/maze_solver.rb, line 102
def turn_left
  case self.direction
    when NORTH
      self.direction = WEST
    when SOUTH
      self.direction = EAST
    when EAST
      self.direction = NORTH
    when WEST
      self.direction = SOUTH
  end
end
turn_right() click to toggle source
# File lib/mazinator/maze_solver.rb, line 89
def turn_right
  case self.direction
    when NORTH
      self.direction = EAST
    when SOUTH
      self.direction = WEST
    when EAST
      self.direction = SOUTH
    when WEST
      self.direction = NORTH
  end
end