Ruby 编写一个简单的CLI-Tic-Tac-Toe游戏,我的循环在中断之前只迭代一次(内部代码)

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

我正在尝试编程一种方法,以确定在tic-tac趾板上是否有成功的动作组合。该程序是一个简单的CLI应用程序。该方法接受一个板阵列,一个“”被认为是开放空间,而“X”和“O”代表移动。对于没有获胜组合的板,该方法返回“false”,如果有获胜组合,则返回获胜组合的值作为索引数组。每个指数代表了董事会的一个席位,如下所示:

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