Class: XO::AI::Expert

Inherits:
Object
  • Object
show all
Defined in:
lib/xo/ai/expert.rb

Direct Known Subclasses

AdvancedBeginner, Novice

Class Method Summary collapse

Class Method Details

.all_moves(grid) ⇒ Object



30
31
32
# File 'lib/xo/ai/expert.rb', line 30

def self.all_moves(grid)
  grid.enum_for(:each_free).map { |r, c| XO::Position.new(r, c) }
end

.get_moves(grid, player) ⇒ Object



22
23
24
25
26
27
28
# File 'lib/xo/ai/expert.rb', line 22

def self.get_moves(grid, player)
  if moves = MOVES_CACHE[grid] || MOVES_CACHE[invert_grid(grid)]
    moves.map { |pos| XO::Position.new(*pos) }
  else
    XO::AI.minimax(grid, player).moves
  end
end

.suggest_moves(grid, player) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/xo/ai/expert.rb', line 9

def self.suggest_moves(grid, player)
  result = XO::Evaluator.analyze(grid, player)

  case result[:status]
  when :ok
    get_moves(grid, player)
  when :game_over
    []
  else
    raise IllegalGridStatusError
  end
end