如何在基于play-services-turn的方法中传递得分参数?

时间:2015-06-29 16:26:43

标签: android google-play-services

我刚刚开始探索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方法。

    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类

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) {

    }
}
}

如果有些人可以正确地解释如何从一开始就开始游戏以及何时提交分数以及如何进行游戏,那将会很有帮助。

1 个答案:

答案 0 :(得分:0)

想出来。这就是你如何做到的。

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());