class RockPaperScissors

Constants

CHOICES

Make choices constant (2d list)

this 2d array contains all the options (in string format) the user can use

COMPUTER_CHOICES

Define possible computer choices

grab the values of the hash

LOSERS

Map array for losers

this flips the items in the `WINNERS` 2d array

NTRY_TO_SYM

Define an entry to symbol hash

this is a “hash” that contains the keys and values for winning and losing

VALID_ENTRIES

Define what our valid entries out

grab the keys of the hash

WINNERS

Define winners 2d array

defines winners in 2d array/list format

Public Class Methods

new() click to toggle source

Define constructor for class

# File lib/RockPaperScissors.rb, line 53
def initialize
    @player_score = @computer_score = @ties = 0
end

Public Instance Methods

play(winning_score) click to toggle source

Define play game method

this method will be public it will also constain most of the “play” functioonality for this game

# File lib/RockPaperScissors.rb, line 61
def play(winning_score)
    while @player_score < winning_score && @computer_score < winning_score
        puts "\nPlayer score: #{@player_score}, " +
            "Computer score: #{@computer_score}, Ties: #{@ties}.\n"
        player = player_choice
        computer = COMPUTER_CHOICES.sample # chooses a random option
        puts "\nPlayer chooses #{player.to_s.downcase}."
        puts "Computer chooses #{computer.to_s.downcase}.\n"
        case player_outcome [player, computer]
        when :WIN
            printf "\n%s beats %s, player wins the round. \n\n" % [player.to_s.capitalize, computer.to_s.downcase]
            @player_score += 1
        when :LOSE
            printf "\n%s beats %s, computer wins the round.\n\n" % [computer.to_s.capitalize, player.to_s.downcase]
            @computer_score += 1
        else
            puts "\nTie, choose again\n"
            @ties += 1
        end
    end
    printf "\nFinal score:\nplayer: %i, computer: %i; (ties: %i).\n\n" % [@player_score, @computer_score, @ties]
    case final_outcome(@player_score, @computer_score)
    when :WIN
        puts "Player wins!\n"
    when :LOSE
        puts "Computer wins!\n"
    end
    print "\n[press the enter/return key to exit game]"
    gets
    puts
end

Protected Instance Methods

final_outcome(pl, co) click to toggle source

Define final outcome function

this method is protected this will determine who wins the whole match in the end

# File lib/RockPaperScissors.rb, line 125
def final_outcome(pl, co)
    return :WIN  if pl > co
    return :LOSE if pl < co
end
player_choice() click to toggle source

Make player choice method

this method will be protected this will sanity check the user's choice

# File lib/RockPaperScissors.rb, line 97
def player_choice
    loop do
        print "\nChoose: Rock (r), Paper (p), or Scissors (s): "
        choice = gets.chomp.downcase
        if NTRY_TO_SYM.key?(choice)
            return NTRY_TO_SYM[choice]
        elsif choice != VALID_ENTRIES
            puts "\nThat entry is invalid. Please re-enter.\n"
        else
            return nil
        end
    end
end
player_outcome(plays) click to toggle source

Define player outcome

this method is protected this defines the round outcome of the game

# File lib/RockPaperScissors.rb, line 115
def player_outcome(plays)
    return :WIN  if WINNERS.include?(plays)
    return :LOSE if LOSERS.include?(plays)
    return :TIE  if !:WIN | !:LOSE
end