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

                效果

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. }

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

非常好,绝对的能用哦 !一下是一小部分代码 package gui; import java.awt.*; import java.applet.*; import java.awt.event.*; import javax.swing.*; //Download by http://www.codefans.net public class Fireworks extends Applet implements MouseListener,Runnable { int x,y; int top,point; /** *对小程序进行变量和颜色的初始化。 */ public void init() { x = 0; y = 0; //设置背景色为黑色 setBackground(Color.black); addMouseListener(this); } public void paint(Graphics g) { } /** *使该程序可以作为应用程序运行。 */ public static void main(String args[]) { Fireworks applet = new Fireworks(); JFrame frame = new JFrame("TextAreaNew"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); frame.getContentPane().add( applet, BorderLayout.CENTER); frame.setSize(800,400); applet.init(); applet.start(); frame.setVisible(true); } /** *程序主线程,对一个烟花进行绘制。 */ public void run() { //变量初始化 Graphics g1; g1 = getGraphics(); int y_move,y_click,x_click; int v; x_click = x; y_click = y; y_move = 400; v = 3; int r,g,b; while(y_move > y_click) { g1.setColor(Color.black); g1.fillOval(x_click,y_move,5,5); y_move -= 5; r = (((int)Math.round(Math.random()*4321))%200)+55; g = (((int)Math.round(Math.random()*4321))%200)+55; b = (((int)Math.round(Math.random()*4321))%200)+55; g1.setColor(new Color(r,g,b)); g1.fillOval(x_click,y_move,5,5); for(int j = 0 ;j<=10;j++) { if(r>55) r -= 20; if(g>55) g -= 20; if(b>55) b -=20; g1.setColor(new Color(r,g,b)); g1.fillOval(x_click,y_move+j*5,5,5); } g1.setColor(Color.black); g1.fillOval(x_click,y_move+5*10,5,5); try { Thread.currentThread().sleep(v++); } catch (InterruptedException e) {} } for(int j=12;j>=0;j--) { g1.setColor(Color.black); g1.fillOval(x_click,y_move+(j*5),5,5); try { Thread.currentThread().sleep((v++)/3); } catch (InterruptedException e) {} } y_move = 400; g1.setColor(Color.black); while(y_move > y_click) { g1.fillOval(x_click-2,y_move,9,5); y_move -= 5; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值