繁体   English   中英

如何以单位步长获得 Math.random()

[英]how to get Math.random() with a unit step

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

我想在窗格中随机生成一个水果,但我希望宽度和高度在网格中,因此它应该以 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 是一个矩形的 Arraylist,它在吃食物时会扩展,我只想让头部吃食物 *Food 是一个在随机位置生成的圆圈

这是我检查他们是否接触的方法:

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

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

是否有另一种替代方法或随机单位步长或其他一些我在 stackoverflow 上找不到的问题可以帮助我?

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

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

如果您想要一个 0、20、40、60、80、...、400 中的随机数,那么首先要意识到该列表中有 21 个值。

这意味着您需要一个随机整数值 0, 1, 2, ..., 20,然后将其乘以 20,以获得所需的 20 步长。

不要为此使用Math.random() 当然它很方便,但主要是你想要double值。 相反,请使用以下方法之一:

所有 3 个都有一个nextInt(int bound) ,它返回一个伪随机的、均匀分布的 int 值,介于 0(包含)和指定值(不包含)之间。

例子

Random rnd = new Random();

// in some loop generating fruits:
int fruitX = rnd.nextInt(21) * 20;
int fruitY = rnd.nextInt(21) * 20;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM