Class: XAndOs::Board
- Inherits:
-
Object
- Object
- XAndOs::Board
- Defined in:
- lib/x_and_os/board.rb
Instance Attribute Summary collapse
-
#columns ⇒ Object
readonly
Returns the value of attribute columns.
-
#default_value ⇒ Object
readonly
Returns the value of attribute default_value.
-
#grid ⇒ Object
readonly
Returns the value of attribute grid.
-
#rows ⇒ Object
readonly
Returns the value of attribute rows.
Instance Method Summary collapse
- #all_lines ⇒ Object
- #all_rows ⇒ Object
- #cell_locations ⇒ Object
- #complete_rows ⇒ Object
- #count_cells ⇒ Object
- #diagonal_rows ⇒ Object
- #find_cells(value) ⇒ Object
- #free_cells ⇒ Object
- #get_cell(cell_num) ⇒ Object
- #horizontal_rows ⇒ Object
-
#initialize(rows = 3, columns = 3, default_value = ' ') ⇒ Board
constructor
A new instance of Board.
- #set_cell(cell_num, value) ⇒ Object
- #vertical_rows ⇒ Object
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
#columns ⇒ Object (readonly)
Returns the value of attribute columns.
2 3 4 |
# File 'lib/x_and_os/board.rb', line 2 def columns @columns end |
#default_value ⇒ Object (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 |
#grid ⇒ Object (readonly)
Returns the value of attribute grid.
2 3 4 |
# File 'lib/x_and_os/board.rb', line 2 def grid @grid end |
#rows ⇒ Object (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_lines ⇒ Object
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_rows ⇒ Object
39 40 41 |
# File 'lib/x_and_os/board.rb', line 39 def all_rows diagonal_rows + vertical_rows + horizontal_rows end |
#cell_locations ⇒ Object
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_rows ⇒ Object
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_cells ⇒ Object
61 62 63 |
# File 'lib/x_and_os/board.rb', line 61 def count_cells @total_cells ||= rows * columns end |
#diagonal_rows ⇒ Object
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_cells ⇒ Object
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_rows ⇒ Object
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_rows ⇒ Object
31 32 33 |
# File 'lib/x_and_os/board.rb', line 31 def vertical_rows grid.transpose end |