java新年快乐烟花代码idea
时间: 2025-01-02 08:25:49 浏览: 14
### Java新年烟花特效代码实现
在IntelliJ IDEA中创建一个名为`FireworksDemo`的项目。为了展示烟花效果,可以利用Java Swing来绘制图形并模拟烟花爆炸的效果。
#### 创建主类 `Main`
定义入口方法main,在其中初始化GUI界面以及启动动画线程:
```java
import javax.swing.*;
import java.awt.*;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("New Year Fireworks");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
FireworkPanel panel = new FireworkPanel();
frame.add(panel);
Timer timer = new Timer(40, e -> panel.repaint());
timer.start();
frame.setVisible(true);
}
}
```
#### 定义画布组件 `FireworkPanel`
继承自`JPanel`用于重写paintComponent函数完成绘图逻辑:
```java
class FireworkPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
drawBackground(g2d); // 绘制背景颜色
int width = getWidth(), height = getHeight();
renderRandomFirework(g2d, width / 2, height, Math.random() * width, -(Math.random()*height/2));
}
private void drawBackground(Graphics2D g){
GradientPaint gradient = new GradientPaint(
0f, 0f, Color.BLACK,
this.getWidth().floatValue(),this.getHeight().floatValue(),
Color.DARK_GRAY,true);
g.setPaint(gradient);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
}
private void renderRandomFirework(Graphics2D g,double startX,double startY,double endX,double endY){
double dx=endX-startX,dy=endY-startY,distance=Math.sqrt(dx*dx+dy*dy),angle=Math.atan2(dy,dx);
int particles=50+(int)(Math.random()*50);
for(int i=0;i<particles;i++){
float size=(float)Math.pow(Math.random(),3)*10+2;
double speed=size*(distance/particles)*(i+1)/size;
double px=startX+dx*i/particles,py=startY+dy*i/particles;
AffineTransform oldTransform=g.getTransform();
g.translate(px, py);
g.rotate(angle-Math.PI);
g.setColor(new Color((float)Math.random(),(float)Math.random(),(float)Math.random()));
Polygon star=new Polygon();
final int points=5,radius=(int)size;
for(int p=0;p<=points;p++){
double angleRad=p*((2*Math.PI)/points)+(p%2==0)?0:Math.PI/radius;
int x=(int)(radius*Math.cos(angleRad)),y=(int)(radius*Math.sin(angleRad));
star.addPoint(x,y);
}
g.fill(star);
g.setTransform(oldTransform);
}
}
}
```
上述代码实现了基本的新年烟花视觉效果[^1]。通过调整参数如粒子数量、速度分布等可以使烟火更加绚丽多彩;还可以加入更多种类的火花形状比如圆形或不同风格星星图案提升观赏性。
阅读全文