Deslizar jugador para eliminar el partido

Digamos que tengo un partido basado en turnos con dos jugadores. En algún momento, el jugador 1 reconoce que está a punto de perder el juego. Cuando es turno del Jugador 1, usa la aplicación Game Center para hacer un golpe rápido para eliminar la partida.

Cuestiones:

R. El cronómetro de turno nunca caduca en el Jugador 1. Por lo tanto, el turno del partido no cambiará al Jugador 2 cuando haya transcurrido el time.

B. El juego también ofrece un modo de solo vista para que los jugadores puedan ver el progreso del juego mientras él está fuera de turno. Pero ya que no se actualizó ningún estado para indicar que el jugador 1 había eliminado la coincidencia manualmente. La aplicación no ofrece ninguna resolución. Además, solo puedes finalizar el partido mientras sea tu turno.

Idealmente, quiero declarar al Jugador 2 como ganador y finalizar el partido.

¿Cómo manejas en esta situación?

Finalmente encontré una solución para esto.

Si elimina una coincidencia, entonces llame a GKTurnBasedMatch:loadMatchesWithCompletionHandler , la coincidencia eliminada no aparecerá (como se esperaba). Sin embargo, resulta que aún puede volver a download la coincidencia eliminada utilizando GKTurnBasedMatch:LoadMatchWithID , si aún tiene la ID de la coincidencia eliminada.

Creo que podemos suponer razonablemente que The Cheater volverá a jugar el juego; de lo contrario, ¿por qué les importaría incurrir en una pérdida? Por lo tanto, implementé lo siguiente:

  1. Mantener una tabla localmente, en el dispositivo, de coincidencias.
  2. En el arranque, extraiga la list de los partidos del jugador local del Game Center y compare con mi list local.

Cuando The Cheater reconoce la situación y elimina la coincidencia con la interfaz de Game Center, la coincidencia se elimina del Game Center, pero no de mi database local. Cuando The Cheater comienza mi juego nuevamente, veo que tienen más partidos localmente que en Game Center.

Luego GKTurnBasedMatchOutcomeLost participantQuitInTurnWithOutcome o participantQuitOutOfTurnWithOutcome , según corresponda, con un resultado de GKTurnBasedMatchOutcomeLost .

Esto pasa el turno al siguiente jugador y registra una pérdida para The Cheater. No funcionará si el tramposo nunca vuelve a jugar el juego. (Pero, si no están jugando, no están destruyendo más partidos, por lo que el caos está contenido)