簡體   English   中英

玩家沒收GKTurnBasedMatch

[英]Player forfeiting a GKTurnBasedMatch

假設我有一個有2個玩家的GKTurnBasedMatch,而第二個在他的回合內被沒收。 我應該如何向第一個用戶顯示該游戲已結束? 還是讓第一個玩家以編程方式退出?

另一個GKTurnBasedMatch-這次有12位玩家。 我不明白這件事,比如說玩家7退出了,這意味着當輪到他時,它將卡住游戲,我需要以編程方式結束與所有用戶的比賽嗎? 還是GC會相應地重新編號其余的球員?

提前致謝!

您需要將以下內容之一發送到GKTurnBasedMatch對象:

- (void)participantQuitInTurnWithOutcome:(GKTurnBasedMatchOutcome)matchOutcome
                        nextParticipants:(NSArray *)nextParticipants
                             turnTimeout:(NSTimeInterval)timeout
                               matchData:(NSData *)matchData
                       completionHandler:(void (^)(NSError *error))completionHandler

- (void)participantQuitOutOfTurnWithOutcome:(GKTurnBasedMatchOutcome)matchOutcome
                      withCompletionHandler:(void (^)(NSError *error))completionHandler

呼叫participantQuitOutOfTurnWithOutcome者QuitOutOfTurnWithOutcome會將轉牌事件發送給比賽中的其他玩家,以通知他們該玩家已退出。 match.participant中的玩家對象將具有matchOutcome GKTurnBasedMatchOutcomeQuit

我已經創建了一個基於游戲工具回合的比賽示例項目 ,該項目說明了不按順序退出和依次退出的情況。 看一下GameModel.swift文件中的quit()函數,看看如何調用它們:

func quit(completionHandler: @escaping (Error?) -> Void) {
    if isLocalPlayerTurn {
        let next = nextParticipants()
        let data = NSKeyedArchiver.archivedData(withRootObject: self)
        match?.participantQuitInTurn(with: .quit, nextParticipants: next, turnTimeout: 600, match: data) { error in
            completionHandler(error)
        }
    } else {
        match?.participantQuitOutOfTurn(with: .quit) { error in
            completionHandler(error)
        }
    }
}

當然,檢查是否有人獲勝也很重要。 這是來自同一文件的checkForWin()函數。

func checkForWin(completionHandler: @escaping (Bool, Error?) -> Void) {
    guard let stillPlaying = match?.participants?.filter({ $0.matchOutcome == .none }),
        stillPlaying.count == 1,
        stillPlaying[0].player?.playerID == currentPlayerID
        else {
            return completionHandler(false, nil)
    }

    stillPlaying[0].matchOutcome = .won
    let data = NSKeyedArchiver.archivedData(withRootObject: self)

    match?.endMatchInTurn(withMatch: data) { error in
        print("***** match ended")
        completionHandler(true, error)
    }
}

在整個示例項目的上下文中,所有這些都更有意義。 希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM