决定谁是球员之一,两人在一个圆形基础的游戏与谷歌Play游戏服务两人、球员、游戏、谁是

2023-09-07 16:17:14 作者:星辰误入眼底

我有一个圆形为基础的多人游戏为Android已经在工作之前XMPP,我想切换到谷歌Play游戏服务。在旧版本中,有一个XMPP机器人,决定哪些球员将是玩家1或2。这是很重要的知道哪些球员应该做的第一个动作。

I have a round-based Multiplayer game for Android that has been working over XMPP before, and I want to switch to Google Play Game Services. In the old version, there was an XMPP bot, deciding which player will be player 1 or 2. This is important to know which player should make the first move.

随着谷歌Play游戏服务,我发现,近有效的解决方案:

With Google Play Game Services, I found a solution that nearly works:

@Override
public void onRoomConnected(int statusCode, Room room) {
    ArrayList<Participant> participants = room.getParticipants();
    Participant first = participants.get(0);
    if (first.getPlayer() == null || !first.getPlayer().getPlayerId().equals(myPlayerId)) {
        LaskaField.HUMAN_PLAYER = 2;
        LaskaField.OTHER_PLAYER = 1;
        opponent = first.getDisplayName();
    } else {
        LaskaField.HUMAN_PLAYER = 1;
        LaskaField.OTHER_PLAYER = 2;
        opponent = participants.get(1).getDisplayName();
    }
    setPlayerNames();
}

此方式,邀请其他玩家时,工作正常。然而,当双方球员选择自动匹配它往往会失败。在这种情况下,双方球员都在参加ArrayList中的相同位置。因此,他们都将显示为他们当前使用的设备上的同一个球员。

This way works fine when inviting another player. However, it often fails when both players select auto-matching. In this case, both players are on the same position in the participants ArrayList. Therefore, they will both appear as the same player on their currently used device.

这是选择播放器1和2,具有用于决定此没有中央实例的正确方式。是否有与会者列表中的任何有用的数据,我没有使用调试器找到?

What is the right way to select player 1 and 2, with no central instance for deciding this. Is there any useful data in the participants list that I didn't find with the debugger?

推荐答案

我通过对比玩家ID(这是随机的每场比赛)解决了这个问题:

I have solved the problem by comparing the player ids (which are random for each game):

String myid = mActiveRoom.getParticipantId(client.getCurrentPlayerId());
String remoteId = null;

ArrayList<String> ids = mActiveRoom.getParticipantIds();
for(int i=0; i<ids.size(); i++)
{
    String test = ids.get(i);
    if( !test.equals(myid) )
    {
        remoteId = test;
        break;
    }
}

boolean iMakeTheFirstMove = ( myid.compareTo(remoteId) > 0 );
 
精彩推荐
图片推荐