Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Ruby while循环访问类方法_Ruby_Class_Io_While Loop - Fatal编程技术网

使用Ruby while循环访问类方法

使用Ruby while循环访问类方法,ruby,class,io,while-loop,Ruby,Class,Io,While Loop,我正在创建一个简单的石头剪刀游戏,可以在控制台上玩。RPS游戏本身存储在一个类中,而console player版本存储在另一个类中。RPS游戏正在运行,控制台播放器正在运行一个游戏,但是当我尝试循环允许用户玩3个游戏时,我被卡住了。用户仍然不能玩三个以上的游戏,但游戏机不再输出游戏的赢家 以下是我目前的代码: class Game attr_accessor :status def initialize(name1, name2) @name1 = name1 @na

我正在创建一个简单的石头剪刀游戏,可以在控制台上玩。RPS游戏本身存储在一个类中,而console player版本存储在另一个类中。RPS游戏正在运行,控制台播放器正在运行一个游戏,但是当我尝试循环允许用户玩3个游戏时,我被卡住了。用户仍然不能玩三个以上的游戏,但游戏机不再输出游戏的赢家

以下是我目前的代码:

class Game
  attr_accessor :status

  def initialize(name1, name2)
    @name1 = name1
    @name2 = name2
    @status = []

  end

  def play(str1, str2)
    if @status.size == 3
      total = @status.inject(0) { |i, total| total += i }
      if total > 0
        "Game over, Player 2 wins"
      elsif total < 0
        "Game over, Player 1 wins"
        end
    else
      if (str1 == 'rock' && str2 == 'paper') || (str1 == 'scissors' && str2 == 'rock') || (str1 == 'paper' && str2 == 'scissors')
        @status << 1
        "Player 2 wins!"
      elsif (str2 == 'rock' && str1 == 'paper') || (str2 == 'scissors' && str1 == 'rock') || (str2 == 'paper' && str1 == 'scissors')
        @status << -1
        "Player 1 wins!"
      else
        "No winner"
      end
    end
  end
end


require 'io/console'

class RPSPlayer
  def start
    puts "Enter player 1 name"
    @player1 = gets.chomp
    puts "Enter player 2 name"
    @player2 = gets.chomp

    @new_game = Game.new(@player1, @player2)

    puts "#{@player1} challenges #{@player2} to an R-P-S showdown."

    player1_prompt = "#{@player1}:  what's your move?"
    player2_prompt = "#{@player2}:  what's your move?"

    while @new_game.status.size < 3
      puts player1_prompt
      str1 = gets.chomp
      puts player2_prompt
      str2 = gets.chomp

      @new_game.play(str1, str2)
   end
  end
end
如果我在控制台游戏中删除while循环,只是提示玩家输入并输入@new_game,我会得到赢家的名字,但当我在while循环中时,控制台只提示玩家移动3次,没有给出任何输出。有人能告诉我为什么会这样吗?

play方法返回一个字符串,但不打印它。要输出获胜者,您需要输入结果:

while @new_game.status.size < 3
  puts player1_prompt
  str1 = gets.chomp
  puts player2_prompt
  str2 = gets.chomp

  puts @new_game.play(str1, str2)
end