2014-09-11 5 views
1

Je crée un programme de rock, ciseaux, papier pour mon premier programme avec ruby.ruby: Programme de ciseaux de roche. Comment faire fonctionner l'algorithme correctement?

Je pense à utiliser un hachage appelé @wins pour déterminer si une certaine combinaison gagne. Si les deux mains sont identiques, le résultat est Draw!. Sinon, le résultat est Lose!.

J'ai du mal à implémenter l'algorithme pour juger les résultats. Comment puis-je vérifier si une combinaison donnée existe dans le hachage @wins pour juger si c'est une victoire ou maintenant?

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) 

Répondre

0
def judge(p1, p2) 
    case 
    when @wins[p1] == p2 then "Win" 
    when @wins[p2] == p1 then "Lose" 
    else "Draw" 
    end 
end 
+0

13: dans 'juge ': méthode définie' []' pour nil: NilClass (NoMethodError) de 29: dans '

« ' –

+0

Ah, à droite. '@wins = ...' devrait être dans la méthode 'initialize'; la façon dont vous l'avez maintenant, c'est le mettre sur la classe, et 'juge' ne peut pas le voir. Encore mieux (beaucoup mieux), faites-en une constante ('WINS = ...'), auquel cas elle reste là où elle est (pas de 'initialize'). – Amadan

+0

J'ai commencé à travailler. Merci! –

Questions connexes