// 程序:烟火粒子
// 范例文件:FireRock.javaimport java.applet.*;
import java.awt.*;
import java.awt.event.*;public class FireRock extends Applet implements Runnable
{
   final int Max = 200;
   fparticle p[];
   int AppletWidth,AppletHeight,XCenter,YCenter;
   Image        OffScreen;
   Graphics     drawOffScreen;
   Thread pThread;   public void init()
   {
      setBackground(Color.black);       p = new fparticle[Max];       AppletWidth = getSize().width;
      AppletHeight = getSize().height;      XCenter = (int) (Math.random()*AppletWidth);
      YCenter = (int) (Math.random()*AppletHeight);      for(int i=0; i<Max; i++)
          p[i] = new fparticle(XCenter,YCenter);      OffScreen     = createImage(AppletWidth,AppletHeight);
      drawOffScreen = OffScreen.getGraphics();
   }   public void start()
   {
      pThread = new Thread(this);
      pThread.start();
   }   public void stop()
   {
      pThread = null;
   }
 
   public void update(Graphics g)
   {
       paint(g);
   }   public void paint(Graphics g)
   {
      g.drawImage(OffScreen,0,0,this);
   }   public void run()
   {
      boolean reset = false;
      int i, t =0;
      while(true)
      {
         drawOffScreen.clearRect(0,0,AppletWidth,AppletHeight);
  
         for(i=0; i<Max; i++)
         {
            if(p[i].X > AppletWidth || p[i].X < 0 || 
               p[i].Y > AppletHeight)
            {
               p[i].state = false;  
            }            if(p[i].state)
            {
               drawOffScreen.setColor(p[i].color);
               drawOffScreen.fillOval(p[i].X,p[i].Y,3,3);
           p[i].X += p[i].Vx;
       p[i].Y += p[i].Vy;
       p[i].Vy += 9*t;
            }                        
         }         t++;           reset = true;           for(i=0; i<Max; i++)
         {
            if(p[i].state)  
            {
               reset = false;
               break;
            }
         }         if(reset)  
         {            XCenter = (int) (Math.random()*AppletWidth);
            YCenter = (int) (Math.random()*AppletHeight);
            t = 0; 
            for(i=0; i<Max; i++)
               p[i].reset(XCenter,YCenter);
         }
               repaint();
          try {
             Thread.sleep(200);
         }
         catch (InterruptedException e) { }
      }
   }
}class fparticle
{
   boolean state; 
   int X,Y;     
   int Vx,Vy;   
   Color color;    public fparticle(int x,int y)
   {
      X = x;
      Y = y;
      reset(x,y);
   }   public void reset(int x, int y)
   {
       state = true; 
       X = x;
       Y = y;
       Vx = (int)(Math.random()*25 - Math.random()*25);
       Vy = (int)(Math.random()*25 - Math.random()*25);
       color = new Color((int)(Math.random()*255),
                         (int) (Math.random()*255),
                         (int) (Math.random()*255));
   }
}