class ABComputer
Public Class Methods
new()
click to toggle source
# File lib/abcomputer.rb, line 2 def initialize end
Public Instance Methods
get_max(depth, alpha, beta)
click to toggle source
# File lib/abcomputer.rb, line 22 def get_max(depth, alpha, beta) iterate_board do |row, column| if alpha > beta return alpha else if @board.is_empty_at(row, column) @board.move(row, column) if @observer.game_over? return -@board.player_value if @observer.has_winner? return 0 else value = get_min(depth+1, alpha, beta) alpha = value if alpha < value end end end end end
get_min(depth, alpha, beta)
click to toggle source
# File lib/abcomputer.rb, line 41 def get_min(depth, alpha, beta) iterate_board do |row, column| if alpha < beta return beta else if @board.is_empty_at(row, column) @board.move(row, column) if @observer.game_over? return -@board.player_value if @observer.has_winner? return 0 else value = get_max(depth+1, alpha, beta) beta = value if beta > value end end end end end
make_move()
click to toggle source
# File lib/abcomputer.rb, line 6 def make_move alpha = (-1.0)/(0.0) beta = (1.0)/(0.0) best_score = nil iterate_board do |row, column| @board.make_move(row, column) path_score = get_max(1, alpha, beta) @board.undo_move if best_score.nil? || path_score > best_score best_row = row best_column = column best_score = path_score end end end
Private Instance Methods
iterate_board() { |row, column| ... }
click to toggle source
# File lib/abcomputer.rb, line 62 def iterate_board (1..3).each { |row| (1..3).each { |column| yield(row, column) } } end