Created
April 21, 2016 22:33
-
-
Save bootcoder/4632140239838a73f950b2d523c55450 to your computer and use it in GitHub Desktop.
guess_game_clean
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class GuessingGame | |
attr_accessor :congrats_message | |
attr_reader :remaining_guesses | |
def initialize(target_number, remaining_guesses) | |
@congrats_message = 'Yay, you won!' | |
@target_number = target_number | |
@remaining_guesses = remaining_guesses | |
@has_won = false | |
@has_lost = false | |
@wrong_guesses_archive = [] | |
end | |
def has_won? | |
@has_won | |
end | |
def has_lost? | |
@has_lost | |
end | |
def guess(number) | |
return alert_completed_game if has_lost? || has_won? | |
return you_win(number) if number == @target_number | |
return you_lose if @remaining_guesses == 1 | |
decrement_guesses unless guessed_before?(number) | |
archive_wrong_guess(number) | |
number < @target_number ? "Too low!" + last_guess_alert : "Too high!" + last_guess_alert | |
end | |
private | |
def alert_completed_game | |
if @has_won == true | |
"You already won. The number was #{@target_number}" | |
elsif @has_lost == true | |
"You already lost. The number was #{@target_number}" | |
end | |
end | |
def last_guess_alert | |
return "" unless @remaining_guesses == 1 | |
" WARNING: Only one guess left!" | |
end | |
def guessed_before?(number) | |
@wrong_guesses_archive.include?(number) | |
end | |
def you_win(number) | |
@remaining_guesses = 0 | |
@has_won = true | |
@congrats_message = "Correct! The number was #{number}" | |
return @congrats_message | |
end | |
def you_lose | |
@remaining_guesses = 0 | |
@has_lost = true | |
"You lost! The number was #{@target_number}" | |
end | |
def archive_wrong_guess(guess) | |
@wrong_guesses_archive << guess | |
end | |
def decrement_guesses | |
@remaining_guesses -= 1 | |
end | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment