Ruby-Tictaoe找到了赢家

Ruby-Tictaoe找到了赢家,r,ruby,terminal,tic-tac-toe,R,Ruby,Terminal,Tic Tac Toe,我知道Tictatcoe的问题之前已经发布过,但是在看了其他帖子和大量在线研究之后,我仍然感到困惑。我真的很感谢你的帮助 总的来说,我不明白为什么合适的赢家没有出现,有时nil似乎被赋予了一个等于“X”或“O”的值。我也很难搞清楚猫的把戏,但我想我已经接近了 这是我的全部代码,如果有任何其他信息可以帮助找到解决方案,请告诉我: class TicTacToe def initialize row1 = [nil,nil,nil] row2 = [nil,nil,nil]

我知道Tictatcoe的问题之前已经发布过,但是在看了其他帖子和大量在线研究之后,我仍然感到困惑。我真的很感谢你的帮助

总的来说,我不明白为什么合适的赢家没有出现,有时nil似乎被赋予了一个等于“X”或“O”的值。我也很难搞清楚猫的把戏,但我想我已经接近了

这是我的全部代码,如果有任何其他信息可以帮助找到解决方案,请告诉我:

class TicTacToe
def initialize
    row1 = [nil,nil,nil]
    row2 = [nil,nil,nil]
    row3 = [nil,nil,nil]
    @row1 = row1
    @row2 = row2
    @row3 = row3
end

def show_board
    print @row1
    puts
    print @row2
    puts
    print @row3
    puts
end

def prompt
    print " >>> "
end

def turn
    puts "Pick row #"
    print prompt
    row_choice = gets.chomp
    @row_choice = row_choice
    puts "Pick column #"
    print prompt
    column_choice = gets.chomp
    @column_choice = column_choice
end

def winner
    print "checking for winner..."
    if @row1[0] == @row1[1] && @row1[2]
        puts "We have a winner1!"
        replay()
    elsif @row2[0] == @row2[1] && @row2[2]
        puts "We have a winner2!"
        replay()
    elsif @row3[0] == @row3[1] && @row3[2]
        puts "We have a winner3!"
        replay()
    elsif @row1[0] == @row2[1] && @row3[2]
        puts "We have a winner4!"
        replay()
    elsif @row3[0] == @row2[1] && @row1[2]
        puts "We have a winner5!"
        replay()
    elsif @row1[0] == @row2[0] && @row3[0]
        puts "We have a winner6!"
        replay()
    elsif @row1[1] == @row2[1] && @row3[1]
        puts "We have a winner7!"
        replay()
    elsif @row1[2] == @row2[2] && @row3[2]
        puts "We have a winner8!"
        replay()
    #elsif @row1 && @row2 && @row3 != nil
    #   puts "Catsgame - no one wins!"
    #   replay()
    else
        puts "nope"
    end
end 

def replay
    puts "---------------------"
    puts "Would you like to play again? YES or NO"
    select = gets.chomp
    if select.downcase == "yes"
        @row1 = [nil,nil,nil]
        @row2 = [nil,nil,nil]
        @row3 = [nil,nil,nil]
        player1()
    else
        Process.exit(0)
    end
end

def player1
    puts "---------------------"
    puts "It is Player 1's turn"
    turn()
    if @row_choice == 1.to_s
        if @row1[@column_choice.to_i - 1] == "O"
            puts
            puts "Space is taken by Player 2"
            player1()
        elsif @row1[@column_choice.to_i - 1] == "X"
            puts
            puts "You are already in this space"
            player1()   
        else
            @row1[@column_choice.to_i - 1] = "X"
        end
    elsif @row_choice == 2.to_s
        if @row2[@column_choice.to_i - 1] == "O"
            puts
            puts "Space is taken by Player 2"
            player1()
        elsif @row2[@column_choice.to_i - 1] == "X"
            puts
            puts "You are already in this space"
            player1()   
        else
            @row2[@column_choice.to_i - 1] = "X"
        end
    elsif @row_choice == 3.to_s
        if @row3[@column_choice.to_i - 1] == "O"
            puts
            puts "Space is taken by Player 2"
            player1()
        elsif @row3[@column_choice.to_i - 1] == "X"
            puts
            puts "You are already in this space"
            player1()   
        else
            @row3[@column_choice.to_i - 1] = "X"
        end
    else
        puts
        puts "Pick 1, 2, or 3"
        player1()
    end
    show_board()
    winner()
    player2()
end

def player2
    puts "---------------------"
    puts "It is Player 2's turn"
    turn()
    if @row_choice == 1.to_s
        if @row1[@column_choice.to_i - 1] == "X"
            puts
            puts "Space is taken by Player 1"
            player2()
        elsif @row1[@column_choice.to_i - 1] == "O"
            puts
            puts "You are already in this space"
            player2()   
        else
            @row1[@column_choice.to_i - 1] = "O"
        end
    elsif @row_choice == 2.to_s
        if @row2[@column_choice.to_i - 1] == "X"
            puts
            puts "Space is taken by Player 1"
            player2()
        elsif @row2[@column_choice.to_i - 1] == "O"
            puts
            puts "You are already in this space"
            player2()   
        else
            @row2[@column_choice.to_i - 1] = "O"
        end
    elsif @row_choice == 3.to_s
        if @row3[@column_choice.to_i - 1] == "X"
            puts
            puts "Space is taken by Player 1"
            player2()
        elsif @row3[@column_choice.to_i - 1] == "O"
            puts
            puts "You are already in this space"
            player2()   
        else
            @row3[@column_choice.to_i - 1] = "O"
        end
    else
        puts
        puts "Pick 1, 2, or 3"
        player2()
    end
    show_board()
    winner()
    player1()
end
end

puts "The game begins!"
new_game = TicTacToe.new()
new_game.show_board()
new_game.player1()
谢谢大家!

你想要的是

if @row1[0] == @row1[1] && @row[0] == @row1[2]
    puts "We have a winner1!"
    replay()
elsif @row2[0] == @row2[1] && @row2[0] == @row2[2]
    puts "We have a winner2!"
    replay()
等等。
现在,您正在检查第一项和第二项是否相等,第三项是否存在。你要做的是对照第一项检查第二项和第三项,以确定它们是否都相等。

实际上,你最好检查谁是获胜者-

 if @row1[0] == @row1[1] && @ro1[0] == @row1[2] && @row1[0] == "X"
     puts "Player 1 Wins!"
     replay()
 elsif @row1[0] == @row1[1] && @row1[0] == @row1[2] && @row1[0] == "O"
     puts "Player 2 Wins!"
     replay()
 .....

您还需要将replay函数置于winner函数之上。

您的if语句没有按照您的想法执行。你需要a==b&&a==c,而不是a==b&&c谢谢你!我已经被困在这两天了,你这个摇滚!它正在工作:)