class Board
Attributes
number_of_rows[R]
spaces[R]
winner[R]
Public Class Methods
new(spaces)
click to toggle source
# File lib/board.rb, line 5 def initialize(spaces) @spaces = spaces @number_of_rows = Math.sqrt(spaces.count) end
Public Instance Methods
check_available_spaces()
click to toggle source
# File lib/board.rb, line 16 def check_available_spaces @spaces.each_index.select {|space| space_available?(space)} end
current_player_marker()
click to toggle source
# File lib/board.rb, line 45 def current_player_marker string_count = spaces.count { |space| space.is_a? String } string_count.even? ? "X" : "O" end
game_over?()
click to toggle source
# File lib/board.rb, line 32 def game_over? game_tied? || game_won_by?("X") || game_won_by?("O") end
game_tied?()
click to toggle source
# File lib/board.rb, line 36 def game_tied? if check_available_spaces.empty? && !game_won_by?("X") && !game_won_by?("O") @winner = nil true else false end end
game_won_by?(marker)
click to toggle source
# File lib/board.rb, line 50 def game_won_by?(marker) split_into_lines.any? do |line| set_winner(marker) if line.all? {|space| space == marker} end end
place_marker(space)
click to toggle source
# File lib/board.rb, line 10 def place_marker(space) spaces = @spaces.dup spaces[space] = current_player_marker if space_available?(space) Board.new(spaces) end
space_available?(space)
click to toggle source
# File lib/board.rb, line 20 def space_available?(space) @spaces[space].nil? end
split_into_lines()
click to toggle source
# File lib/board.rb, line 24 def split_into_lines lines = [] split_into_rows.each {|row| lines.push(row)} split_into_columns.each{|column| lines.push(column)} split_into_diagonals.each{|diagonal| lines.push(diagonal)} lines end
Private Instance Methods
set_winner(marker)
click to toggle source
# File lib/board.rb, line 79 def set_winner(marker) @winner = marker end
split_into_columns()
click to toggle source
# File lib/board.rb, line 62 def split_into_columns split_into_rows.transpose end
split_into_diagonals()
click to toggle source
# File lib/board.rb, line 66 def split_into_diagonals diagonals = [] diagonals.push(split_left_diagonal, split_right_diagonal) end
split_into_rows()
click to toggle source
# File lib/board.rb, line 58 def split_into_rows @spaces.each_slice(@number_of_rows).to_a end
split_left_diagonal()
click to toggle source
# File lib/board.rb, line 71 def split_left_diagonal (0..@number_of_rows - 1).map {|position| split_into_rows[position][position]} end
split_right_diagonal()
click to toggle source
# File lib/board.rb, line 75 def split_right_diagonal (0..@number_of_rows - 1).map {|position| split_into_rows.reverse[position][position]}.reverse end