[英]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
值。 相反,请使用以下方法之一:
new Random()
- 在单线程代码中使用。 受到推崇的。
您通常应该只分配一个,然后在整个代码中共享它。
new SplittableRandom()
- 用于并行计算。
ThreadLocalRandom.current()
- 在多线程代码中使用,例如 Web 服务器。
所有 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.