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