【发布时间】:2020-11-28 20:17:08
【问题描述】:
我一直坚持为井字游戏实现极小极大算法。我每次都遇到同样的错误(未定义的方法 `
我的实现如下:
def minimax(current_board, current_player)
if user_won?(current_board)
return -10
elsif computer_won?(current_board)
return 10
elsif tie?(current_board)
return 0
end
available_squares = empty_squares(current_board)
moves = []
available_squares.each do |available_square|
move = {}
current_board[available_square] = COMPUTER_MARKER if current_player == 'computer'
current_board[available_square] = PLAYER_MARKER if current_player == 'player'
score = minimax(current_board, alternate_player(current_player))
current_board[available_square] = INITIAL_MARKER
move[available_square] = score
moves.push(move)
end
best_move = nil
best_score = current_player == 'computer' ? -Float::INFINITY : Float:: INFINITY
if current_player == 'computer'
for hsh in moves
hsh.each do |move, score|
if score > best_score
best_move = move
best_score = score
end
end
end
else
for hsh in moves
hsh.each do |move, score|
if score < best_score
best_move = move
best_score = score
end
end
end
end
best_move
end
我已经坚持了好几天,所以任何帮助都将不胜感激。
这是我的其余代码:https://github.com/YBirader/launch_school/blob/master/RB101/lesson_6/ttt.rb
【问题讨论】:
-
看起来 score 是在一个循环中定义的,available_squares.each - 所以如果 available_squares 为空,则该代码将永远不会运行,并且将不会定义 score。这将导致此错误。
-
分数仅在块内使用。它被添加到移动哈希中,然后破坏性地附加到移动数组中,因此这不应该是问题。如果有帮助,我已经添加了我的其余代码。
标签: ruby algorithm tic-tac-toe minimax