1

我有一个我正在用 Java 编程的游戏,我希望我的网站能够使用用户浏览器中的 Javascript 验证 Java 游戏中使用的随机播放是真实的。

我正在使用 Collections.shuffle(array, seed);

我希望能够向与 javascript 顺序相同的数组提供相同的种子以获得相同的结果。

这是 Java 中 Collections.shuffle 的源代码:

public static void shuffle(List<?> list, Random rnd) {
 int size = list.size();
 if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
     for (int i=size; i>1; i--)
         swap(list, i-1, rnd.nextInt(i));
 } else {
     Object arr[] = list.toArray();

     // Shuffle array
     for (int i=size; i>1; i--)
         swap(arr, i-1, rnd.nextInt(i));

     // Dump array back into list
     ListIterator it = list.listIterator();
     for (int i=0; i<arr.length; i++) {
         it.next();
         it.set(arr[i]);
     }
 }
}

编辑:我还可以为 Java 使用不同的 shuffle mechanizm。只要相同的种子可以用在 Java 和 Javascript 上

4

2 回答 2

2

我不相信你可以。

Java 使用具有 48 位种子的已建立算法来生成伪随机数。其次,该数字可以用任何其他数字播种以生成另一个模式(并且Random使用相同种子的任何两次调用都将生成相同的模式)。

Javascript 不允许您从 jump 播种随机数,并且在底层实现的随机数算法可能与Java 中使用的算法不同。

虽然我看不到在两个不同的地方执行随机操作的目的,但为什么不将其合并为一个呢?让 Java 处理集合的随机化,并让 Javascript 代替该顺序。

于 2013-02-28T04:48:39.617 回答
0

使用 md5 哈希算法(或任何其他算法),它应该在任何平台上给出相同的结果。或者发明你自己的哈希函数,但它应该是平均分布的。这是一项非常复杂的任务。哈希函数的结果可以递归地用于获取下一个随机数。这将在任何系统上给出相同的随机数序列。基于其结果实现洗牌算法。可以在 google 中找到 Shuffle 算法的实现。

于 2013-02-28T06:18:53.357 回答