当用户玩快速游戏时,如何确定谁是第一个玩家?

Pra*_*nna 7 google-play-games

我正在使用以下代码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");
        }
Run Code Online (Sandbox Code Playgroud)

Bru*_*ira 9

参与者ID的集合保证与房间中的每个人相同(但不是在不同的匹配中).但是,他们在列表中的顺序无法保证.因此,如果您想进行简单的选举(例如,确定谁先行等),您必须依赖于参与者ID的集合,而不是顺序.您可以通过以下方式实现以下目标:

  1. 首先按字母顺序排列的参与者ID是第一个玩的玩家
  2. 首先按字母顺序排列的参与者ID负责随机选择一个首先开始的玩家.其他客户端将等待,直到参与者发送包含所选参与者的ID的可靠实时消息.

方法(2)是优选的,因为它不包含可能的偏差.

为什么?虽然我们没有指定参与者ID的结构(它只是一个字符串),但事实是它确实对信息进行了编码,因此如果您使用参与者ID作为规则,您可能最终会得到一个奇怪的分布先走了.例如,您可能会发现特定的玩家总是先行,但这是因为,巧合的是,他们的参与者ID是以这种方式生成的.因此,最好使用参与者ID来选择谁是随机决定谁先行的权力,而不是实际上谁先行.