纯Java代码实现流星划过天空

网友投稿 238 2023-07-27


纯Java代码实现流星划过天空

废话不多说了,直接给大家贴java代码了。

fKsxpxKE

import java.awt.Color;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class MeteorFly extends JFrame {

final int MAX = ; // (~)流星的个数

final int SLEEP = ; // 流星飞行的速度(数值越大,速度越慢)

final int COLORLV = ; // (~)色阶(可改变光晕大小)

final String COLOR = null; // ("#"~"#ffffff")光晕颜色(如果不填或null,则为默认颜色)

final int SIZE = ; // (~)流星大小

private MyPanel panel;

public MeteorFly() {

panel = new MyPanel();

this.getContentPane().add(panel);

this.setSize(, ); // 创建窗体

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

public static void main(String[] args) {

new MeteorFly();

}

class MyPanel extends JPanel implements Runnable {

Meteor p[];

int AppletWidth, AppletHeight;

BufferedImage OffScreen;

Graphics drawOffScreen;

Thread pThread;

public MyPanel() {

setBackground(Color.black); //窗体初始化

AppletWidth = ;

AppletHeight = ;

p = new Meteor[MAX];

for (int i = ; i < MAX; i++)

p[i] = new Meteor();

OffScreen = new BufferedImage(AppletWidth, AppletHeight,

BufferedImage.TYPE_INT_BGR);

drawOffScreen = OffScreen.getGraphics();

pThread = new Thread(this);

pThread.start();

}

@Override

public void paintComponent(Graphics g) {

// TODO Auto-generated method stub

super.paintComponents(g);

g.drawImage(OffScreen, , , this);

}

@Override

final public void run() {

while (true) {

// drawOhttp://ffScreen.clearRect(, , AppletWidth, AppletHeight); //

// 清屏

for (int i = ; i < MAX; i++) {

drawOffScreen.setColor(p[i].color); // RGB颜色

drawOffScreen.fillOval(p[i].x, p[i].y, SIZE, SIZE);

p[i].x += p[i].mx;

p[i].y += p[i].my;

// if (p[i].x > AppletWidth || p[i].y > AppletHeight) {

// p[i].reset();

// }

int x = p[i].x;

int y = p[i].y;

int R = p[i].color.getRed(); // 提取颜色

int G = p[i].color.getGreen();

int B = p[i].color.getBlue();

while (true) {

if (R == && G == && B == ) {

break;

}

R -= COLORLV; // 尾部颜色淡化

if (R < ) {

R = ;

}

G -= COLORLV;

if (G < ) {

G = ;

}

B -= COLORLV;

if (B < ) {

B = ;

}

Color color = new Color(R, G, B);

x -= p[i].mx; // 覆盖尾部

y -= p[i].my;

drawOffScreen.setColor(color);

drawOffScreen.fillOval(x, y, SIZE, SIZE);

}

if (x > AppletWidth || y > AppletHeight) { // 流星飞出窗口,重置流星

p[i].reset();

}

}

repaint();

try {

Thread.sleep(SLEEP);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

class Meteor { // 流星类

int x, y; // 流星的位置

int mx, my; // 下落速度

Color color; // 流星颜色

public Meteor() {

reset();

}

public void reset() {

int rand = (int) (Math.random() * ); //随机生成流星出现位置

if (rand > ) {

x = (int) (Math.random() * );

y = ;

} else {

y = (int) (Math.random() * );

x = ;

}

mx = (int) (Math.random() * + ); //随机生成下落速度和角度

my = (int) (Math.random() * + );

if (COLOR == null || COLOR.length() == ) {

color = new Color(

// 随机颜色

(new Double(Math.random() * )).intValue() + ,

(new Double(Math.random() * )).intValue() + ,

(new Double(Math.random() * )).intValue() + );

} else {

color = Color.decode(COLOR);

}

}

}

}

以上代码就是本文给大家讲述的纯Java代码实现流星划过天空,希望本文分享能够给大家带来意想不到的收获。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java编程实现判断网上邻居文件是否存在的方法
下一篇:Java中使用正则表达式处理文本数据
相关文章

 发表评论

暂时没有评论,来抢沙发吧~