class Board

Attributes

column_scores[R]
dimension[R]
game_history[R]
left_diagonal_score[R]
player_one[R]
player_two[R]
player_value[R]
right_diagonal_score[R]
row_scores[R]

Public Class Methods

new(dimension = 3) click to toggle source
# File lib/board.rb, line 5
def initialize(dimension = 3)
  @dimension = dimension
  @game_history, @board = [], Array.new(@dimension) {Array.new(@dimension) {0}}
  @row_scores, @column_scores = Array.new(@dimension) {0}, Array.new(@dimension) {0}
  @left_diagonal_score, @right_diagonal_score = 0, 0
  @player_one, @player_two = 1, -1
end

Public Instance Methods

corner_occupied?() click to toggle source
# File lib/board.rb, line 55
def corner_occupied?
  corner_cells.each { |corner| return true if @game_history.include?(corner) }
  return false
end
full?() click to toggle source
# File lib/board.rb, line 37
def full?
  @game_history.size == @dimension*@dimension
end
is_empty_at?(row, column) click to toggle source
# File lib/board.rb, line 33
def is_empty_at?(row, column)
  @board[row-1][column-1].zero?
end
move(row, column, value = nil) click to toggle source
# File lib/board.rb, line 13
def move(row, column, value = nil)
  @board[row-1][column-1] = value || player_value
  update_sums(row-1, column-1, value || player_value)
  @game_history << Move.new(row, column, value || player_value)
end
number_of_moves_made() click to toggle source
# File lib/board.rb, line 25
def number_of_moves_made
  @game_history.size
end
random_corner_cell() click to toggle source
# File lib/board.rb, line 60
def random_corner_cell
  corner_cells[rand(corner_cells.size)]
end
undo_move() click to toggle source
# File lib/board.rb, line 19
def undo_move
  move = @game_history.pop
  update_sums(move.row-1, move.column-1, -move.player_value)
  @board[move.row-1][move.column-1] = 0
end
value_at(row, column) click to toggle source
# File lib/board.rb, line 29
def value_at(row, column)
  @board[row-1][column-1]
end
winner() click to toggle source
# File lib/board.rb, line 51
def winner
  -player_value
end
winning_value() click to toggle source
# File lib/board.rb, line 41
def winning_value
  @dimension
end

Private Instance Methods

corner_cells() click to toggle source
# File lib/board.rb, line 66
def corner_cells
  [Move.new(1,1),
   Move.new(1,@dimension),
   Move.new(@dimension,1),
   Move.new(@dimension, @dimension)]
end
update_sums(row, column, update_value) click to toggle source
# File lib/board.rb, line 73
def update_sums(row, column, update_value)
  @row_scores[row] += update_value
  @column_scores[column] += update_value
  @left_diagonal_score += update_value if row == column
  @right_diagonal_score += update_value if row == @dimension - column - 1
end