Mam opartą na rundach grę wieloosobową dla systemu Android, która wcześniej pracowała nad XMPP i chcę przejść na Usługi gier Google Play. W starej wersji był bot XMPP, decydujący o tym, który gracz będzie graczem 1 lub 2. Ważne jest, aby wiedzieć, który gracz powinien wykonać pierwszy ruch.Decydowanie o tym, kto jest graczem pierwszym i drugim w rozgrywce opartej na rundzie z usługami gier Google Play.
Z Google Play Game Services, znalazłem rozwiązanie, które prawie działa:
@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();
}
ten sposób działa dobrze, kiedy zaprosić innego gracza. Jednak często kończy się niepowodzeniem, gdy obaj gracze wybierają autodopasowanie. W tym przypadku obaj gracze są na tej samej pozycji w uczestnikach ArrayList. W związku z tym oba będą wyglądać jak ten sam odtwarzacz na aktualnie używanym urządzeniu.
Jaki jest właściwy sposób wybierania gracza 1 i 2, bez centralnej instancji decydującej o tym. Czy na liście uczestników znajdują się przydatne dane, których nie znalazłem w debugerze?
Ah, nie rozpoznałem, że dane uczestników są losowe. To rozwiązuje mój problem :) –
Identyfikatory uczestników nie są całkowicie losowe: https://www.youtube.com/watch?v=yIY1zsZ2yCU – janst
co to jest klient? –