Horse Race
class Horse
attr_reader :distance_run # Creates "getter"
def initialize(name, speed) # Called by new
@name = name # Dynamically creates instance variable
@speed = speed
@distance_run = 0
end
def run
@distance_run += @speed + rand(21) - 10
end
def to_s # Like Java's toString()
@name
end
end
require 'horse.rb' # Like Java's "import"
class Race
def initialize
@horses = [Horse.new("Secretariat", 200),
Horse.new("Dynamite", 196),
Horse.new("Falafel", 197),
Horse.new("Arrivaderchi", 198)]
end
def ready
puts "Horses:"
@horses.each { |horse| puts " " + horse.to_s }
STDOUT.flush # display output before pausing
sleep(0.5)
end
def set
puts "\nThey're at the starting line..."
STDOUT.flush ; sleep(0.5)
end
def go
best = @horses[0]
puts "\nThey're off!"
begin
puts
sleep(1)
STDOUT.flush
for horse in @horses
horse.run
say_where horse
if horse.distance_run > best.distance_run
best = horse
end
end
end until best.distance_run >= 1000
puts
puts "#{best} wins!!!!!"
end
def say_where horse
puts "#{horse} is at #{horse.distance_run}"
end
end
- The following code is in the 'main' object
race = Race.new
race.ready
race.set
race.go