我不太确定如何制作它,所以当在屏幕上绘制一个矩形时,它有可能是金色的。这是我为游戏随机生成随机矩形的当前代码:
public void drawRectangle() {
rects.clear();
int x = (int) (Math.random() * getWidth());
int y = (int) (Math.random() * getHeight());
int width = (int) (Math.random() * (getWidth() / 4));
int height = (int) (Math.random() * (getHeight() / 4));
if (x + width > getWidth()) {
x = getWidth() - width;
}
if (y + height > getHeight()) {
y = getHeight() - height;
}
Color color = new Color(
(int) (Math.random() * 255),
(int) (Math.random() * 255),
(int) (Math.random() * 255));
rects.add(new Rect(x, y, width, height, color));
repaint();
}
而且我尝试使用的代码使其成为黄金,虽然这是从网上获取的,我试图让它工作:编辑:下面这段代码实际上是无用的,但我会把它留在psot如果它的使用
public static double golden(int n) {
if (n == 0) return 1;
return 1.0 + 1.0 / golden(n-1);
}
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
System.out.println(golden(n));
}
非常感谢任何帮助!再次感谢一堆
答案 0 :(得分:2)
基本思路是,您想要随机创建一个黄金矩形(并可能随机创建宽度或高度)
您可以使用Math.random
,如果它在指定范围内(即0.75-1.0),生成一个黄金矩形,但我很懒,所以我会使用Random#nextBoolean
来做出决定本身,例如......
private Random random = new Random(System.currentTimeMillis());
public void drawRectangle() {
rects.clear();
double x = (Math.random() * getWidth());
double y = (Math.random() * getHeight());
double width = 0;
double height = 0;
if (random.nextBoolean()) {
if (random.nextBoolean()) {
width = (Math.random() * (getWidth() / 4));
height = width * 1.618;
} else {
height = (Math.random() * (getHeight() / 4));
width = height * 1.618;
}
} else {
width = (Math.random() * (getWidth() / 4));
height = (Math.random() * (getHeight() / 4));
}
if (x + width > getWidth()) {
x = getWidth() - width;
}
if (y + height > getHeight()) {
y = getHeight() - height;
}
Color color = new Color(
(int) (Math.random() * 255),
(int) (Math.random() * 255),
(int) (Math.random() * 255));
rects.add(new Rect(x, y, width, height, color));
repaint();
}
因为黄金宽度/高度的计算会产生double
值,我选择使用double
s,你会发现Rectangle2D.Double
在这里很有用Graphics2D
可以绘制Shape
个对象(请参阅Graphics2D#draw
和Graphics2D#fill
)