📄 confetti.java
字号:
import java.applet.*;
import java.awt.*;
//定义Confetti类
public class Confetti extends Applet implements Runnable
{
private Thread m_snow = null;//定义一个线程类
private int flakes[][];
private Image offscreenImage;
private String m_back = "none";
private Image backdrop;
private Graphics offscreenGraphics;
private Image frame;
private int[] colors;
private Color[] cl={Color.red,Color.green, Color.blue, Color.yellow,
Color.cyan,Color.magenta, Color.orange, Color.pink,
Color.white, Color.lightGray, Color.gray, Color.darkGray,
Color.black};
private String[] cNames={"red","green","blue", "yellow", "cyan",
"magenta","orange","pink","white","lightGray","gray","darkGray",
"black"};
private int xSize;
private int ySize;
private int pixSize;
private int amount = 0;
private int delay;
private int xMin,xMax,yMin,yMax;
//获取小应用程序相关信息
public String getAppletInfo()
{
return "Name: Confetti\r\n" +
"Author: Ali";
}
//初始化,获取各参数的值
public void init()
{
String param;
colors = new int[13];
amount=0;
for (int t=0;t<13;t++) {
param = getParameter(cNames[t]);
if (param != null)
colors[t] = Integer.parseInt(param);
}
param = getParameter("pixSize");
if (param != null)
pixSize = Integer.parseInt(param);
else
pixSize=2;
for (int t=0;t<13;t++) {
int tmp=colors[t];
colors[t]+=amount;
amount+=tmp;
}
flakes = new int[amount][2];
param = getParameter("back");
if (param != null)
m_back = param;
param = getParameter("frame");
if (param != null)
frame = getImage(getCodeBase(),param);
else
frame=null;
param = getParameter("delay");
if (param != null)
delay= Integer.parseInt(param);
else
delay=100;
param = getParameter("xMin");
if (param != null)
xMin= Integer.parseInt(param);
else
xMin=0;
param = getParameter("xMax");
if (param != null)
xMax= Integer.parseInt(param);
else
delay=5;
param = getParameter("yMin");
if (param != null)
yMin= Integer.parseInt(param);
else
yMin=0;
param = getParameter("yMax");
if (param != null)
yMax= Integer.parseInt(param);
else
yMax=5;
xSize=size().width;
ySize=size().height;
backdrop=getImage(getCodeBase(),m_back);
for(int i=0;i<amount;i++) {
flakes[i][0] = (int)(Math.random() * xSize);
flakes[i][1] = (int)(Math.random() * ySize);
}
offscreenImage = createImage(xSize,ySize);
offscreenGraphics =offscreenImage.getGraphics();
System.out.println("Confetti (C)2003 Ali");
}
//newimage()方法
public void newimage()
{ offscreenGraphics.drawImage(backdrop,0,0,xSize,ySize,null);
offscreenGraphics.setColor(Color.red);
int onCl=0;
for(int i=0;i<amount;i++)
{
int xDif=xMax-xMin;
int yDif=yMax-yMin;
double xV=(Math.random()*xDif*2-xDif);
if (xV<0) {xV-=xMin;}
else {xV+=xMin;}
flakes[i][0] += (int)(xV);
flakes[i][1] += (int)(Math.random()*yDif)+yMin;
if (flakes[i][0] < 0)
flakes[i][0] = xSize;
if (flakes[i][0] > xSize-1)
flakes[i][0] = 0;
if (flakes[i][1] > ySize-1)
{
flakes[i][1] = 0;
flakes[i][0] = (int)(Math.random()*xSize);
}
while (i>colors[onCl]) {onCl++;
offscreenGraphics.setColor(cl[onCl]);
}
offscreenGraphics.fillRect(flakes[i][0],flakes[i][1],pixSize,pixSize);
}
if (frame != null) {
offscreenGraphics.drawImage(frame,0,0,xSize,ySize,null);
}
}
//destroy()方法
public void destroy()
{
offscreenGraphics.dispose();
}
//paint()方法
public void paint(Graphics g)
{
g.drawImage(offscreenImage,0,0,this);
}
//update()方法
public void update(Graphics g)
{
paint(g);
}
//start()方法,启动线程
public void start()
{
if (m_snow == null)
{
m_snow = new Thread(this);
m_snow.start();
}
}
//stop()方法,停止线程
public void stop()
{
if (m_snow != null)
{
m_snow.stop();
m_snow = null;
}
}
//run()方法
public void run()
{
MediaTracker mt = new MediaTracker(this);
mt.addImage(backdrop,0);
if (frame!=null) {
mt.addImage(frame,0);
}
try {
mt.waitForAll();
} catch (Exception e) {}
while (true)
{
try
{
//获取系统当前时间
long nw=System.currentTimeMillis();
newimage();//调用newimage()方法
repaint();
long tm=delay-(System.currentTimeMillis()-nw);
if (tm<10) {tm=10;}
Thread.sleep(tm);
newimage();
}
catch (InterruptedException e)//抛出异常
{
stop();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -