ruby:石头剪刀布程序。如何使算法正常工作?

ruby:石头剪刀布程序。如何使算法正常工作?,ruby,Ruby,我正在为我的第一个ruby程序创建一个石头、剪刀、布程序 我正在考虑使用名为@wins的散列来确定某个组合是否获胜。如果两只手是一样的,结果是一个抽签。否则,结果是Lose 我正在努力实现判断结果的算法。我如何检查@wins散列中是否存在给定的组合,以判断它是赢还是现在赢 class Hand attr_accessor :shape @@shapes = [:rock, :scissors, :paper] def generate @shape = @

我正在为我的第一个ruby程序创建一个石头、剪刀、布程序

我正在考虑使用名为
@wins
的散列来确定某个组合是否获胜。如果两只手是一样的,结果是一个
抽签。否则,结果是
Lose

我正在努力实现判断结果的算法。我如何检查
@wins
散列中是否存在给定的组合,以判断它是赢还是现在赢

class Hand
    attr_accessor :shape
    @@shapes = [:rock, :scissors, :paper]
    def generate
        @shape = @@shapes[rand(3)]
    end
end

class Game
    @wins = {rock: :scissors, scissors: :paper, paper: :rock}
    def judge(p1, p2)
        'Win!'  if (a way to see if a given combination exists within a @wins hash)         # Not working
        'Draw!' if p1 == p2 # Not working
        else 'Lose!'
    end
end

player_hand = Hand.new
player_hand.shape = ARGV.join.to_sym
puts player_hand.shape # Debug

computer_hand = Hand.new
computer_hand.shape = computer_hand.generate
puts computer_hand.shape # Debug

game = Game.new
puts game.judge(player_hand.shape, computer_hand.shape)

13:in
judge:未定义的方法
[]”,用于从29:in
开始的nil:NilClass(NoMethodError)
啊,对
@wins=…
应该在
初始化
方法中;现在的方式是,它在类中设置它,而
judge
无法看到它。更好(更好)的是,将其设置为常量(
WINS=…
),在这种情况下,它保持在原来的位置(无
初始化
)。
def judge(p1, p2)
  case
    when @wins[p1] == p2 then "Win"
    when @wins[p2] == p1 then "Lose"
    else "Draw"
  end
end