java - 如何以单位步长获取 Math.random()

标签 java

我正在尝试创建一个蛇游戏,其中我有 400x400 的 Pane ,并且蛇在 X 和 Y 轴上移动 20。通过这样做,我创建了一个 X 轴和 Y 轴步长为 20 的网格。

我想在 Pane 中随机生成一个水果,但我希望宽度和高度在网格中,因此它应该以 20 (0, 20, 40, 60 , 80, ... , 400) 的步长生成。

我可以使用 Math.random()*400 来获取范围,但我无法给它单位步长。

我发现这个问题正是我所问的,但解决方案是基于 lua 的 math.random(): math.random function with step option?

这是我如何翻译蛇的位置:

if (input.equals(KeyCode.W.toString()) || input.equals(KeyCode.UP.toString()))
    if (snakes.get(0).getY() == 0)
        movement.stop();
    else
        snakes.get(0).setY(snakes.get(0).getY() - 20);

*Snakes 是一个矩形数组列表,它在吃食物时会扩展,我只想让头部吃食物 *食物是一个在随机位置生成的圆圈

这是我检查他们是否联系的方法:

if (food.getCenterX() == snakes.get(0).getX() && food.getCenterY() == snakes.get(0).getY())
    score++;
setScore();

我将蛇移到食物上,但 x 和 y 位置永远不会匹配,除非我自己在网格处生成食物(例如 [20,40] 或 [60, 200])。

是否有其他替代方案或随机单位步骤或我在 stackoverflow 上找不到的其他问题可以帮助我?

最佳答案

如果您需要整数值,可以使用Random.nextInt(intbound)。这将在 20x20 矩阵内生成坐标。

Random r = new Random();
int x = r.nextInt(20)*20; // values from 0 to 19 inclusively
int y = r.nextInt(20)*20;

关于java - 如何以单位步长获取 Math.random(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57777780/

相关文章:

Java类实例化

java - 如何使用 Java StAX 格式化和读取 XML 处理指令?

java - 你能排除一个对象不被 Java 中的垃圾收集器跟踪吗?

java - 如何使用 selenium-maven-plugin 启动 chrome 驱动程序来启动 Selenium 服务器

java - 如何在 Java 中格式化 Oracle 日期和时间戳类型值?

java - 如何根据 Spring MVC Controller 方法请求的 URI 实例化 @RequestBody 参数的特定子类型?

java - 使用 String.valueOf(intVar) 动态设置 TextView 截断部分 intVar

java - 在Java中获取以秒为单位的日期表示

java - MongoDB Java : Finding objects in Mongo using QueryBuilder $in operator returns nothing

JavaFX 事件/监听器/处理程序