如何基于Google Play游戏依次创建计算机对手

时间:2014-09-30 16:04:48

标签: android google-play-services

我目前的Android应用程序使用谷歌游戏服务作为回合制游戏。它已经发布并且工作正常,但是我想添加玩家与“真正的”人对抗的“计算机”对手的能力。这可能吗?这是“合法的”吗?从搜索Google Play服务文档和代码来看,它似乎不可能。任何一个人都知道不同吗?

2 个答案:

答案 0 :(得分:3)

如果我的答案过于简单,请道歉,但如果您希望用户与计算机对战,则不应使用Google Play服务。

您的游戏逻辑不应该了解Google Play服务,而应该了解对手及其行动。这样,如果这些动作来自Google Play服务或是在客户端生成,那么它就不会有所作为。

答案 1 :(得分:1)

我将回答将一个计算机播放器添加到与一个或多个人类玩家匹配的更一般的问题。从根本上说,如果只有一个人类玩家或多个人,则无关紧要。 Play Games确实强加了所有比赛中必须至少有2名(人类)球员的限制。我稍后会回到这个问题。

是的,有可能。您需要在游戏逻辑和Play Games API之间实现清晰的分离。您的代码应该结构化,以便您可以轻松创建替代UI而无需触及您的核心游戏类(例如,想象一下为您的游戏创建命令行界面;它应该很容易)。调整思路也很重要。游戏中的玩家无需与Play游戏服务中的参与者进行一对一的映射。游戏中的转弯不必与Play游戏服务中的转弯进行一对一的映射。

对于 与Play Games API进行交互的图层,只关注自己的玩家。每当你拨打takeTurn()时,你应该给它一个人类玩家的参与者ID。根据Play Games,它永远不会是电脑。还要记住,转弯并将下一个参与者ID设置回刚刚转弯的同一个玩家是合法的(这在几种情况下很有用)。

显然,计算机可以在你的游戏中轮流使用,那么你如何根据Play游戏调整它与它永远不会轮到你的事实呢?通过认识到两个转弯的概念是不同的概念。这是一个例子:

人类玩家创造了一个游戏,轮到他们(根据你的游戏状态并根据Play游戏)。每次他们轮流执行子操作时,您都会调用takeTurn()并提供人类玩家的参与ID。一旦他们完成游戏,您再次致电takeTurn(),但需要提供下一位玩家的参与者ID。如果下一个玩家是人,只需提供他们的ID。如果下一个玩家是计算机,请再次提供人类玩家的ID。然后立即让设备播放电脑播放器。请注意,Play Games认为这是人的转变,但是你的游戏认为它是计算机的转向。完成后,您需要再次致电takeTurn()。就像上次一样,如果下一位玩家是人,请使用他们的ID。如果下一个玩家是另一台计算机,请使用最后一个人类玩家的ID(登录到设备中的人类玩家将代表他们开启计算机)。

换句话说,人类的设备负责人类的转变以及跟在他们之后的所有计算机玩家的所有转弯(直到到达另一个人类玩家)。在拥有一台人类和一台或多台计算机的游戏中,根据Play游戏的说法,它总是始终。根据你的游戏逻辑,转弯像正常一样交替(一些玩家是由计算机控制的并不重要)。

现在,回到Play游戏需要至少两个玩家的问题。您可以通过添加自动匹配播放器来回避问题。因为您实际上从未将下一个参与者ID设置为null(这是您用于自动匹配玩家的参与者ID),所以其他人不会真正加入。我非常确定你可以完全完成一场比赛,而不会让自动匹配球员加入(你必须进行实验)。这可能允许也可能不允许,您也必须对此进行研究。即使不是这样,至少你可以在至少有两个人的游戏中拥有电脑控制的玩家。