我正在尝试使用 1 宽度的矩形(类似于积分)绘制山脉背景。我随机化屏幕最左侧的第一个点,随机化二进制数并绘制第一个矩形。
如果二进制数为0,则下一个矩形将低1px。别的更高。在 for 循环中依此类推。
有 95% 的可能性在下一个循环中方向不会改变,并且会继续走高/走低。并且有 5% 的机会方向会改变。为此,我使用 1 到 1000 之间的随机数。
public Landscape(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;
Random rand = new Random();
int first = rand.nextInt((800 - 200) + 1) + 200;
g2d.fillRect(0, 800 - first, 1, first);
int d = first % 2;
for(int i = 1; i <= 800; i++) {
int choose = rand.nextInt((1000 - 1) + 1) + 1;
if(choose > 950) {
d = -(d);
}
if(d == -1) {
first += 1;
} else {
first -= 1;
}
g2d.fillRect(i, 800 - first, 1, first);
}
}
这就是我在一半情况下得到的效果。然而有时我会得到这样的东西:
这怎么可能?这里出了什么问题?
最佳答案
这里:
int d = first % 2;
d 为 1 或 0。如果 d 被指定为 0,则 if(d == -1) {
始终为 false,因此您的图表将单调向下。
您正在寻找两种状态的解决方案来决定山是向上还是向下,因此请使用 boolean 值。也许是这样的:
boolean direction = rand.nextBoolean();
// 1 in 20 chance, same as 5 in 100, same as 50 in 1000 chance
if (rand.nextInt(20) == 0) {
direction = !direction;
}
if (direction) {
// ...
} else {
// ...
}
我自己,我会考虑使用分形。
关于java - 使用 1px Swing 矩形绘制山脉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23094016/