Skip to content

Instantly share code, notes, and snippets.

@bootcoder
Created April 21, 2016 22:33
Show Gist options
  • Save bootcoder/4632140239838a73f950b2d523c55450 to your computer and use it in GitHub Desktop.
Save bootcoder/4632140239838a73f950b2d523c55450 to your computer and use it in GitHub Desktop.
guess_game_clean
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