import java.applet.Applet;
import java.awt.*;
import java.net.*;

public class SpriteDemo extends Applet implements Runnable {
  Playfield playfield;
  AnimatedSprite sprite, sprite2, sprite3;
  Image output;
  Thread animate;
  // private stuff


public void init() {
  try {
    playfield = new Playfield( getImage(new URL("http://imagery.mit.edu/imagery4/6.837/F98/mpp/bg.jpg")));
    sprite = new AnimatedSprite(getImage(new URL("http://imagery.mit.edu/imagery4/6.837/F98/mpp/WrldAni.gif")), 12, 5, 5);
    sprite3 = new AnimatedSprite(getImage(new URL("http://imagery.mit.edu/imagery4/6.837/F98/mpp/WrldAni.gif")), 12, -3, -8);

    sprite2 = new AnimatedSprite(getImage(new URL("http://imagery.mit.edu/imagery4/6.837/F98/mpp/AntAni.gif")), 5, 5, 0);
    sprite2.addState(1, 0, 1);
    sprite2.addState(1, 1, 1);
    sprite2.addState(1, 2, 1);
    sprite2.addState(1, 1, 1);
    sprite2.addState(1, 0, 1);
    sprite2.addState(1, 3, 1);
    sprite2.addState(1, 4, 1);
    sprite2.addState(1, 3, 1);
    sprite2.setTrack(1);
    sprite2.reverse = true;
    sprite2.y = 400 - sprite2.getHeight();
    sprite2.x = 400 - sprite2.getWidth();
    sprite3.y = 100;
    sprite3.x = 100;
    sprite3.reverse = true;
  } catch (MalformedURLException e) {
    
  }

  playfield.addSprite(0, sprite);
  playfield.addSprite(1, sprite2);
  playfield.addSprite(2, sprite3);

  renderPlayfield( );
}
             
public void start() {
  animate = new Thread(this);
  animate.start();
}

public void stop() {
  animate.stop();
  animate = null;
}
             
public void run() {
  while (true) {
    try {
      animate.sleep(30);
    } catch (InterruptedException e) {
    }
    renderPlayfield( );
  }
}
             
public void renderPlayfield() {
  
  playfield.Draw();
  output = playfield.toImage();

  sprite.nextState();
  playfield.collisionCheck(sprite);
  sprite2.nextState();
  playfield.collisionCheck(sprite2);
  sprite3.nextState();
  playfield.collisionCheck(sprite3);

  repaint();
}
             
public void paint(Graphics g) {
  g.drawImage(output, 0, 0, this);
}

public void update(Graphics g) {
  paint(g);
}

public boolean mouseDown(Event e, int x, int y) {
  playfield.clicked(x, y);
  renderPlayfield( );
  return true;
}

}

