lundi 8 février 2016

Rock paper scissors in Ruby

I have to implement a small part of a Rock, Paper, Scissors game for an assignment. Here is my code:

class RockPaperScissors

  # Exceptions this class can raise:
  class NoSuchStrategyError < StandardError ; end

  def self.winner(player1, player2)
    # YOUR CODE HERE

    puts "player1 = " + player1[1]
    if (player1[1] || player2[1] != 'R') || (player1[1] || player[2] != 'P') || (player1[1] || player2[1] != 'S')
      raise NoSuchStrategyError.new("Strategy must be one of 'R','S','P'")
    else
      if player1[1] == player2[1]
        return player1
      elsif (player1[1] == 'R' && player2[1] == 'P') || (player1[1] == 'P' && player2[1] == 'S') || (player1[1] == 'S' && player2[1] == 'R')
        return player2
      else 
        return player1
      end
    end
  end

  def self.tournament_winner(tournament)
    # YOUR CODE HERE
  end

end

I am using rspec to test out the code and it breaks in both of the below cases. I am assuming that it has to do with where I check to make sure that the input is valid, and even though the input is valid, for whatever reason, the way I am doing the line if (player1[1] || player2[1] != 'R') || (player1[1] || player[2] != 'P') || (player1[1] || player2[1] != 'S') is making the input fail on every case. How can I fix that line so that if the input is valid, then it doesn't raise an error?

Failures:

  1) RockPaperScissors game rock breaks scissors [10 points]
     Failure/Error: raise NoSuchStrategyError.new("Strategy must be one of 'R','S','P'")

     RockPaperScissors::NoSuchStrategyError:
       Strategy must be one of 'R','S','P'
     # ./lib/rock_paper_scissors.rb:11:in `winner'
     # ./spec/rock_paper_scissors_spec.rb:10:in `block (3 levels) in <top (required)>'

EDIT: player1 and player2 are arrays with format ["playername", "move"] with the move being either R,S or P for rock, scissors or paper

Aucun commentaire:

Enregistrer un commentaire