我正在尝试使用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);
}
}
这就是我得到的效果,就像半个案子一样。有时我会得到这样的东西:
这怎么可能?这有什么不对?
答案 0 :(得分:4)
下面:
int d = first % 2;
d为1或0.如果d指定为0,则if(d == -1) {
始终为false,因此您的图形将单调向下。
你正在寻找一个两个州的解决方案来决定山是上升还是下降,所以使用布尔值。也许是这样的事情:
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 {
// ...
}
我自己,我会研究使用分形。