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)
13: dans 'juge ': méthode définie' []' pour nil: NilClass (NoMethodError) de 29: dans ' « ' –
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
J'ai commencé à travailler. Merci! –