2010-09-08 98 views
1

是否有可能在两台不同机器上“同步”(缺少更好的词)随机数发生器?在两台机器上同步随机数发生器

背景:我有一个适用于iOS的网络多人游戏的纸牌游戏。两个同伴都需要能够访问卡片组。当牌组被洗牌时,我可以使用NSCoding将我的牌组对象序列化,并将它发送给另一个对等体,以使这些套牌同步,但是如果我只能指望两个对等体上的随机数生成器来发送更少的数据,生成相同的随机数。因为这是一款纸牌游戏,所以我需要最好的随机数字,所以我更喜欢使用arc4random(),它在第一次被调用时会自己种子。有没有,也许是手动种子的方法?

简单地发送卡片组对象是的解决方案,但我打算使用OpenFeint的实现异步多,要做到这一点,我的比赛状态需要保持16K之下,只是我的卡甲板几乎是2K时序列化。 :)

谢谢!

+0

这听起来像个坏主意。随机发生器状态可以被拦截。一个序列化的(52卡)卡座不应占用52个字节的空间。 – 2010-09-08 23:34:51

回答

0

如果你刚发送过随机数本身,该怎么办?无论哪个设备“转向”,都可以创建并发送它的随机数,以便所有版本都可以确认相同的抽签。如果您仔细确保所有版本的套牌都是相同的订单/卡片,并且没有随机数字被丢弃,那么理论上应该使用非常少量的数据传输。如果另一个玩家进来,你可以通过翻转对象或对象数组中的单个位来标记已经绘制了哪些卡,并发送该对象/数组。

如果不成功,恐怕我不知道该平台,但我知道在其他一些语言中,将种子作为调用的一部分将使用固定值(例如:arc4random(seed) )我不知道你的工作是否属于这种情况,但这可能值得研究。

希望这有助于!