Class: XAndOs::Board

Inherits:
Object
  • Object
show all
Defined in:
lib/x_and_os/board.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rows = 3, columns = 3, default_value = ' ') ⇒ Board

Returns a new instance of Board.



4
5
6
7
8
9
# File 'lib/x_and_os/board.rb', line 4

def initialize(rows = 3, columns = 3, default_value = ' ')
  @default_value = default_value
  @rows          = rows.to_i
  @columns       = columns.to_i
  @grid          = new_grid
end

Instance Attribute Details

#columnsObject (readonly)

Returns the value of attribute columns.



2
3
4
# File 'lib/x_and_os/board.rb', line 2

def columns
  @columns
end

#default_valueObject (readonly)

Returns the value of attribute default_value.



2
3
4
# File 'lib/x_and_os/board.rb', line 2

def default_value
  @default_value
end

#gridObject (readonly)

Returns the value of attribute grid.



2
3
4
# File 'lib/x_and_os/board.rb', line 2

def grid
  @grid
end

#rowsObject (readonly)

Returns the value of attribute rows.



2
3
4
# File 'lib/x_and_os/board.rb', line 2

def rows
  @rows
end

Instance Method Details

#all_linesObject



50
51
52
53
54
55
56
57
58
59
# File 'lib/x_and_os/board.rb', line 50

def all_lines
  temp_board    = self.class.new(rows, columns)
  num_of_cells  = rows * columns

  (1..num_of_cells).each do |i|
    temp_board.set_cell(i,i)
  end

  temp_board.all_rows
end

#all_rowsObject



39
40
41
# File 'lib/x_and_os/board.rb', line 39

def all_rows
  diagonal_rows + vertical_rows + horizontal_rows
end

#cell_locationsObject



73
74
75
76
77
78
79
80
81
82
# File 'lib/x_and_os/board.rb', line 73

def cell_locations
  store = Hash.new {|h,k| h[k] = [] }
  
  grid.flatten.map.with_index.inject(store) do |store, (cell, index)|
    if cell != default_value
      store[cell].push(index + 1)
    end
    store
  end
end

#complete_rowsObject



43
44
45
46
47
48
# File 'lib/x_and_os/board.rb', line 43

def complete_rows
  all_rows.reject do |row|
    uniq_values = row.uniq
    uniq_values.include?(default_value) || uniq_values.count > 1
  end
end

#count_cellsObject



61
62
63
# File 'lib/x_and_os/board.rb', line 61

def count_cells
  @total_cells ||= rows * columns
end

#diagonal_rowsObject



25
26
27
28
29
# File 'lib/x_and_os/board.rb', line 25

def diagonal_rows
  left_to_right = (0...rows).map { |i| grid[i][i] }
  right_to_left = (0...rows).map { |i| grid[i][columns - (i + 1)] }
  [left_to_right, right_to_left]
end

#find_cells(value) ⇒ Object



65
66
67
# File 'lib/x_and_os/board.rb', line 65

def find_cells value
  grid.flatten.map.with_index { |val, i| i + 1 if val == value }.compact
end

#free_cellsObject



69
70
71
# File 'lib/x_and_os/board.rb', line 69

def free_cells
  find_cells default_value
end

#get_cell(cell_num) ⇒ Object



20
21
22
23
# File 'lib/x_and_os/board.rb', line 20

def get_cell(cell_num)
  row, column = human_to_grid(cell_num)
  grid[row][column]
end

#horizontal_rowsObject



35
36
37
# File 'lib/x_and_os/board.rb', line 35

def horizontal_rows
  grid
end

#set_cell(cell_num, value) ⇒ Object



11
12
13
14
15
16
17
18
# File 'lib/x_and_os/board.rb', line 11

def set_cell(cell_num, value)
  row, column = human_to_grid(cell_num)
  if grid[row][column] == default_value
    grid[row][column] = value
  else
    false
  end
end

#vertical_rowsObject



31
32
33
# File 'lib/x_and_os/board.rb', line 31

def vertical_rows
  grid.transpose
end