Class: Minesweeper::Core::Minefield
- Inherits:
-
Object
- Object
- Minesweeper::Core::Minefield
- Defined in:
- lib/minesweeper/core/minefield.rb
Constant Summary collapse
- OFFSETS =
[[-1, -1], [-1, 0], [-1, 1], [0, 1], [0, -1], [1, 1], [1, 0], [1, -1]]
Instance Attribute Summary collapse
-
#row_count ⇒ Object
readonly
Returns the value of attribute row_count.
Instance Method Summary collapse
- #flag_at(row_index, col_index) ⇒ Object
- #hide_mine_at(row_index, col_index) ⇒ Object
-
#initialize(row_count) ⇒ Minefield
constructor
A new instance of Minefield.
- #mines_around(row_index, col_index) ⇒ Object
- #reveal_at(row_index, col_index) ⇒ Object
- #to_s ⇒ Object
- #unflag_at(row_index, col_index) ⇒ Object
- #verify_coordinates_existance(row_index, col_index) ⇒ Object
Constructor Details
#initialize(row_count) ⇒ Minefield
Returns a new instance of Minefield.
14 15 16 17 18 19 |
# File 'lib/minesweeper/core/minefield.rb', line 14 def initialize(row_count) raise ArgumentError unless row_count > 0 @row_count = row_count @cells = Array.new(row_count) { Array.new(row_count) { create_non_explosive_cell } } @all_mine_coords = [] end |
Instance Attribute Details
#row_count ⇒ Object (readonly)
Returns the value of attribute row_count.
10 11 12 |
# File 'lib/minesweeper/core/minefield.rb', line 10 def row_count @row_count end |
Instance Method Details
#flag_at(row_index, col_index) ⇒ Object
85 86 87 88 89 |
# File 'lib/minesweeper/core/minefield.rb', line 85 def flag_at(row_index, col_index) verify_coordinates_existance(row_index, col_index) cell_at(row_index, col_index).flag raise MinefieldSolvedError if !@all_mine_coords.empty? && all_mines_flagged? end |
#hide_mine_at(row_index, col_index) ⇒ Object
29 30 31 32 33 34 |
# File 'lib/minesweeper/core/minefield.rb', line 29 def hide_mine_at(row_index, col_index) verify_coordinates_existance(row_index, col_index) create_explosive_cell_at(row_index, col_index) register_mine_at(row_index, col_index) increase_mine_counters_around(row_index, col_index) end |
#mines_around(row_index, col_index) ⇒ Object
101 102 103 |
# File 'lib/minesweeper/core/minefield.rb', line 101 def mines_around(row_index, col_index) cell_at(row_index, col_index).mines_around end |
#reveal_at(row_index, col_index) ⇒ Object
74 75 76 77 78 79 80 81 82 83 |
# File 'lib/minesweeper/core/minefield.rb', line 74 def reveal_at(row_index, col_index) verify_coordinates_existance(row_index, col_index) return if cell_at(row_index, col_index).revealed? cell_at(row_index, col_index).reveal if cell_at(row_index, col_index).mines_around.zero? cells_coords_around(row_index, col_index).each do |coords| reveal_at(coords[0], coords[1]) unless cell_at(coords[0], coords[1]).revealed? end end end |
#to_s ⇒ Object
25 26 27 |
# File 'lib/minesweeper/core/minefield.rb', line 25 def to_s @cells.flatten.join end |
#unflag_at(row_index, col_index) ⇒ Object
96 97 98 99 |
# File 'lib/minesweeper/core/minefield.rb', line 96 def unflag_at(row_index, col_index) verify_coordinates_existance(row_index, col_index) cell_at(row_index, col_index).unflag end |
#verify_coordinates_existance(row_index, col_index) ⇒ Object
36 37 38 |
# File 'lib/minesweeper/core/minefield.rb', line 36 def verify_coordinates_existance(row_index, col_index) raise RangeError unless cell_exists_at?(row_index, col_index) end |