我正在用Java编写一个通用的蛇游戏,我希望我的苹果可以在随机坐标上绘制。但是,当我根据Math.random()设置坐标时,两个坐标都会创建相同的Math.random结果。这意味着苹果总是画在线性线上。 (4,4)
//Draws apple
public void drawApple(Graphics2D gfx) {
rectCoords(gfx, red, (int) Math.floor(Math.random()*20), (int) Math.floor(Math.random()*20));
}
// rectCoords(graphics, color, xcoordinate, ycoordinate)
我认为这是因为他们为种子使用相同的时间值,因为它们是同时被调用的。
我尝试了Math.random()
,Random
个对象,甚至是两者的组合。我已经尝试在整个代码中的不同时间将它们声明为变量,甚至抛出一个Thread.sleep();
(虽然我实际上让它工作时遇到了一些麻烦)。
当然,我不是唯一一个试图同时生成两个随机数的人。我感谢任何看过这个或者指向类似线程的人。谢谢!
编辑:我修复了它,这是另一段代码中的一个问题。虽然,不确定如何关闭此线程或标记它已解决...答案 0 :(得分:1)
当前代码总是会得到一个小于20的数字(因为Math.random()给出了一个双倍值,即> = 0和< 1),所以你可以使用{{1}来自nextInt()
的方法如下所示:
java.util.Random
此外,您实际上可以使用重载方法public void drawApple(Graphics2D gfx) {
Random random = new Random();
rectCoords(gfx, red, random.nextInt(), random.nextInt());
}
通过使用/传递maxNumber值nextInt(maxNumber)
来设置随机数的最大限制。