Class: Alpha::Grid
- Inherits:
-
Object
- Object
- Alpha::Grid
- Defined in:
- lib/alpha/grid.rb
Constant Summary collapse
- @@LETTERS =
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
Instance Attribute Summary collapse
-
#moves ⇒ Object
readonly
Returns the value of attribute moves.
Instance Method Summary collapse
- #can_place_block?(placement, direction, occupied_squares) ⇒ Boolean
- #get_column(placement) ⇒ Object
- #get_row(placement) ⇒ Object
- #index_of(item) ⇒ Object
-
#initialize ⇒ Grid
constructor
A new instance of Grid.
- #last_a_hit? ⇒ Boolean
- #letters ⇒ Object
- #place(key, value) ⇒ Object
- #place_block(placement, direction, occupied_squares) ⇒ Object
- #query(criteria) ⇒ Object
Constructor Details
#initialize ⇒ Grid
Returns a new instance of Grid.
6 7 8 9 10 11 12 13 |
# File 'lib/alpha/grid.rb', line 6 def initialize @grid = {} @moves = [] @@LETTERS.each do |letter| 10.times {|times| @grid["#{letter}#{times + 1}"] = :empty } end end |
Instance Attribute Details
#moves ⇒ Object (readonly)
Returns the value of attribute moves.
4 5 6 |
# File 'lib/alpha/grid.rb', line 4 def moves @moves end |
Instance Method Details
#can_place_block?(placement, direction, occupied_squares) ⇒ Boolean
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/alpha/grid.rb', line 50 def can_place_block?(placement, direction, occupied_squares) if direction == "horizontal" row = get_row(placement) column = get_column(placement) occupied_squares.times do |col| return false if query("#{row}#{(column + col)}") != :empty end else row = index_of(get_row(placement)) column = get_column(placement) occupied_squares.times do |new_row| return false if query("#{@@LETTERS[(row + new_row)] }#{column}") != :empty end end return true end |
#get_column(placement) ⇒ Object
73 74 75 76 77 78 79 |
# File 'lib/alpha/grid.rb', line 73 def get_column(placement) if placement.size == 2 return placement[1,2].to_i else return placement[1,3].to_i end end |
#get_row(placement) ⇒ Object
69 70 71 |
# File 'lib/alpha/grid.rb', line 69 def get_row(placement) return placement[0,1] end |
#index_of(item) ⇒ Object
82 83 84 85 86 87 88 |
# File 'lib/alpha/grid.rb', line 82 def index_of(item) @@LETTERS.each_with_index do |letter, index| return index if letter == item end raise "ITEM #{item} is not in LETTERS LIST" end |
#last_a_hit? ⇒ Boolean
28 29 30 |
# File 'lib/alpha/grid.rb', line 28 def last_a_hit? return @grid[@moves.last] == :hit end |
#letters ⇒ Object
15 16 17 |
# File 'lib/alpha/grid.rb', line 15 def letters return @@LETTERS end |
#place(key, value) ⇒ Object
19 20 21 22 |
# File 'lib/alpha/grid.rb', line 19 def place(key, value) @moves << key return @grid[key] = value end |
#place_block(placement, direction, occupied_squares) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/alpha/grid.rb', line 32 def place_block(placement, direction, occupied_squares) if direction == "horizontal" row = get_row(placement) column = get_column(placement) occupied_squares.times do |col| place("#{row}#{col + column}", :placed) end else row = index_of(get_row(placement)) column = get_column(placement) occupied_squares.times do |new_row| place("#{@@LETTERS[(row + new_row)] }#{column}", :placed) end end end |
#query(criteria) ⇒ Object
24 25 26 |
# File 'lib/alpha/grid.rb', line 24 def query(criteria) return @grid[criteria] end |