| 
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 | # File 'app/models/route_retriever.rb', line 2
def self.execute(trial, current_point, destination_point)
  manhattan_distance = (destination_point.x - current_point.x).abs + (destination_point.y - current_point.y).abs
  
  not_visited_points = Array.new
  trial.guard_mission.mini_map.fortress_cells.each do |cell|
    if cell.symbol == :concrete.to_s and not current_point.equal?(cell)
      not_visited_points << Point.new(cell.x, cell.y)
    end
  end
  searching_path_queue = [[current_point]]
  while not searching_path_queue.blank?
    retrieving_path = searching_path_queue.pop
    Point.identities.shuffle.each do |identity|
      retrieving_point = identity.add(retrieving_path.last)
      not_visited_points.each do |point|
        if retrieving_point.equal?(point) and not retrieving_path.include?(point)
          new_retrieving_path = Marshal.load(Marshal.dump(retrieving_path))
          new_retrieving_path << point
          not_visited_points.delete(point)
          searching_path_queue << new_retrieving_path
          if destination_point.equal?(point)
            return new_retrieving_path
          end
        end
      end
    end
          end
end |