用java帮我写一个程序,程序内容是这样的:升旗动画设计,画一幅由矩形和五角星构成的国旗,画出国旗冉冉升起的过程。控制位置、大小、移动速度等属性
时间: 2024-03-31 22:38:52 浏览: 98
好的,这个程序可以使用Java的AWT和Swing库来实现。以下是一个简单的实现:
```java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.GeneralPath;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FlagRaisingAnimation extends JPanel implements Runnable {
private static final long serialVersionUID = 1L;
private int speed;
private int x, y;
private double scale;
private int width, height;
public FlagRaisingAnimation(int x, int y, int width, int height, int speed, double scale) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.speed = speed;
this.scale = scale;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
// 画国旗矩形
g2d.setColor(Color.RED);
Rectangle2D.Double rect = new Rectangle2D.Double(x, y, width, height);
g2d.fill(rect);
// 画国旗星星
g2d.setColor(Color.YELLOW);
int starSize = (int) (scale * height);
int cx = x + width / 10;
int cy = y + height / 10;
GeneralPath star = new GeneralPath();
star.moveTo(cx + 0.5 * starSize * Math.sin(0), cy - 0.5 * starSize * Math.cos(0));
for (int i = 0; i < 5; i++) {
star.lineTo(cx + 0.5 * starSize * Math.sin(i * 4 * Math.PI / 5), cy - 0.5 * starSize * Math.cos(i * 4 * Math.PI / 5));
star.lineTo(cx + starSize * Math.sin((i * 4 + 2) * Math.PI / 5), cy - starSize * Math.cos((i * 4 + 2) * Math.PI / 5));
}
star.closePath();
g2d.fill(star);
}
public void run() {
while (y > -height) {
y -= speed;
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("Flag Raising Animation");
FlagRaisingAnimation flag = new FlagRaisingAnimation(100, 300, 400, 200, 5, 0.5);
frame.add(flag);
frame.setSize(600, 600);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Thread thread = new Thread(flag);
thread.start();
}
}
```
在这个程序中,首先定义了一个 `FlagRaisingAnimation` 类,它继承自 `JPanel` 并实现了 `Runnable` 接口,用于在窗口中画出国旗并进行升旗动画。其中,`x` 和 `y` 分别表示国旗矩形的左上角坐标,`width` 和 `height` 分别表示国旗矩形的宽度和高度,`speed` 表示升旗速度,`scale` 表示五角星的大小比例。在 `paintComponent` 方法中,使用 `Graphics2D` 画出国旗矩形和五角星;在 `run` 方法中,不断改变 `y` 的值,实现升旗动画。
在 `main` 方法中,创建一个 `JFrame` 窗口,将 `FlagRaisingAnimation` 实例添加到窗口中,启动动画线程并显示窗口。如果需要改变国旗的位置、大小、升旗速度等属性,只需要修改构造函数中的参数即可。
阅读全文