0

三目並べにネガマックスを実装しようとして頭を壁にぶつけています

def negamax(board_obj, mark, depth)
  if board_obj.game_over?
    return value(board_obj)
  else
    max = -1.0/0 # negative infinity
    if mark == @mark
      next_mark = @opponent_mark
    else
      next_mark = @mark
    end
    board_obj.empty_squares.each do |square|
      board_obj[square] = mark
      x = -negamax(board_obj, next_mark, depth + 1)
      board_obj[square] = ' '
      if x > max
        max = x
        @scores << x
        @best_move = square if depth == 1
      end
    end
    return max
  end
end

# determines value of final board state
def value(board_obj)
  if board_obj.mark_win?(@mark)
    return 1
  elsif  board_obj.mark_win?(@opponent_mark)
    return -1
  else
    return 0
  end
end

残りのコードはこちら: https://github.com/dave-maldonado/tic-tac-doh/blob/AI/tic-tac-doh.rb

結果は出ますが、AI は簡単に打ち負かされるので、何かがおかしいことはわかっています。助けていただければ幸いです。

4

1 に答える 1