Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Player
- attr_accessor :name
- NAMES = ['R2D2', 'BOB', 'ELISA']
- MOVES = ['rock', 'paper', 'scissors']
- def initialize(name)
- @name = name
- end
- def choose
- puts 'Choose either rock paper or scissors'
- end
- end
- class Human < Player
- attr_accessor :move
- def initialize
- @name = pick_a_name
- end
- def choose
- super
- loop do
- choice = gets.chomp
- if !Player::MOVES.include? choice
- puts 'Please choose either rock paper or scissors'
- next
- else
- self.move = choice
- puts "#{name} chose #{choice}"
- break
- end
- end
- end
- private
- def pick_a_name
- puts "What is your name"
- answer = gets.chomp
- end
- end
- class Computer < Player
- attr_accessor :move
- def initialize
- super(Player::NAMES.sample)
- end
- def choose
- self.move = Player::MOVES.sample
- puts "#{name} chose #{move}"
- end
- end
- class RPSGame
- @@games = nil
- attr_accessor :human, :computer, :score
- def initialize
- @human = Human.new
- @computer = Computer.new
- @score = {human: 0,computer: 0}
- end
- def display_welcome_message
- puts 'Welcome to Rock Paper Scissors'
- end
- def display_goodbye_message
- puts 'Thanks for playing rock paper scissors'
- end
- def play_again?
- puts "Would you like to play again. Type y or n"
- answer = nil
- loop do
- answer = gets.chomp
- break if ['y', 'n'].include? answer.downcase
- puts 'Sorry you have to choose y or n'
- end
- if answer == 'y'
- @@games += 1
- return true
- end
- return false if answer == 'n'
- end
- def play
- display_welcome_message
- loop do
- human.choose
- computer.choose
- display_winner
- break unless play_again?
- end
- display_goodbye_message
- end
- end
Add Comment
Please, Sign In to add comment