mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-23 07:29:02 -08:00
90
82_Stars/ruby/stars.rb
Normal file
90
82_Stars/ruby/stars.rb
Normal 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
|
||||
Reference in New Issue
Block a user