Merge pull request #708 from serranojl/main

Ruby version for Stars
This commit is contained in:
Jeff Atwood
2022-04-08 23:22:55 -05:00
committed by GitHub

90
82_Stars/ruby/stars.rb Normal file
View File

@@ -0,0 +1,90 @@
class Stars
MAX_NUM = 100
MAX_GUESSES = 7
def start
print "Do you want instructions? (Y/N) "
response = gets.chomp!
if response.upcase[0] == "Y"
print_instructions()
end
still_playing = true
while still_playing
secret_number = rand(1..MAX_NUM)
puts "\n\nOK, I am thinking of a number, start guessing."
guess_number = 0
player_has_won = false
while (guess_number < MAX_GUESSES) and not player_has_won
puts "\n"
guess = get_guess()
guess_number += 1
if guess == secret_number
player_has_won = true
puts "**************************************************!!!"
puts "You got it in #{guess_number} guesses!!!\n\n"
else
print_stars(secret_number, guess)
end
end
if not player_has_won
puts "\nSorry, that's #{guess_number} guesses, number was #{secret_number}\n"
end
print "Play again? (Y/N) "
response = gets.chomp!
if response.upcase[0] != "Y"
still_playing = false
end
end
end
private
def print_instructions
puts "I am thinking of a whole number from 1 to #{MAX_NUM}"
puts "Try to guess my number. After you guess, I"
puts "will type one or more stars (*). The more"
puts "stars I type, the closer you are to my number."
puts "one star (*) means far away, seven stars (*******)"
puts "means really close! You get #{MAX_GUESSES} guesses."
end
def get_guess
valid_response = false
while not valid_response
print "Your guess? "
guess = gets.chomp!
if guess.match?(/[[:digit:]]/)
valid_response = true
guess = guess.to_i
end
end
return guess
end
def print_stars secret_number, guess
diff = (guess - secret_number).abs
stars = ""
for i in 0..7
if diff < 2**i
stars += "*"
end
end
print(stars)
end
end
if __FILE__ == $0
stars = Stars.new
stars.start()
end