【问题标题】:Couple questions about how to implement turn by turn based games in google game service关于如何在谷歌游戏服务中实现回合制游戏的几个问题
【发布时间】:2015-10-31 20:55:22
【问题描述】:

我有几个关于如何在我的应用中实现谷歌游戏服务的问题。 首先,在我检查了用户已登录并且客户端已连接后,我启动了

Intent intent = Games.TurnBasedMultiplayer.getSelectOpponentsIntent(mGoogleApiClient, 1, 1, true);
startActivityForResult(intent, RC_SELECT_PLAYERS);

向用户显示一个对话框,他们可以在其中选择对手。 从活动中获得结果后,我执行此代码

if (request == RC_SELECT_PLAYERS) {
            Log.e(LOG_TAG, "Got RC_SELECT_PLAYERS result intent");

            if (response != Activity.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;
            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 turnBasedMatchConfig = TurnBasedMatchConfig.builder()
                    .addInvitedPlayers(invitees)
                    .setAutoMatchCriteria(autoMatchCriteria)
                    .build();

            // Create and start the match.
            Games.TurnBasedMultiplayer
                    .createMatch(mGoogleApiClient, turnBasedMatchConfig)
                    .setResultCallback(new MatchInitiatedCallback());
        }

开始比赛。问题是,我挑战的对手没有收到任何要求他加入游戏的通知。那么当用户收到加入游戏的通知时,我怎样才能捕捉到这个通知并向用户展示适当的内容呢?我应该寻找哪个意图结果?

在我的 MatchInitiatedCallback 中,我检查现在是哪一回合:

public class MatchInitiatedCallback implements ResultCallback<TurnBasedMultiplayer.InitiateMatchResult> {
    private static final String LOG_TAG = "MatchInitiatedCallback";

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

        if (!status.isSuccess()) {
            Log.e(LOG_TAG, "showError() " + status.toString());
            //showError(status.getStatusCode());
            return;
        }

        TurnBasedMatch match = result.getMatch();

        // If this player is not the first player in this match, continue.
        if (match.getData() != null) {
            Log.e(LOG_TAG, "Not my turn");
            //showTurnUI(match);
            return;
        }

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

        // Let the player take the first turn
        //showTurnUI(match);
        Log.e(LOG_TAG, "showTurnGui()");
    }
}

但是这个代码甚至在我的对手选择加入之前就被执行了。 他不应该首先能够接受或拒绝游戏吗? 有人可以告诉我我这样做是否正确还是应该是这样?如果不是,应该如何正确实现?

编辑:我从文档中获取了所有这些代码。它确实展示了一些关于如何实现事物的代码示例,但没有展示代码如何组合在一起以及事物应该执行的顺序,或者如何处理通知等。

【问题讨论】:

    标签: android android-intent google-play-services android-notifications google-play-games


    【解决方案1】:

    是的,它应该像这样工作。你必须在对手真正收到邀请之前轮到你。事实上,如果你邀请多个对手,他们都必须接受邀请并在下一个对手被邀请之前轮流,这意味着你可能需要很长时间才能知道你是否真的有比赛进行。

    为避免在邀请阶段要求用户轮流,您的程序可以为每个用户进行一个虚拟轮流,以便将邀请传递给下一个用户。当所有用户都加入后,你就可以开始真正的轮流了。

    【讨论】:

    • 谢谢!虚拟转弯的想法实际上非常出色,一定会看看实现这个
    猜你喜欢
    • 2015-02-08
    • 1970-01-01
    • 2016-10-23
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多