这个游戏使用了什么样的随机算法?

逆向工程 ios
2021-06-30 02:33:33

我正在玩一个 iOS 游戏,它使用一副 48 张牌,我想对用于生成随机一副牌的算法进行逆向工程,以便我可以预测接下来会出现哪张牌。这就是我对游戏的了解。

  • 该游戏很可能是使用 Unity 制作的,因为我发现该游戏会定期向域 config.uca.cloud.unity3d.com 发送数据。
  • 如果相关,游戏基本上是日本纸牌游戏锦鲤。
  • 每张卡片内部编号为 1-48,每副牌只包含一张卡片。
  • 每个游戏将 4 个无符号 32 位整数种子 x、y、z 和 w 作为输入,并生成随机牌组。
  • 这些种子是通过查询游戏 API 来检索的,即它们不是由游戏应用程序生成的,这意味着可以模拟 API 并向游戏发送自定义种子。
  • 如果所有种子都是 0,那么牌组似乎根本没有被洗牌。它似乎导致非常可预测的 5-48 范围。(由于某种原因,第一个“yaku”1-4 被跳过了)
  • 我还尝试将每个种子中的一个更改为 1,而其余的保持为 0。例如,x = 1,但 y = z = w = 0,这导致一副牌看起来是随机的,与未洗牌的牌完全不相似当所有种子为零时生成甲板。

有没有人在随机数生成器方面有经验,尤其是那些常用的在 Unity 中编码的 iOS 应用程序,谁知道可以使用什么样的算法来生成甲板?可以使用某种洗牌算法吗?

编辑:我试图根据这个答案使用 .NET System.Random 类对数组进行洗牌,其中随机对象是使用 0 的种子启动的 。https://stackoverflow.com/a/108836

但问题是数组是伪随机打乱的,不像游戏中的“数组”是有序的。这就是为什么我认为似乎没有使用一种“Random.next()”调用。会涉及一些乘法吗?这将解释为什么零种子会保持牌组不变。

0个回答
没有发现任何回复~