mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-25 04:15:45 -08:00
46 lines
862 B
Ruby
46 lines
862 B
Ruby
#!/usr/bin/env ruby
|
|
|
|
# Kinema
|
|
# reinterpreted from BASIC by stephan.com
|
|
|
|
EPSILON = 0.15
|
|
|
|
def close?(guess, answer)
|
|
(guess-answer).abs < answer * EPSILON
|
|
end
|
|
|
|
def ask(text, answer)
|
|
puts text
|
|
guess = gets.strip.to_f
|
|
if close?(guess, answer)
|
|
puts 'Close enough'
|
|
@score += 1
|
|
else
|
|
puts 'Not even close....'
|
|
end
|
|
|
|
puts "Correct answer is #{answer}"
|
|
end
|
|
|
|
puts 'Kinema'.center(80)
|
|
puts 'Adapted by stephan.com'.center(80)
|
|
puts; puts; puts;
|
|
|
|
loop do
|
|
puts; puts
|
|
@score = 0
|
|
v = 5 + rand(35)
|
|
|
|
puts "A ball is thrown upwards at #{v} meters per second"
|
|
|
|
ask 'How high will it go? (in meters)', 0.05 * v * v
|
|
ask 'How long until it returns? (in seconds)', v/5.0
|
|
|
|
t = 1 + rand(2*v)/10.0
|
|
ask "What will its velocity be after #{t} seconds?", v - 10 * t
|
|
puts
|
|
print "#{@score} right out of 3."
|
|
print " not bad" if @score > 1
|
|
puts
|
|
end
|