Java实现会动的爱心
时间: 2024-05-15 17:13:35 浏览: 4
您好,以下是Java实现会动的爱心的示例代码:
```
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MovingHeart extends JPanel implements Runnable {
private static final long serialVersionUID = 1L;
private static int width = 500; // 窗口宽度
private static int height = 500; // 窗口高度
private static int x = width / 2 - 30; // 初始位置x坐标
private static int y = height / 4; // 初始位置y坐标
private static int step = 0; // 步数,用于计算爱心位置
private static int stepLen = 3; // 步长,控制爱心移动速度
private static int heartSize = 50; // 爱心大小
private static Point[] heartShape = new Point[5]; // 爱心形状
public MovingHeart() {
// 初始化爱心形状
heartShape[0] = new Point(0, 0);
heartShape[1] = new Point(-20, -20);
heartShape[2] = new Point(-40, 0);
heartShape[3] = new Point(-20, 20);
heartShape[4] = new Point(0, 0);
// 创建线程
Thread thread = new Thread(this);
thread.start();
}
@Override
public void paint(Graphics g) {
super.paint(g);
// 绘制爱心
g.setColor(Color.RED);
for (int i = 0; i < heartShape.length - 1; i++) {
Point p1 = heartShape[i];
Point p2 = heartShape[i + 1];
g.drawLine(x + p1.x, y + p1.y, x + p2.x, y + p2.y);
}
}
@Override
public void run() {
while (true) {
step++;
// 计算爱心位置
x = width / 2 - (int) (heartSize * Math.sin(step * Math.PI / 180));
y = height / 4 - (int) (heartSize * (Math.cos(step * Math.PI / 180) - 1));
repaint();
try {
Thread.sleep(stepLen);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("MovingHeart");
frame.setSize(width, height);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.add(new MovingHeart());
frame.setVisible(true);
}
}
```
运行上述代码后,将会看到一个窗口中动态移动的爱心。您可以根据需要修改窗口大小、爱心大小、步长等参数,以及更改爱心形状来实现不同的效果。