Class: Alpha::Grid

Inherits:
Object
  • Object
show all
Defined in:
lib/alpha/grid.rb

Constant Summary collapse

@@LETTERS =
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeGrid

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

#movesObject (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

Returns:

  • (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

Returns:

  • (Boolean)


28
29
30
# File 'lib/alpha/grid.rb', line 28

def last_a_hit?
  return @grid[@moves.last] == :hit
end

#lettersObject



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