如何用Math.random()*MAX实现随机位置和大小的星星效果?
解决方案:用随机数生成星星效果
首先定义几个常量来控制参数,方便后续调整:
// 窗口尺寸 private static final int MAX_WIDTH = 400; private static final int MAX_HEIGHT = 400; // 星星最大数量 private static final int MAX_STARS = 100; // 星星最大尺寸(宽高) private static final int MAX_SIZE = 5;
然后用循环替代重复的fillOval调用,每次循环生成随机的位置和大小:
gc.fillRect(0, 0, MAX_WIDTH, MAX_HEIGHT); gc.setFill(Color.WHITE); // 循环生成随机星星 for (int i = 0; i < MAX_STARS; i++) { // 生成随机x坐标:0 到 (窗口宽度 - 星星最大尺寸),避免星星超出窗口 int x = (int) (Math.random() * (MAX_WIDTH - MAX_SIZE)); // 生成随机y坐标 int y = (int) (Math.random() * (MAX_HEIGHT - MAX_SIZE)); // 生成随机大小:1 到 MAX_SIZE(避免大小为0) int size = (int) (Math.random() * MAX_SIZE) + 1; gc.fillOval(x, y, size, size); }
关键细节说明:
Math.random()返回**0.0(包含)到1.0(不包含)**的随机double值,乘以对应最大值就能得到目标范围的随机数,转成int适配fillOval的整数参数要求。- 计算x/y坐标时减去
MAX_SIZE,是为了防止星星因位置太靠右下角而超出窗口边界。 - 星星大小加1,是避免生成尺寸为0的无效星星。
如果要调整星星数量、大小或窗口尺寸,直接修改常量即可,不用手动编写大量重复代码。
内容的提问来源于stack exchange,提问作者Douglas Fuentes
相关产品推荐
相关产品推荐

