gpt4 book ai didi

android - 关于如何在谷歌游戏服务中实现回合制游戏的几个问题

转载 作者:行者123 更新时间:2023-11-30 01:47:52 25 4
gpt4 key购买 nike

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

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

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

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

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

在我的 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 - 关于如何在谷歌游戏服务中实现回合制游戏的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33456537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com