2016-07-15 9 views
0

私はifとelsifのステートメントの後に勝利の配列を表示しようとしていますが、勝利者として選ばれた配列を正しく表示する方法がわかりませんifとelsif文でチェックされます。勝利の配列を表示しようとしています

# Helper Method 
    def position_taken?(board, index) 
    !(board[index].nil? || board[index] == " ") 
    end 


# Define your WIN_COMBINATIONS constant 
WIN_COMBINATIONS = [ 
    [0,1,2], 
    [3,4,5], 
    [6,7,8], 
    [0,3,6], 
    [1,4,7], 
    [2,5,8], 
    [0,4,8], 
    [2,4,6] 
    ] 
#board = [" ", "X", "O"] 
def won?(board) 
WIN_COMBINATIONS.each do |win_combination| 

win_index_1 = win_combination[0] 
position_1 = board[win_index_1] 

win_index_2 = win_combination[1] 
position_2 = board[win_index_2] 

win_index_3 = win_combination[2] 
position_3 = board[win_index_3] 
#is position 1, 2 , and 3 all equal to X or O? 
#if so return win_combination 
if position_1 == "X" && position_2 == "X" && position_3 == "X" 
    win_combination 
elsif position_1 == "O" && position_2 == "O" && position_3 == "O" 
    win_combination 
    else 
    false 
    end 
end 
    end 

答えて

0

これを試すことができますか?

def won?(board) 
    winner = nil 
    WIN_COMBINATIONS.each do |win_combination| 
    win_index_1 = win_combination[0] 
    position_1 = board[win_index_1] 

    win_index_2 = win_combination[1] 
    position_2 = board[win_index_2] 

    win_index_3 = win_combination[2] 
    position_3 = board[win_index_3] 

    if position_1 == "X" && position_2 == "X" && position_3 == "X" 
     winner = win_combination 
    elsif position_1 == "O" && position_2 == "O" && position_3 == "O" 
     winner = win_combination 
    end 

    break if winner 
    end 

    return winner 
end 
+0

も空のボードがある場合はfalseを表示する方法はありますか? –

+0

あなたは'won?'メソッドの最初の行に 'board.blank if false if return 'を実行することができます。 –

0
def won?(board) 
    WIN_COMBINATIONS.detect do |win_combination| 
    [[?X], [?O]].include? win_combination.map(&board.method(:[])).uniq 
    end 
end 

このコードは、初心者のために少し不可解に見えるかもしれませんが、それはかなりきれいで透明です。ここで行うこと:

  1. Enumerable#detectを使用して勝者の組み合わせを検出します。
  2. 条件、我々その後確認するには:これはあなたの6行win_index_N = ...は基本的に何をすべきかです(ボードにする
    1. Array#map現在の勝利の組み合わせ;
    2. 結果の配列では、我々はユニークなアイテムを取得し、その結果だろう場合'O'または'X'のいずれであってもよく、唯一の3つのすべてのシンボルは同じです。
+0

もう一度ありがとうございました!私はこれをチェックします –

+0

""と記されている空のボードもこのアカウントですか? –

+0

ああ、はい、いいキャッチです。私は数秒で答えを更新します。 – mudasobwa

関連する問題