网络游戏的java随机种子(android和PC)

网络游戏的java随机种子(android和PC),java,android,random,Java,Android,Random,我正在制作一款网络纸牌游戏,将在android和PC上玩 要处理诸如在游戏开始前洗牌和选择谁先去(以及其他一些类似的事情),我想使用java.util.Random并在服务器和所有客户端上设置一个种子,使其相同(由服务器生成) 这似乎是最简单的方法,而且比发送一条长消息(包含由服务器洗牌的牌组中所有52张牌的序列)更有效 这是不是我可以指望在不同类型的JVM/JRE等上从同一种子生成相同的数字(我主要考虑的是android的不同版本以及android和其他东西使用的dalvik JVM的不同版本

我正在制作一款网络纸牌游戏,将在android和PC上玩

要处理诸如在游戏开始前洗牌和选择谁先去(以及其他一些类似的事情),我想使用java.util.Random并在服务器和所有客户端上设置一个种子,使其相同(由服务器生成)

这似乎是最简单的方法,而且比发送一条长消息(包含由服务器洗牌的牌组中所有52张牌的序列)更有效


这是不是我可以指望在不同类型的JVM/JRE等上从同一种子生成相同的数字(我主要考虑的是android的不同版本以及android和其他东西使用的dalvik JVM的不同版本),或者我应该在服务器上洗牌,并将牌列表发送给所有玩家?(或者除了java.util.Random之外还有什么我可以使用的吗?

根据javadoc,所有的实现都要求相同

Java实现必须使用此处所示的所有算法 类随机,以确保Java代码的绝对可移植性


因为标准javadoc声明在所有平台中必须表现相同,所以您应该相信这一点。然而,您可以让Random应用程序并编写自己的算法来生成伪随机数:例如:想象一个基于正弦的函数:

double myRandom=振幅*数学正弦(频率*序列)

。。。其中振幅是编号间隔(52)的上限,频率应为高常数值,不是PI的倍数。序列应该从一个恒定的偏移量值开始,并在每次获得一个新的随机值时递增


准确地选择频率值,还可以确保算法在一定的迭代次数内不会产生重复值。

为什么客户需要了解整个数据组?只是好奇……老实说,我不相信把种子交给客户。我宁愿只发送客户应该知道的关于游戏状态的信息,我想不会。如果我想防止作弊,那可能不是个好主意。然而,这更像是一个附带项目,如果有人喜欢我的游戏,甚至在游戏中作弊,我会感到非常荣幸。。。除此之外,我已经建立了人机对抗游戏。如果我能在所有客户身上使用相同的洗牌牌。我可以通过改变ai提供移动的部分来实现多人游戏,并读取其他玩家提供的移动。(并跳过服务器必须传递有关牌组和卡片的消息)