java - 使用 1px Swing 矩形绘制山脉

标签 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

这怎么可能?这里出了什么问题?

最佳答案

这里:

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/

相关文章:

java - OpenGL/Android -- 设置与屏幕像素匹配的 2D OpenGL 正交坐标系

javascript - Javafx WebEngine 读取安全 cookie

java - Keycloak 访问 token

java - CellRenderer - 使文本变粗

java - 使用 4Gb Ram 和 IBM Java 1.5 时按钮文本消失

javascript - Fisheye Distortion 插件的奇怪行为

java - 在 Spring Boot Angular 8 Web 应用程序中验证和管理用户的最简单方法是什么?

java - IntelliJ 运行/调试配置中的变量

java - ActionListener 中的 ArrayList 不工作

java - 如何在 Java GUI 中更新图像