该项目的主要类是acm.program.GraphicsProgram;
GraphicsProgram
在早些时候处理我的项目时,我需要在Pong游戏中略微随机化球运动,并通过使用找到解决方案import java.util.Random;
,然后我使用了这个代码(每当球从球员的球拍弹跳时执行,这会使球在每场比赛中移动不同):
Random rand = new Random();
boolean bool = rand.nextBoolean();
if (bool)
if (dx > 0)
dx += 1;
else
dx -= 1;
else if (dy > 0)
dy += 0.5;
else
dy -= 0.5;
Run Code Online (Sandbox Code Playgroud)
哪里dx
和dy
分别是球水平和veritcal速度.
但今天在大学讲座中,我们已经展示了不同的方法(与第一个无关,我认为一个人自己更早),使用
import acm.util.RandomGenerator;
然后
RandomGenerator rgen = RandomGenerator.getInstance();
boolean bool = rgen.nextBoolean();
Run Code Online (Sandbox Code Playgroud)
这两个类(Random和RandomGenerator)之间有什么区别吗?如果是这样,哪一个更好用?我不太明白什么getInstance();
是为什么以及为什么我在使用Random
课时不需要一个.
ACM RandomGenerator
有一些额外的便利方法,比如nextColor()
选择随机颜色.
它还通过getInstance()
类方法提供全局生成器.根据评论,听起来构造函数使用当前时间作为种子.这是一个很大的缺陷,并且可能导致不同生成器实例生成相同序列的随机数的错误.要解决这个问题,他们建议只使用一个实例RandomGenerator
,通过该getInstance()
方法访问.
一般来说,最好使用java.util.Random
,因为它不会在程序中引入第三方依赖,并且它使用更好的种子算法,不受ACM实现的缺陷的影响.