Class: MazeCell
- Inherits:
-
Object
- Object
- MazeCell
- Defined in:
- lib/maze/maze_cell.rb
Instance Attribute Summary collapse
-
#coords ⇒ Object
readonly
Returns the value of attribute coords.
-
#maze ⇒ Object
readonly
Returns the value of attribute maze.
Instance Method Summary collapse
- #!=(object) ⇒ Object
- #==(object) ⇒ Object
- #[](dimension_index) ⇒ Object
- #backward(dimension_index) ⇒ Object
- #connected? ⇒ Boolean
- #connected_neighbours ⇒ Object
- #eql?(object) ⇒ Boolean
- #forward(dimension_index) ⇒ Object
- #has_wall_backward(dimension_index) ⇒ Object
- #has_wall_forward(dimension_index) ⇒ Object
- #hash ⇒ Object
-
#initialize(*params) ⇒ MazeCell
constructor
A new instance of MazeCell.
- #inspect ⇒ Object
- #neighbours ⇒ Object
- #value ⇒ Object
Constructor Details
#initialize(*params) ⇒ MazeCell
Returns a new instance of MazeCell.
4 5 6 7 8 9 |
# File 'lib/maze/maze_cell.rb', line 4 def initialize(*params) params = params.clone @maze = params.shift @coords = params.map { |c| c.to_i } @hash = "#{@maze.hash}#{ @coords.reduce(""){ |accum, c| "#{accum}#{c}" }.to_i }".to_i end |
Instance Attribute Details
#coords ⇒ Object (readonly)
Returns the value of attribute coords.
2 3 4 |
# File 'lib/maze/maze_cell.rb', line 2 def coords @coords end |
#maze ⇒ Object (readonly)
Returns the value of attribute maze.
2 3 4 |
# File 'lib/maze/maze_cell.rb', line 2 def maze @maze end |
Instance Method Details
#!=(object) ⇒ Object
89 90 91 |
# File 'lib/maze/maze_cell.rb', line 89 def !=(object) not self.eql? object end |
#==(object) ⇒ Object
85 86 87 |
# File 'lib/maze/maze_cell.rb', line 85 def ==(object) self.eql? object end |
#[](dimension_index) ⇒ Object
81 82 83 |
# File 'lib/maze/maze_cell.rb', line 81 def [](dimension_index) @coords[dimension_index] end |
#backward(dimension_index) ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/maze/maze_cell.rb', line 15 def backward(dimension_index) coords = @coords.clone coords[dimension_index] -= 1 params = coords.clone params.unshift @maze MazeCell.new *params if @coords[dimension_index] > 0 end |
#connected? ⇒ Boolean
43 44 45 46 47 48 49 50 |
# File 'lib/maze/maze_cell.rb', line 43 def connected? has_wall = true (0...@maze.dimensions.length).each do |d| has_wall = has_wall && has_wall_forward(d) && has_wall_backward(d) break unless has_wall end not has_wall end |
#connected_neighbours ⇒ Object
56 57 58 59 60 61 62 63 |
# File 'lib/maze/maze_cell.rb', line 56 def connected_neighbours neighbours = [] (0...@maze.dimensions.length).each do |d| neighbours << forward(d) unless has_wall_forward(d) neighbours << backward(d) unless has_wall_backward(d) end neighbours end |
#eql?(object) ⇒ Boolean
69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/maze/maze_cell.rb', line 69 def eql?(object) if (object.class == self.class) eq = (@maze == object.maze) @coords.each_with_index do |c, c_idx| eq = eq && c == object[c_idx] end eq elsif super(object) end end |
#forward(dimension_index) ⇒ Object
23 24 25 26 27 28 29 |
# File 'lib/maze/maze_cell.rb', line 23 def forward(dimension_index) coords = @coords.clone coords[dimension_index] += 1 params = coords.clone params.unshift @maze MazeCell.new *params if @coords[dimension_index] < (@maze.dimensions[dimension_index] - 1) end |
#has_wall_backward(dimension_index) ⇒ Object
37 38 39 40 41 |
# File 'lib/maze/maze_cell.rb', line 37 def has_wall_backward(dimension_index) indices = @maze.coords_to_indices *@coords indices[dimension_index] -= 1 @coords[dimension_index] <= 0 or @maze.get_raw_value(*indices) == 1 end |
#has_wall_forward(dimension_index) ⇒ Object
31 32 33 34 35 |
# File 'lib/maze/maze_cell.rb', line 31 def has_wall_forward(dimension_index) indices = @maze.coords_to_indices *@coords indices[dimension_index] += 1 @coords[dimension_index] >= @maze.dimensions[dimension_index] - 1 or @maze.get_raw_value(*indices) == 1 end |
#hash ⇒ Object
65 66 67 |
# File 'lib/maze/maze_cell.rb', line 65 def hash @hash end |
#inspect ⇒ Object
93 94 95 96 97 98 99 100 |
# File 'lib/maze/maze_cell.rb', line 93 def inspect unless @inspect c_index = 0 coord_list = @coords.map { |c| "@c#{c_index+=1}=#{c}" } @inspect = "#<#{self.class}: @maze=#{@maze.inspect}, #{coord_list.join(', ')}>" end @inspect end |
#neighbours ⇒ Object
52 53 54 |
# File 'lib/maze/maze_cell.rb', line 52 def neighbours (0...@maze.dimensions.length).map { |d| [forward(d), backward(d)] }.flatten.compact end |
#value ⇒ Object
11 12 13 |
# File 'lib/maze/maze_cell.rb', line 11 def value @maze.get_value *@coords end |