这是一个tic tac toe游戏.我有一个board
包含九个字符串元素的数组,以及一个嵌套数组WIN_COMBINATIONS
,其位置组合来自board
:
board = ["X", "X", "X", " ", " ", " ", " ", " ", " "] WIN_COMBINATIONS = [ [0, 1, 2], [0, 3, 6], [0, 4, 8], [3, 4, 5], [6, 7, 8], [6, 4, 2], [1, 4, 7], [2, 5, 8] ]
如何使用中找到的组合board
全部"X"
或全部选择阵列组合?"O"
WIN_COMBINATIONS
例如,与上面的X在右对角线中胜出的板不同.
board = ["X", "O", "X", "O", "X", "O", "X", "X", "O"] # X | O | X # ---+---+--- # O | X | O # ---+---+--- # X | X | O won?(board) #=> [2,4,6]
Stefan.. 5
ndn的回答略有不同:
board = %w(X O X O X O X X O) WIN_COMBINATIONS.select { |c| board.values_at(*c).join =~ /XXX|OOO/ } #=> [[6, 4, 2]]
说明:
select
返回块返回的所有元素true
.
values_at
返回指定索引处的值:
board.values_at(*[0, 1, 2]) #=> ["X", "O", "X"]
*
将数组转换为参数列表,因此上面变为 values_at(0, 1, 2)
join
返回带有连接元素的字符串:
["X", "O", "X"].join #=> "XOX"
=~
检查字符串是否与正则表达式 匹配/XXX|OOO/
,即XXX
或者OOO
您可以替换select
使用find
,如果你只是要检索的第一个赢取的组合.
ndn的回答略有不同:
board = %w(X O X O X O X X O) WIN_COMBINATIONS.select { |c| board.values_at(*c).join =~ /XXX|OOO/ } #=> [[6, 4, 2]]
说明:
select
返回块返回的所有元素true
.
values_at
返回指定索引处的值:
board.values_at(*[0, 1, 2]) #=> ["X", "O", "X"]
*
将数组转换为参数列表,因此上面变为 values_at(0, 1, 2)
join
返回带有连接元素的字符串:
["X", "O", "X"].join #=> "XOX"
=~
检查字符串是否与正则表达式 匹配/XXX|OOO/
,即XXX
或者OOO
您可以替换select
使用find
,如果你只是要检索的第一个赢取的组合.