
module Sprites
  def ball x, y

    image 40, 40, :top => y, :left => x do
      nostroke

      image :top => 0, :left => 0 do
        fill "#46D"
        oval 4, 4, 33, 33
        blur 1
      end
      fill gradient(rgb(1.0, 1.0, 1.0, 0.7), rgb(1.0, 1.0, 1.0, 0.0))
      oval 9, 3, 23, 17
      image :top => 0, :left => 0 do
        fill "#79F"
        oval 13, 13, 12, 12
        blur 4
      end
      image :top => 15, :left => 4, :width => 32, :height => 26 do
        fill gradient(rgb(0.7, 0.9, 1.0, 0.0), rgb(0.7, 0.9, 1.0, 0.6))
        oval 7, 7, 19, 13
        blur 2
      end
    end
  end
end

class Ball
  attr_reader :y, :x
  def initialize
    reset
  end
  def reset
    @y = 535
    @x = rand(800)
    @speed = 4 + rand(8)
  end
  def step
    @y -= @speed
  end
end

balls = (0..19).collect do
  Ball.new
end

Shoes.app :width => 800, :height => 535, :resizable => false do
  extend Sprites

  animate(24) do

    clear do

      balls.each do |b|
     
        ball b.x, b.y
 
        b.step
        if(b.y < -40) then
          b.reset
        end
 
      end
   
    end
  end
end