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