📄 beacon.java
字号:
import java.applet.Applet;import java.awt.Color;import java.awt.Graphics;import java.net.MalformedURLException;import java.net.URL;import java.util.Random; public class Beacon extends Applet implements Runnable{public int AnimationSpeed, MissileStyleVariability, MaxMissileNumber, MaxMissileExplosionEnergy, MaxMissilePatchNumber, MaxMissilePatchLength, Gravity;public String MissileSoundtrack;private int mx,my;private Thread thread=null;private Missile rocket[];public void init() { int i; String p; p=getParameter("AnimationSpeed"); AnimationSpeed=(p==null)?100:Integer.valueOf(p).intValue(); MissileSoundtrack=getParameter("MissileSoundtrack"); p=getParameter("MissileStyleVariability"); MissileStyleVariability=(p==null)?20:Integer.valueOf(p).intValue(); p=getParameter("MaxMissileNumber"); MaxMissileNumber=(p==null)?5:Integer.valueOf(p).intValue(); p=getParameter("MaxMissileExplosionEnergy"); MaxMissileExplosionEnergy=(p==null)?500:Integer.valueOf(p).intValue(); p=getParameter("MaxMissilePatchNumber"); MaxMissilePatchNumber=(p==null)?50:Integer.valueOf(p).intValue(); p=getParameter("MaxMissilePatchLength"); MaxMissilePatchLength=(p==null)?100:Integer.valueOf(p).intValue(); p=getParameter("Gravity"); Gravity=(p==null)?20:Integer.valueOf(p).intValue(); mx=size().width-1; my=size().height-1; rocket=new Missile[MaxMissileNumber]; for(i=0;i<MaxMissileNumber;i++)rocket[i]=new Missile(mx,my,Gravity); }public void start() { if(thread==null) { thread=new Thread(this); thread.start(); } }public void stop() { if(thread!=null) { thread.stop(); thread=null; } }public void run() { int i, e=(int)(Math.random()*MaxMissileExplosionEnergy*3/4)+ MaxMissileExplosionEnergy/4+1, p=(int)(Math.random()*MaxMissilePatchNumber*3/4)+ MaxMissilePatchNumber/4+1, l=(int)(Math.random()*MaxMissilePatchLength*3/4)+ MaxMissilePatchLength/4+1; long s=(long)(Math.random()*10000); boolean sleep; Graphics g=getGraphics(); URL u=null; while(true) { try { thread.sleep(100/AnimationSpeed); } catch(InterruptedException x){} sleep=true; for(i=0;i<MaxMissileNumber;i++) sleep=sleep&&rocket[i].sleep; if(sleep&&Math.random()*100<MissileStyleVariability) { e=(int)(Math.random()*MaxMissileExplosionEnergy*3/4)+ MaxMissileExplosionEnergy/4+1; p=(int)(Math.random()*MaxMissilePatchNumber*3/4)+ MaxMissilePatchNumber/4+1; l=(int)(Math.random()*MaxMissilePatchLength*3/4)+ MaxMissilePatchLength/4+1; s=(long)(Math.random()*10000); } for(i=0;i<MaxMissileNumber;i++) { if(rocket[i].sleep&&Math.random()*MaxMissileNumber*l<1) { try { u=new URL(getDocumentBase(),MissileSoundtrack); } catch(MalformedURLException x){} play(u); rocket[i].init(e,p,l,s); rocket[i].start(); } rocket[i].show(g); } } }public void paint(Graphics g) { g.setColor(Color.black); g.fillRect(0,0,mx+1,my+1); }}class Missile{public boolean sleep=true;private int energy,patch,length, mx,my, gravity, ox,oy, vx[],vy[], x,y, red,blue,green, t;private Random random;public Missile(int a,int b,int g) { mx=a; my=b; gravity=g; }public void init(int e,int p,int l,long seed) { int i; energy=e; patch=p; length=l; random=new Random(seed); vx=new int[patch]; vy=new int[patch]; red=(int)(random.nextDouble()*128)+128; blue=(int)(random.nextDouble()*128)+128; green=(int)(random.nextDouble()*128)+128; ox=(int)(Math.random()*mx/2)+mx/4; oy=(int)(Math.random()*my/2)+my/4; for(i=0;i<patch;i++) { vx[i]=(int)(Math.random()*energy)-energy/2; vy[i]=(int)(Math.random()*energy*7/8)-energy/8; } }public void start() { t=0; sleep=false; }public void show(Graphics g) { if(!sleep) if(t<length) { int i,c; double s; Color color; c=(int)(random.nextDouble()*64)-32+red; if(c>=0&&c<256)red=c; c=(int)(random.nextDouble()*64)-32+blue; if(c>=0&&c<256)blue=c; c=(int)(random.nextDouble()*64)-32+green; if(c>=0&&c<256)green=c; color=new Color(red,blue,green); for(i=0;i<patch;i++) { s=(double)t/100; x=(int)(vx[i]*s); y=(int)(vy[i]*s-gravity*s*s); g.setColor(color); g.drawLine(ox+x,oy-y,ox+x,oy-y); if(t>=length/2) { int j; for(j=0;j<2;j++) { s=(double)((t-length/2)*2+j)/100; x=(int)(vx[i]*s); y=(int)(vy[i]*s-gravity*s*s); g.setColor(Color.black); g.drawLine(ox+x,oy-y,ox+x,oy-y); } } } t++; } else { sleep=true; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -