public void run() {
    // Create and add sprites to the
    // sprite manager
    spriteManager = new SpriteManager(new BackgroundImage(this, backGroundImage));
    // Create 15 sprites from 6 gif
    // files.
    for (int cnt = 0; cnt < 15; cnt++) {
      Point position =
          spriteManager.getEmptyPosition(
              new Dimension(gifImages[0].getWidth(this), gifImages[0].getHeight(this)));
      spriteManager.addSprite(makeSprite(position, cnt % 6));
    } // end for loop

    // Loop, sleep, and update sprite
    // positions once each 83
    // milliseconds
    long time = System.currentTimeMillis();
    while (true) { // infinite loop
      spriteManager.update();
      repaint();
      try {
        time += animationDelay;
        Thread.sleep(Math.max(0, time - System.currentTimeMillis()));
      } catch (InterruptedException e) {
        System.out.println(e);
      } // end catch
    } // end while loop
  } // end run method
  // Overridden graphics update method
  // on the Frame
  public void update(Graphics g) {
    // Create the offscreen graphics
    // context
    if (offScreenGraphicsCtx == null) {
      offScreenImage = createImage(getSize().width, getSize().height);
      offScreenGraphicsCtx = offScreenImage.getGraphics();
    } // end if

    // Draw the sprites offscreen
    spriteManager.drawScene(offScreenGraphicsCtx);
    // Draw the scene onto the screen
    if (offScreenImage != null) {
      g.drawImage(offScreenImage, 0, 0, this);
    } // end if
  } // end overridden update method