非常漂亮的放焰火效果的Applet程序

效果
非常漂亮的放焰火效果的Applet程序_第1张图片
HTML代码
  1. <APPLET align=baseline code=Test.class height=260 width=800> 
  2. <PARAM NAME="para_bits" VALUE="10000"> 
  3. <PARAM NAME="para_max" VALUE="150"> 
  4. <PARAM NAME="para_blendx" VALUE="50"> 
  5. <PARAM NAME="para_blendy" VALUE="50"> 
  6. <PARAM NAME="para_sound" VALUE="2"> 
  7. <PARAM NAME="align" VALUE="baseline"> 
  8. <PARAM NAME="code" VALUE="Test.class"> 
  9. <param name="codeBase" value="."> 
  10. <PARAM NAME="height" VALUE="250"> 
  11. <PARAM NAME="width" VALUE="800"> 
  12. </APPLET> 
java源代码:
  1. import java.applet.Applet;
  2. import java.applet.AudioClip;
  3. import java.awt.*;
  4. import java.awt.image.MemoryImageSource;
  5. import java.util.Random;
  6. /**
  7.  * 放焰火的Applet程序。
  8.  * 
  9.  * @author 老紫竹(JAVA世纪网,java2000.net)
  10.  */
  11. public class Test extends Applet implements Runnable {
  12.   public Test() {
  13.     m_mouseX = 0;
  14.     m_mouseY = 0;
  15.     m_sleepTime = 5;
  16.     isError = false;
  17.     isInitialized = false;
  18.     rand = new Random();
  19.     bits = 10000;
  20.     bit_px = new double[bits];
  21.     bit_py = new double[bits];
  22.     bit_vx = new double[bits];
  23.     bit_vy = new double[bits];
  24.     bit_sx = new int[bits];
  25.     bit_sy = new int[bits];
  26.     bit_l = new int[bits];
  27.     bit_f = new int[bits];
  28.     bit_p = new int[bits];
  29.     bit_c = new int[bits];
  30.     ru = 50;
  31.     rv = 50;
  32.   }
  33.   public void init() {
  34.     String s = getParameter("para_bits");
  35.     if (s != null)
  36.       bits = Integer.parseInt(s);
  37.     s = getParameter("para_max");
  38.     if (s != null)
  39.       bit_max = Integer.parseInt(s);
  40.     s = getParameter("para_blendx");
  41.     if (s != null)
  42.       ru = Integer.parseInt(s);
  43.     s = getParameter("para_blendy");
  44.     if (s != null)
  45.       rv = Integer.parseInt(s);
  46.     s = getParameter("para_sound");
  47.     if (s != null)
  48.       bit_sound = Integer.parseInt(s);
  49.     m_nAppX = getSize().width;
  50.     m_nAppY = getSize().height;
  51.     m_centerX = m_nAppX / 2;
  52.     m_centerY = m_nAppY / 2;
  53.     m_mouseX = m_centerX;
  54.     m_mouseY = m_centerY;
  55.     resize(m_nAppX, m_nAppY);
  56.     pixls = m_nAppX * m_nAppY;
  57.     pixls2 = pixls - m_nAppX * 2;
  58.     pix0 = new int[pixls];
  59.     offImage = new MemoryImageSource(m_nAppX, m_nAppY, pix0, 0, m_nAppX);
  60.     offImage.setAnimated(true);
  61.     dbImg = createImage(offImage);
  62.     for (int i = 0; i < pixls; i++)
  63.       pix0[i] = 0xff000000;
  64.     sound1 = getAudioClip(getDocumentBase(), "firework.au");
  65.     sound2 = getAudioClip(getDocumentBase(), "syu.au");
  66.     for (int j = 0; j < bits; j++)
  67.       bit_f[j] = 0;
  68.     isInitialized = true;
  69.     start();
  70.   }
  71.   private boolean stop;
  72.   public void run() {
  73.     while (!isInitialized)
  74.       try {
  75.         Thread.sleep(200L);
  76.       } catch (InterruptedException interruptedexception) {
  77.       }
  78.     do {
  79.       for (int j = 0; j < pixls2; j++) {
  80.         int k = pix0[j];
  81.         int l = pix0[j + 1];
  82.         int i1 = pix0[j + m_nAppX];
  83.         int j1 = pix0[j + m_nAppX + 1];
  84.         int i = (k & 0xff0000) >> 16;
  85.         int k1 = ((((l & 0xff0000) >> 16) - i) * ru >> 8) + i;
  86.         i = (k & 0xff00) >> 8;
  87.         int l1 = ((((l & 0xff00) >> 8) - i) * ru >> 8) + i;
  88.         i = k & 0xff;
  89.         int i2 = (((l & 0xff) - i) * ru >> 8) + i;
  90.         i = (i1 & 0xff0000) >> 16;
  91.         int j2 = ((((j1 & 0xff0000) >> 16) - i) * ru >> 8) + i;
  92.         i = (i1 & 0xff00) >> 8;
  93.         int k2 = ((((j1 & 0xff00) >> 8) - i) * ru >> 8) + i;
  94.         i = i1 & 0xff;
  95.         int l2 = (((j1 & 0xff) - i) * ru >> 8) + i;
  96.         int i3 = ((j2 - k1) * rv >> 8) + k1;
  97.         int j3 = ((k2 - l1) * rv >> 8) + l1;
  98.         int k3 = ((l2 - i2) * rv >> 8) + i2;
  99.         pix0[j] = i3 << 16 | j3 << 8 | k3 | 0xff000000;
  100.       }
  101.       rend();
  102.       offImage.newPixels(00, m_nAppX, m_nAppY);
  103.       try {
  104.         Thread.sleep(m_sleepTime);
  105.       } catch (InterruptedException interruptedexception1) {
  106.       }
  107.     } while (!stop);
  108.   }
  109.   public void update(Graphics g) {
  110.     paint(g);
  111.   }
  112.   public void paint(Graphics g) {
  113.     g.drawImage(dbImg, 00this);
  114.   }
  115.   public void start() {
  116.     if (isError)
  117.       return;
  118.     isRunning = true;
  119.     if (runner == null) {
  120.       runner = new Thread(this);
  121.       runner.start();
  122.     }
  123.   }
  124.   public void stop() {
  125.     if (runner != null) {
  126.       runner.stop();
  127.       runner = null;
  128.     }
  129.   }
  130.   public boolean mouseMove(Event event, int i, int j) {
  131.     m_mouseX = i;
  132.     m_mouseY = j;
  133.     return true;
  134.   }
  135.   public boolean mouseDown(Event event, int i, int j) {
  136.     m_mouseX = i;
  137.     m_mouseY = j;
  138.     int k = (int) (rand.nextDouble() * 256D);
  139.     int l = (int) (rand.nextDouble() * 256D);
  140.     int i1 = (int) (rand.nextDouble() * 256D);
  141.     int j1 = k << 16 | l << 8 | i1 | 0xff000000;
  142.     int k1 = 0;
  143.     for (int l1 = 0; l1 < bits; l1++) {
  144.       if (bit_f[l1] != 0)
  145.         continue;
  146.       bit_px[l1] = m_mouseX;
  147.       bit_py[l1] = m_mouseY;
  148.       double d = rand.nextDouble() * 6.2800000000000002D;
  149.       double d1 = rand.nextDouble();
  150.       bit_vx[l1] = Math.sin(d) * d1;
  151.       bit_vy[l1] = Math.cos(d) * d1;
  152.       bit_l[l1] = (int) (rand.nextDouble() * 100D) + 100;
  153.       bit_p[l1] = (int) (rand.nextDouble() * 3D);
  154.       bit_c[l1] = j1;
  155.       bit_sx[l1] = m_mouseX;
  156.       bit_sy[l1] = m_nAppY - 5;
  157.       bit_f[l1] = 2;
  158.       if (++k1 == bit_max)
  159.         break;
  160.     }
  161.     if (bit_sound > 1)
  162.       sound2.play();
  163.     return true;
  164.   }
  165.   public boolean mouseExit(Event event, int i, int j) {
  166.     m_mouseX = i;
  167.     m_mouseY = j;
  168.     return true;
  169.   }
  170.   // (JAVA世纪网,java2000.net)
  171.   void rend() {
  172.     boolean flag2 = false;
  173.     for (int k = 0; k < bits; k++)
  174.       switch (bit_f[k]) {
  175.       default:
  176.         break;
  177.       case 1// '/001'
  178.         bit_vy[k] += rand.nextDouble() / 50D;
  179.         bit_px[k] += bit_vx[k];
  180.         bit_py[k] += bit_vy[k];
  181.         bit_l[k]--;
  182.         if (bit_l[k] == 0 || bit_px[k] < 0.0D || bit_py[k] < 0.0D || bit_px[k] > (double) m_nAppX
  183.             || bit_py[k] > (double) (m_nAppY - 3)) {
  184.           bit_c[k] = 0xff000000;
  185.           bit_f[k] = 0;
  186.         } else if (bit_p[k] == 0) {
  187.           if ((int) (rand.nextDouble() * 2D) == 0)
  188.             bit_set((int) bit_px[k], (int) bit_py[k], -1);
  189.         } else {
  190.           bit_set((int) bit_px[k], (int) bit_py[k], bit_c[k]);
  191.         }
  192.         break;
  193.       case 2// '/002'
  194.         bit_sy[k] -= 5;
  195.         if ((double) bit_sy[k] <= bit_py[k]) {
  196.           bit_f[k] = 1;
  197.           flag2 = true;
  198.         }
  199.         if ((int) (rand.nextDouble() * 20D) == 0) {
  200.           int i = (int) (rand.nextDouble() * 2D);
  201.           int j = (int) (rand.nextDouble() * 5D);
  202.           bit_set(bit_sx[k] + i, bit_sy[k] + j, -1);
  203.         }
  204.         break;
  205.       }
  206.     if (flag2 && bit_sound > 0)
  207.       sound1.play();
  208.   }
  209.   void bit_set(int i, int j, int k) {
  210.     int l = i + j * m_nAppX;
  211.     pix0[l] = k;
  212.   }
  213.   private int m_nAppX;
  214.   private int m_nAppY;
  215.   private int m_centerX;
  216.   private int m_centerY;
  217.   private int m_mouseX;
  218.   private int m_mouseY;
  219.   private int m_sleepTime;
  220.   private boolean isError;
  221.   boolean isRunning;
  222.   boolean isInitialized;
  223.   Thread runner;
  224.   int pix0[];
  225.   MemoryImageSource offImage;
  226.   Image dbImg;
  227.   int pixls;
  228.   int pixls2;
  229.   Random rand;
  230.   int bits;
  231.   double bit_px[];
  232.   double bit_py[];
  233.   double bit_vx[];
  234.   double bit_vy[];
  235.   int bit_sx[];
  236.   int bit_sy[];
  237.   int bit_l[];
  238.   int bit_f[];
  239.   int bit_p[];
  240.   int bit_c[];
  241.   int bit_max;
  242.   int bit_sound;
  243.   int ru;
  244.   int rv;
  245.   AudioClip sound1;
  246.   AudioClip sound2;
  247. }

你可能感兴趣的:(java,html,.net,null,applet,IM)