我正在使用以下代码onRoomConnected(int statusCode, Room room)
用于决定谁是第一名玩家。但有时我会为两名球员获得相同的第一/第二。如何解决此错误。
if (quickGame) {
myTurn = room.getParticipants().get(0).getParticipantId().equals(myId);
} else {
myTurn = room.getCreatorId().equals(myId);
}
if (myTurn) {
Log.e(TAG, "First Player");
status.setText("Click a button to start");
} else {
Log.e(TAG, "Second Player");
status.setText("Wait for opponent to start");
}
保证房间里的每个人的参与者 ID 集都相同(但不同比赛之间不同)。然而,他们的order不保证列表中的内容。因此,如果您想进行简单的选择(例如确定谁先行等),您必须依赖参与者 ID 集,但不能依赖顺序。实现这一目标的一些方法是:
- 按字母顺序排列在前的参与者 ID 是第一个参与游戏的玩家
- 按字母顺序排列在前的参与者 ID 负责随机选择一名玩家先开始。其他客户端将等待,直到参与者发送包含所选参与者 ID 的可靠实时消息。
方法(2)是首选,因为它不包含可能的偏差。
为什么?虽然我们没有指定参与者 ID 的结构(它只是一个字符串),但事实是它确实对信息进行编码,因此如果您使用参与者 ID 作为规则,最终可能会得到一个奇怪的参与者分布首先。例如,您可能会发现某个特定玩家总是先行,但这是因为,巧合的是,他们的参与者 ID 的生成方式总是会发生这种情况。因此,使用参与者 ID 来选择谁是参与者绝对是一个更好的主意权威随机决定谁先走,而不是谁先走actually首先。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)