class Board

Attributes

grid[R]

Public Class Methods

new(symbols = Array.new(9)) click to toggle source
# File lib/board.rb, line 3
def initialize(symbols = Array.new(9))
  @grid = symbols
end

Public Instance Methods

empty?() click to toggle source
# File lib/board.rb, line 7
def empty?
  grid.all?(&:nil?)
end
free_spaces?() click to toggle source
# File lib/board.rb, line 17
def free_spaces?
  grid.include?(nil)
end
grid_for_display() click to toggle source
# File lib/board.rb, line 38
def grid_for_display
  rows
end
make_move(index, symbol) click to toggle source
# File lib/board.rb, line 11
def make_move(index, symbol)
  copy_of_grid = grid.dup
  copy_of_grid[index] = symbol
  Board.new(copy_of_grid)
end
symbol_at(position) click to toggle source
# File lib/board.rb, line 21
def symbol_at(position)
  grid.at(position)
end
vacant_indices() click to toggle source
# File lib/board.rb, line 34
def vacant_indices
  grid.each_index.select{|v| grid[v].nil?}
end
winning_combination?() click to toggle source
# File lib/board.rb, line 25
def winning_combination?
  not_nil_row(find_winning_row_from(all_rows))
end
winning_symbol() click to toggle source
# File lib/board.rb, line 29
def winning_symbol
  @winning_row = find_winning_row_from(all_rows)
  @winning_row.nil? ? nil : @winning_row.first
end

Private Instance Methods

all_rows() click to toggle source
# File lib/board.rb, line 57
def all_rows
  @all ||= rows + columns + diagonals
end
columns() click to toggle source
# File lib/board.rb, line 73
def columns
  [
    [grid.at(0), grid.at(3), grid.at(6)],
    [grid.at(1), grid.at(4), grid.at(7)],
    [grid.at(2), grid.at(5), grid.at(8)]
  ]
end
diagonals() click to toggle source
# File lib/board.rb, line 81
def diagonals
  [
    [grid.at(0),grid.at(4), grid.at(8)],
    [grid.at(2), grid.at(4), grid.at(6)]
  ]
end
find_winning_row_from(rows) click to toggle source
# File lib/board.rb, line 46
def find_winning_row_from(rows)
  @all_rows ||= rows.find do |row|
         all_cells_match = row.all? {|cell| cell == row.first}
         all_cells_match && not_nil_symbol(row.first)
      end
end
not_nil_row(row) click to toggle source
# File lib/board.rb, line 53
def not_nil_row(row)
  !row.nil?
end
not_nil_symbol(cell) click to toggle source
# File lib/board.rb, line 61
def not_nil_symbol(cell)
  !cell.nil?
end
rows() click to toggle source
# File lib/board.rb, line 65
def rows
  [
    [grid.at(0), grid.at(1), grid.at(2)],
    [grid.at(3), grid.at(4), grid.at(5)],
    [grid.at(6), grid.at(7), grid.at(8)]
  ]
end