Ruby 编写一个简单的CLI-Tic-Tac-Toe游戏,我的循环在中断之前只迭代一次(内部代码)
我正在尝试编程一种方法,以确定在tic-tac趾板上是否有成功的动作组合。该程序是一个简单的CLI应用程序。该方法接受一个板阵列,一个“”被认为是开放空间,而“X”和“O”代表移动。对于没有获胜组合的板,该方法返回“false”,如果有获胜组合,则返回获胜组合的值作为索引数组。每个指数代表了董事会的一个席位,如下所示:Ruby 编写一个简单的CLI-Tic-Tac-Toe游戏,我的循环在中断之前只迭代一次(内部代码),ruby,Ruby,我正在尝试编程一种方法,以确定在tic-tac趾板上是否有成功的动作组合。该程序是一个简单的CLI应用程序。该方法接受一个板阵列,一个“”被认为是开放空间,而“X”和“O”代表移动。对于没有获胜组合的板,该方法返回“false”,如果有获胜组合,则返回获胜组合的值作为索引数组。每个指数代表了董事会的一个席位,如下所示: 0 1 2 3 4 5 6 7 8 董事会的一个例子是 board = ["X", "O", " ", "O", "X", " ", " ", " ", "X"] '#w
0 1 2
3 4 5
6 7 8
董事会的一个例子是
board = ["X", "O", " ", "O", "X", " ", " ", " ", "X"]
'#won? would return [0, 4, 8]
问题是,我的代码在跳出循环之前只迭代一个成功的组合
我将每个获胜组合存储为一个恒定的获胜组合。我的代码如下:
def won?(board)
WIN_COMBINATIONS.each do | win_combination |
win_combination.each do | win_index |
if win_combination.all? { | win_index | board[win_index] == "X" }
win_combination
elsif win_combination.all? { | win_index | board[win_index] == "O" }
win_combination
else
false
end
end
end
end
Enumerable#每个
只迭代列表/数组。您需要的是或:
Enumerable#每个
只迭代列表/数组。您需要的是或:
def won?(board)
WIN_COMBINATIONS.detect do |win_combination|
win_combination.all? { |win_index| board[win_index] == "X" } ||
win_combination.all? { |win_index| board[win_index] == "O" }
end
end