Игрок проведите пальцем, чтобы удалить матч
Допустим, у меня пошаговый матч с двумя игроками. В какой-то момент игрок 1 признает, что он собирается проиграть. Когда наступает очередь игрока 1, он использует приложение Game Center, чтобы провести матч, чтобы удалить матч.
Вопросы:
A. Таймер хода не истекает на Игроке 1. Таким образом, ход матча не переключится на Игрока 2, когда истечет время.
B. Игра также предлагает режим только для просмотра, так что игроки могут видеть ход игры, когда он находится вне очереди. Но так как статус не был обновлен, чтобы указать, что Игрок 1 удалил матч вручную. Приложение может предложить без разрешения. Кроме того, вы можете закончить матч, пока это ваша очередь.
В идеале я хочу объявить игрока 2 победителем и закончить матч.
Как вы справляетесь с этой ситуацией?
1 ответ
Я наконец нашел способ обойти это.
Если вы удалите совпадение, то позвоните GKTurnBasedMatch:loadMatchesWithCompletionHandler
удаленное совпадение не отображается (как и ожидалось). Однако оказывается, что вы все равно можете повторно загрузить удаленный матч, используя GKTurnBasedMatch:LoadMatchWithID
, если у вас все еще есть идентификатор удаленного матча.
Я думаю, что мы можем разумно предположить, что The Cheater собирается снова играть в игру; в противном случае, зачем им нести убытки? Поэтому я реализовал следующее:
- Вести таблицу локально, на устройстве, совпадений.
- При запуске вытащите список матчей местного игрока из Game Center и сравните с моим локальным списком.
Когда Читер распознает ситуацию и удаляет матч, используя интерфейс Game Center, матч удаляется из Game Center, но не из моей локальной базы данных. Когда The Cheater снова начинает мою игру, я вижу, что у них больше матчей локально, чем в Game Center.
Я тогда звоню либо participantQuitInTurnWithOutcome
или же participantQuitOutOfTurnWithOutcome
в зависимости от обстоятельств, с результатом GKTurnBasedMatchOutcomeLost
,
Это передает ход следующему игроку и записывает проигрыш для мошенника. Это не сработает, если мошенник больше никогда не будет играть в игру. (Но если они не играют, они больше не разрушают матчи, поэтому хаос сдерживается)