在一個搖滾紙剪刀遊戲中,每個玩家選擇玩Rock(R),Paper(P)或Scissors(S)。規則是:岩石破碎剪刀,剪刀剪紙,但紙覆蓋岩石。在一輪搖滾紙剪刀中,每個玩家的名字和策略都被編碼爲兩個元素的陣列。創建一個RockPaperScissors
類,它有兩個2個元素的陣列類似上面那些類方法的贏家,並返回表示贏家的一個:岩石剪刀 - 作業
RockPaperScissors.winner(['Armando','P'], ['Dave','S']) # => ['Dave','S']
如果任一遊戲者的策略比「R」,「P」以外的或「S」(case-SENSITIVE)時,該方法應產生'RockPaperScissors::NoSuchStrategyError
'例外並提供消息:「策略必須是R,P,S之一」
如果兩個玩家使用相同的策略,球員是贏家。
我有我的代碼如下。我的代碼沒有正確比較這兩行字符串
(@p1[1,1]==rules["#{p}"][email protected]:@p2).
請幫我一把。
class RockPaperScissors
def winner(p1,p2)
@p1 = p1
@p2 = p2
p = (@p1[1,1][email protected][1,1]).sort
rules = Hash.new(0)
rules = {"PR"=>"R","PS"=>"S", "RS"=>"R", "PP"=>"1","RR"=>"1","SS"=>"1"}
if rules["#{p}"].nil?
raise RockPaperScissors::NoSuchStrategyError,"Strategy must be one of R,P,S"
elseif rules["#{p}"]=="1"
return @p1
else
print @p1[1,1]
print rules["#{p}"]
@p1[1,1]==rules["#{p}"][email protected]:@p2
end
end
end
t = RockPaperScissors.new
print t.winner(['Armando','R'], ['Dave','S'])
感謝您的答覆。你的代碼看起來優雅。你還可以評論爲什麼我的代碼不在@ p1 [1,1] ==規則[「#{p}」]?@ p1:@ p2行。比較運算符不評估兩個字符串值。 – user3657518
@tilthouse這是OP的答案我想? –
我刪除了我的評論,因爲我誤解了你的代碼 – tilthouse