使用1px摆动矩形绘制山脉

时间:2014-04-15 20:35:58

标签: java swing graphics

我正在尝试使用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);
        }
    }

enter image description here

这就是我得到的效果,就像半个案子一样。有时我会得到这样的东西:

enter image description here

这怎么可能?这有什么不对?

1 个答案:

答案 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 {
   // ...
}

我自己,我会研究使用分形。