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