mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-24 20:10:15 -08:00
90 lines
2.0 KiB
Ruby
90 lines
2.0 KiB
Ruby
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 |