我正在开发一个使用Google Play服务实时多人游戏,在游戏开始前希望所有客户端都有一个共享的种子(用于初始化“随机”的游戏状态,以保证确定性)。
我原本计划使用Room.getCreationTimestamp,但测试后并不是所有玩家都收到相同的值。同样Room.getCreatorId也不能保证自动匹配对等方拥有相同的值。
有一个视频Google Play Games: Choosing a specific user建议同伴可以选择一个同伴(例如从排序列表中的第一个)来选举做出决策。如果在最大玩家数量加入之前游戏开始,则可能会导致此方法失效,并且新玩家加入活动游戏时可能会对谁是老板产生分歧。我已经草拟了一些临时解决方案,并查看了一些共识和领导者选举算法,但不用说这很棘手。
我原本计划使用Room.getCreationTimestamp,但测试后并不是所有玩家都收到相同的值。同样Room.getCreatorId也不能保证自动匹配对等方拥有相同的值。
有一个视频Google Play Games: Choosing a specific user建议同伴可以选择一个同伴(例如从排序列表中的第一个)来选举做出决策。如果在最大玩家数量加入之前游戏开始,则可能会导致此方法失效,并且新玩家加入活动游戏时可能会对谁是老板产生分歧。我已经草拟了一些临时解决方案,并查看了一些共识和领导者选举算法,但不用说这很棘手。
你是否知道一种更简单/更安全的生成共享种子的方法?
编辑:这里是两个不同连接设备中与房间相关的值:
Room.getRoomId():
1. ChoKCQj-99-X_xEQAhABGAAg____________ARDhp87Gh-73-Uk
2. ChoKCQj-99-X_xEQAhABGAAg____________ARC7oOT7-oKouRI
Room.getCreationTimestamp():
1. 1431018058986
2. 1431018047097
Room.getCreatorId():
1. p_COGnzsaH7vf5SRAB
2. p_CLug5Pv6gqi5EhAB
Room.getDescription()
在两种情况下都返回 null
。
关于 RoomId 的建议有一些前途,但是如果不知道如何生成 id,我对采用前缀的安全性持怀疑态度。
编辑:我尝试使用 "creator" 作为权限,每个节点都可以向创建者请求种子。不幸的是,在我的两个节点测试中,每个节点都认为自己是创建者。