On Sun, Oct 18, 2009 at 6:21 AM, Matt Beckley <greenlizards / yahoo.com>wrote:

> Trying to write code for rock paper scissors game and read in two values
> from people playing. Take those values and determine the outcome. As I
> understand an array you are able to compare values with the <=> and I
> think this is the big jump I need to making things work. I would have
> something like this:
>
>  a = [rock,paper,scissors] #Comparison array
>  b = [userinput1 , userinput2] #User store .a values
>
>
>  if userinput1 < userinput2   #loop for showing who wins
>  elsif userinput1 > userinput2
>  else userinput1 == userinput2
>
> So my question is how do I go about comparing my two arrays to determine
> a outcome? I think a hash is the way to go, not sure how to make the
> jump. please include code. Thanks,
> --
> Posted via http://www.ruby-forum.com/.
>
>
How about something like this
http://codepad.org/Q9iW5lBw


class RPS

  Hierarchy = {
    :rock      =>  { :rock => :tie  , :paper => :lose , :scissors => :win  } ,
    :paper     =>  { :rock => :win  , :paper => :tie  , :scissors => :lose } ,
    :scissors  =>  { :rock => :lose , :paper => :win  , :scissors => :tie  } ,
  }

  Choices = Hierarchy.keys

  attr_reader :guess
  def initialize( guess )
    guess = guess.to_sym
    raise "invalid guess" unless Choices.include?(guess)
    @guess = guess
  end

  def fight     ( opponent )   Hierarchy[guess][opponent.guess]   end
  def beats?    ( opponent )   fight(opponent) == :win            end
  def beat_by?  ( opponent )   fight(opponent) == :lose           end
  def ties?     ( opponent )   fight(opponent) == :tie            end
  def to_s      (          )   guess.to_s                         end

end



RPS::Choices.each do |userinput1|  RPS::Choices.each do |userinput2|

  player1,player2 = RPS.new(userinput1),RPS.new(userinput2)

  outcome = player1.fight(player2)

  puts "player1 chooses #{player1.guess} and #{outcome}s " \
       "the fight with player2 who chooses #{player2.guess}"

end end