实现的线性同余生成器java.util.Random
具有可重复用于任何选择的优点SEED
。鉴于这些声明,
private static final int SEED = 42;
private static final int N = 128;
private static final int MAX_X = 1024;
private static final int MAX_Y = 1024;
private final Random rnd = new Random(SEED);
private final List<SparklePoint> list = new ArrayList<SparklePoint>(N);
N
您可以初始化矩形中随机选择的点的(可重复的)列表,(0, 0, MAX_X, MAX_Y)
如下所示:
public void init(int seed) {
for (int i = 0; i < N; i++) {
int x = rnd.nextInt(MAX_X);
int y = rnd.nextInt(MAX_Y);
list.add(new SparklePoint(x, y));
}
}
给每个点 aTimer
其周期是从同一序列中选择的可能很方便:
private class SparklePoint implements ActionListener {
private static final int MAX_DELAY = 1000;
private final Point p;
private final Timer t;
private boolean bright;
public SparklePoint(int x, int y) {
p = new Point(x, y);
t = new Timer(rnd.nextInt(MAX_DELAY), this);
t.setRepeats(false);
t.start();
}
@Override
public void actionPerformed(ActionEvent e) {
t.stop();
if (bright) {
// darken p
} else {
// brighten p
}
bright = !bright;
t.setDelay(rnd.nextInt(MAX_DELAY));
t.start();
}
}