blob: d529495b8fb171e2785908c3491d11a58e5d8c22 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
require_relative 'pos'
require_relative 'maze'
class MazeSolver
attr_reader :maze
attr_reader :stack
def initialize(maze, start_pos, end_pos)
@maze = maze
@start_pos = start_pos
@end_pos = end_pos
@stack = [start_pos]
@visitedTiles = Array.new(@maze.width) { Array.new(@maze.height) { false } }
end
def solve!()
while @stack.last != @end_pos
step()
end
end
def step()
current_tile = @stack.last
neighbors = @maze.open_neighbors(current_tile)
neighbors.select! do |neighbor|
@visitedTiles[neighbor.x][neighbor.y] == false
end
if neighbors.empty?
@stack.pop()
else
randomNeighbor = neighbors.sample
@stack.push(randomNeighbor)
@visitedTiles[randomNeighbor.x][randomNeighbor.y] = true
end
end
end
|