【问题标题】:How do I let the user know whether X or O won? [closed]如何让用户知道是 X 还是 O 赢了? [关闭]
【发布时间】:2013-11-18 01:27:23
【问题描述】:

我正在编写一个井字游戏程序。现在,当有人连续获得三个时,游戏就结束了。我想在比赛结束前让用户知道是 X 还是 O 赢得了比赛。有什么建议吗?

这是我的代码:

class Game

        def initialize
                @board=Array.new
                @board[1]="1  __|"
                @board[2]="__"
                @board[3]="|__"
                @board[4]="\n2  __|"
                @board[5]="__"
                @board[6]="|__"
                @board[7]="\n3    |"
                @board[8]="  "
                @board[9]="|  "
                @turn="x"
                @win_status = false
        end

        def turn
                @turn
        end

        def show_board
                puts "  1   2   3"
                @board.each do |i|
                        print i
                end
                puts ""
        end

        def set_turn #switches turns
        if @turn == "x"
                @turn = "o"
        else @turn == "o"
                @turn = "x"
        end
        end

        def make_move
                puts "Enter x coordinate"
                x=gets.to_i
                puts "Enter y coordinate"
                y=gets.to_i
@board[1]="1  _"+@turn+"|"   if y==1 && x==1
@board[2]="_"+@turn    if y==2 && x==1
@board[3]="|_"+@turn   if y==3 && x==1
@board[4]="\n2  _"+@turn+"|" if y==1 && x==2
@board[5]="_"+@turn    if y==2 && x==2
@board[6]="|_"+@turn   if y==3 && x==2
@board[7]="\n3   "+@turn+"|" if y==1 && x==3
@board[8]=" "+@turn    if y==2 && x==3
@board[9]="|"+@turn+" \n"    if y==3 && x==3
        end
def win_combo
                return [[@board[1][1] + @board[2][1] + @board[3][2]], [@board[4][2] + @board[5][1] + @board[6][2]], [@board[7][1] + @board[8][1] + @board[9][1]],[@board[1][1] + @board[4][2] + @board[7][1]], [@board[2][1] + @board[5][1] + @board[8][1]], [@board[3][2] + @board[6][2] + @board[9][1]], [@board[1][1] + @board[5][1] + @board[9][1]], [@board[3][2] + @board[5][1] + @board[7][1]]]
        end

        def check_win
                #if some row or column or diagonal is "xxx" or "ooo" then set @win_status = true
                self.win_combo.each do |arr|
                        str = arr.join
                        if str == "xxx" or str == "ooo"
                                return true
                        end
                end
                return false
        end
end


g = Game.new
while g.check_win != true
        g.show_board
        g.set_turn
        g.make_move
end

【问题讨论】:

  • 这个问题似乎跑题了,因为它是一个写代码的请求。

标签: ruby-on-rails ruby ruby-on-rails-3 class tic-tac-toe


【解决方案1】:

我建议您创建一个Board 类,该类知道如何根据转弯绘制自己。这会从Game 中删除大量代码并使其更易于理解。

要回答您的问题,请使用此处的代码:

                    if str == "xxx" or str == "ooo"
                            return true
                    end

不区分 X 获胜或 O 获胜。在这里您可以修改代码以分别检查 X win 和 O win,并显示相应的消息。

【讨论】:

    【解决方案2】:

    你可以做很多事情。一种方法可能是更改 check_win 方法以返回字符串。例如,它可以返回“X”、“O”或“none”。然后使用

    while g.check_win.eql?("none")
     ...
    end
    puts g.check_win + " WINS!"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      相关资源
      最近更新 更多