黑色背景上隨機閃爍 300 顆白色星號,模擬星空效果。
import java.awt.*;
import java.util.Random;
public class StarField {
public static void main(String[] args) {
Frame frame = new Frame("Star Field");
frame.setSize(1024, 768);
frame.setBackground(Color.BLACK);
frame.add(new StarPanel());
frame.setVisible(true);
}
}
class StarPanel extends Panel implements Runnable {
private static final int STAR_COUNT = 300;
private static final int WIDTH = 1024;
private static final int HEIGHT = 768;
private final Random random = new Random();
private int[] x = new int[STAR_COUNT];
private int[] y = new int[STAR_COUNT];
public StarPanel() {
for (int i = 0; i < STAR_COUNT; i++) {
x[i] = random.nextInt(WIDTH);
y[i] = random.nextInt(HEIGHT);
}
new Thread(this).start();
}
@Override
public void paint(Graphics g) {
g.setColor(Color.WHITE);
for (int i = 0; i < STAR_COUNT; i++) {
g.drawString("*", x[i], y[i]);
}
}
@Override
public void run() {
while (true) {
// 簡單閃爍:隨機重置部分星星位置
for (int i = 0; i < 10; i++) {
int idx = random.nextInt(STAR_COUNT);
x[idx] = random.nextInt(WIDTH);
y[idx] = random.nextInt(HEIGHT);
}
repaint();
try { Thread.sleep(200); } catch (InterruptedException ignored) {}
}
}
}
Frame / Panel:AWT 頂層視窗與繪圖容器Graphics:繪圖上下文,drawString、fillOval 等repaint():排程重繪,觸發 paint()Runnable + Thread:動畫迴圈與事件派發執行緒分離Math.random() / Random:產生隨機座標BufferedImage)消除閃爍JPanel + Timer 獲得更平滑動畫