如何在 play-services-turn-based 方法中传递分数参数?

How to pass score parameter in play-services-turn-based methods?

我刚刚开始探索 google-play-services-turnbased API。到目前为止,我已经成功地创建了一个匹配项。但是从文档中我无法弄清楚玩家在完成回合后的得分。

这是我的 onClickStartMatch 方法。

public void onStartMatchClicked() {
        Intent intent =
                Games.TurnBasedMultiplayer.getSelectOpponentsIntent(mHelper.getApiClient(), 1, 7, true);
        startActivityForResult(intent, RC_SELECT_PLAYERS);
    }

这是我主要的 onActivityResult 方法 activity class.

    if (request == RC_SELECT_PLAYERS) {
        if (response != RESULT_OK) {
            // user canceled
            return;
        }

        // Get the invitee list.
        final ArrayList<String> invitees =
                data.getStringArrayListExtra(Games.EXTRA_PLAYER_IDS);

        // Get auto-match criteria.
        Bundle autoMatchCriteria = null;
        int minAutoMatchPlayers = data.getIntExtra(
                Multiplayer.EXTRA_MIN_AUTOMATCH_PLAYERS, 0);
        int maxAutoMatchPlayers = data.getIntExtra(
                Multiplayer.EXTRA_MAX_AUTOMATCH_PLAYERS, 0);
        if (minAutoMatchPlayers > 0) {
            autoMatchCriteria = RoomConfig.createAutoMatchCriteria(
                    minAutoMatchPlayers, maxAutoMatchPlayers, 0);
        } else {
            autoMatchCriteria = null;
        }

        TurnBasedMatchConfig tbmc = TurnBasedMatchConfig.builder()
                .addInvitedPlayers(invitees)
                .setAutoMatchCriteria(autoMatchCriteria)
                .build();

        // Create and start the match.
        Games.TurnBasedMultiplayer
                .createMatch(mHelper.getApiClient(), tbmc)
                .setResultCallback(new MatchInitiatedCallback());
     }

这是我的 MatchInitiatedCallback class

public class MatchInitiatedCallback implements
        ResultCallback<TurnBasedMultiplayer.InitiateMatchResult>,OnTurnBasedMatchUpdateReceivedListener {

    @Override
    public void onResult(TurnBasedMultiplayer.InitiateMatchResult result) {
        // Check if the status code is not success.
        Status status = result.getStatus();
        if (status.isSuccess()) {

            Log.d("turnbased","Turn Based Match Initiated successfully with result: "+status.getStatusMessage());
            return;
        }

        TurnBasedMatch match = result.getMatch();

        // If this player is not the first player in this match, continue.
        if (match.getData() != null) {
            showTurnUI(match);
            return;
        }

        // Otherwise, this is the first player. Initialize the game state.
        initGame(match);

        // Let the player take the first turn
        showTurnUI(match);
    }

    public void showTurnUI(TurnBasedMatch match){
        if(match.getStatus() == TurnBasedMatch.MATCH_STATUS_ACTIVE){
            if(match.getTurnStatus() == TurnBasedMatch.MATCH_TURN_STATUS_MY_TURN){
                turnBasedMatchData = match.getData();

                Games.TurnBasedMultiplayer.takeTurn(mHelper.getApiClient(),match.getMatchId(),  "score:400".getBytes(Charset.forName("UTF-16")),null).setResultCallback(updateMatchResult());
            }
        }
    }

    public void initGame(TurnBasedMatch match){
        Games.TurnBasedMultiplayer.takeTurn(mHelper.getApiClient(),match.getMatchId(),"score:605".getBytes(Charset.forName("UTF-16")),match.getParticipantId(Games.Players.getCurrentPlayerId(mHelper.getApiClient()))).setResultCallback(updateMatchResult());
    }

    public ResultCallback<TurnBasedMultiplayer.UpdateMatchResult> updateMatchResult(){
        return null;
    }

    @Override
    public void onTurnBasedMatchReceived(TurnBasedMatch turnBasedMatch) {
        Log.d("turn-based","Player played his turn");
    }

    @Override
    public void onTurnBasedMatchRemoved(String s) {

    }
}
}

如果有人能正确解释如何从头开始继续游戏、何时提交分数以及如何提交分数,也会很有帮助。

想通了。这就是您可以做到的。

public byte[] persist() {
        JSONObject retVal = new JSONObject();

        try {
            retVal.put("turnCounter", 2);
            retVal.put("score1",100);
            retVal.put("score2",200);

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String st = retVal.toString();

        Log.d(TAG, "==== PERSISTING\n" + st);

        return st.getBytes(Charset.forName("UTF-8"));
}

Games.TurnBasedMultiplayer.takeTurn(mHelper.getApiClient(),match.getMatchId(),persist(),null).setResultCallback(updateMatchResult());