使用Ruby while循环访问类方法
我正在创建一个简单的石头剪刀游戏,可以在控制台上玩。RPS游戏本身存储在一个类中,而console player版本存储在另一个类中。RPS游戏正在运行,控制台播放器正在运行一个游戏,但是当我尝试循环允许用户玩3个游戏时,我被卡住了。用户仍然不能玩三个以上的游戏,但游戏机不再输出游戏的赢家 以下是我目前的代码:使用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
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