我目前正在建造一款非常受欢迎的井字游戏的复制品,它使用纯红宝石&经过测试的TDD风格构建而成。井字游戏:检查玩家是否赢得
我遇到的唯一问题是,我不能在我的生活中弄清楚如何检查玩家何时赢得比赛。我知道这是一个相对简单的问题,但我只是有一天 - 我真的只是在这里作为最后的手段。
任何帮助都被大量赞赏 - 随时批评我目前的代码!我应付得来。 :)
我的代码:
class TicTacToe
WINNING_COMBINATIONS = [[0, 1, 2], [3, 4, 5], [6, 7, 8], #Horizontal
[0, 3, 6], [1, 4, 7], [2, 5, 8], #Vertical
[0, 4, 8], [2, 4, 6]] #Diagonal
def initialize
@board = ["", "", "", "", "", "", "", "", ""]
@players = ['player_one', 'player_two']
@current_player = 'player_one'
end
def player_1
@players.first
end
def player_2
@players.last
end
def switch
@current_player = opponent_of(@current_player)
end
def display_board
puts " #{@board[0]} | #{@board[1]} | #{@board[2]} "
puts "-----------"
puts " #{@board[3]} | #{@board[4]} | #{@board[5]} "
puts "-----------"
puts " #{@board[6]} | #{@board[7]} | #{@board[8]} "
end
def move(position)
fail "Please select a space within range." if position < 1 || position > 9
fail "That space is already taken!" unless @board[position-1].empty?
if @current_player == player_1
@board[position-1] = 'o'
else
@board[position-1] = 'x'
end
switch
end
def check_for_winner
#Help!
end
private
def opponent_of(player)
@players.select { |p| p != player }.first
end
end
嘿史蒂夫,谢谢你的回复!你说这和减去一个数组一样简单,但是我没有看到如何从WINNING_COMBINATIONS的每次迭代中减去板子来帮助我。对不起,在这里慢一点,但所有的帮助是超级赞赏。 – IainK
从数组中减去数组后,第二个数组中的每个元素都会从第一个数组中移除(如果找到)。如果你有'[0,4,8]'行,并且如果你减去了板[0,1,3,4,8],那么结果是空的[]',所以你可以说“组合中的每个属性线目前在我的董事会,所以我赢了!“。想象一个失败的场景......如果你有'[0,4,8]'而你减去'[0,1,3,8]',你会留下'[4]'。由于它落后了,这意味着它没有被减去,这意味着它在电路板上没有找到......所以你知道你没有'0,4,8'列表中的'4'。 – SteveTurczyn
所以(清楚)我们测试的是'(线路板)== []'(空阵列) – SteveTurczyn