Decidir quién es el jugador uno y dos en un juego basado en ronda con Google Play Game Services

Tengo un juego multijugador basado en ronda para Android que ha estado trabajando sobre XMPP antes, y quiero cambiar a Google Play Game Services. En la versión anterior, había un bot XMPP, decidir qué jugador será el jugador 1 o 2. Esto es importante para saber qué jugador debe hacer el primer movimiento.

Con Google Play Game Services, encontré una solución que casi funciona:

@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(); } 

De esta manera funciona bien al invitar a otro jugador. Sin embargo, a menudo falla cuando ambos jugadores seleccionan auto-matching. En este caso, ambos jugadores están en la misma posición en los participantes ArrayList. Por lo tanto, ambos aparecerán como el mismo jugador en su dispositivo actualmente utilizado.

¿Cuál es la manera correcta de seleccionar el jugador 1 y 2, sin instancia central para decidir esto. ¿Hay datos útiles en la lista de participantes que no encontré con el depurador?

He resuelto el problema comparando los ids del jugador (que son aleatorios para cada juego):

 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 ); 

Este es un problema estándar de seleccionar un líder de un grupo de nodos no organizados. Hay algunas maneras bastante avanzadas de hacerlo, estoy seguro. Si desea comprobar hacia fuera: Selección automática de un líder en un racimo de nodos y de un algoritmo de Paxos.

Ahora … Dicho esto, ya que tienes un límite de 4 personas, theres formas más fáciles de hacerlo. Usted podría tratar su ID como un número, y que nunca tiene el ID más alto es el jugador 1, y descendiendo en orden. Eso probablemente sería la forma más simple.

Usted también podría tener todos los jugadores presentar un rollo al azar y elenco amplio. En el caso extremadamente raro de un duplicado, usted puede tener un reroll. Una vez que todos han hecho sus rollos, y todos tienen los mismos datos, cada cliente individual puede determinar la orden del jugador basado en el valor de los rollos.

No haría nada relacionado con la orden en la matriz sin embargo. No creo que esté garantizado en ninguna circunstancia.

  • Puntuaciones falsas en los servicios de juegos de Google Play
  • Las tablas de clasificación de Google Play no se muestran
  • Android google play juegos seleccionar actividad para iniciar cuando se hace clic en la notificación
  • ¿Cómo obtener la puntuación de la tabla de resultados del juego del juego google del jugador actual?
  • La autenticación en los Servicios de juegos de Google Play en android causa un error al iniciar sesión con la cuenta de Google Apps
  • La aplicación Google Play Top Charts ya no se clasifica en absoluto después de cambiar el título?
  • Android bloquea la aplicación con BaseGameActivity
  • AndEngine con los servicios de juegos de Google Play
  • Error al iniciar sesión en los servicios de juegos de Google Play
  • ¿Qué plataformas / API de Android son compatibles con las versiones de Google Play Services?
  • Google Play Games, Firebase y el nuevo inicio de sesión de Google
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.