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:
- Los servicios de juegos de Android android no están configurados correctamente. ¿alguien sabe Como arreglarlo?
- Prácticas recomendadas para guardar el juego cuando el usuario ha salido de Google Play Services?
- Los fósforos de turnbased desaparecen después de cargar por primera vez
- ¿Dónde enviar un informe de error con respecto a Google Play Games API?
- Mantener la conexión a la habitación
@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?
- ¿Cómo recuperar la ID de juegos de google con la nueva actualización de juegos de Google ID de jugador?
- BaseGame Util no se puede resolver con un tipo
- Cómo utilizar los servicios de juegos de Google Play con LibGdx
- ¿La API del complemento de servicios de Google Play de Unity no está sincronizada con la función de interfaz de usuario de Show Leaderboard?
- Google Play Games - Actividad que llama automáticamente a beginUserInitiatedSignIn ()
- Error de Google Play Services - Informe de errores Incomprensible
- GameHelper se bloquea en onConnectionFailed ()
- ¿Posibles razones para que el dispositivo Android no reciba las notificaciones de juegos de Google?
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.
- Dispositivos con Android 4.2 (Jelly Bean) compatible con Bluetooth de baja energía (BLE)
- Sqlite DB con Android algunas preguntas básicas