13

我在 android 中开发了一个简单的二人国际象棋游戏,可以使用蓝牙进行游戏。我想通过使其可以通过互联网播放来扩展它。每当玩家移动时,该移动应通过互联网传送给其他玩家。

如何使这成为可能?

我听说过 C2DM 机制。它适合我描述的场景吗?它可靠吗?

谢谢:)

4

9 回答 9

9

是的,C2DM 非常适合这种类型的游戏。这是我在自己的游戏(http://www.chesspresso.net)中使用的,它是安卓的对应国际象棋客户端。

使用 C2DM 时要考虑的事项:

  • 您不会将信息发送到设备,而是通知设备已经进行了移动。您不使用 C2DM 来传输数据,而是使用它来通知某些事情发生了变化。

  • 它适用于大多数设备的 2.2+ Android。但是,如果您想支持旧设备,则必须考虑替代方案。我正在对旧设备使用轮询。

  • 您必须请求开发人员访问权限,然后一旦您的应用准备就绪,您就必须请求生产状态。如果您不这样做,一旦发布,您将很快达到开发者状态配额!他们对生产配额非常慷慨,但你必须解释你使用它的目的,而且它也可能需要几个星期才能被接受!

  • 您的用户必须拥有经过授权的谷歌帐户,否则 C2DM 将无法工作。大多数用户将拥有与其设备关联的帐户,但有些用户没有,因此这意味着您可能需要验证帐户是否存在以通知用户。

  • 它是可靠的,但有时设备必须等待消息。有时几分钟。通常它的瞬间。

希望有帮助!

更新: C2DM 现在已被弃用,取而代之的是 Google 的GCM

此外,我强烈建议您查看其他选项,因为将自己绑定到 Google 特定 API 意味着您将无法支持外部市场。对于替代方案,我目前正在评估Amazon SNS,我还将关注Urban Airship。我可能还没有考虑评估其他替代方案。

更新:非基于 google 的推送通知的评估更新:Amazon SNS 不是这个任务的项目,而且绝大多数应用程序的 Urban Airship 都太贵了。不幸的是,所有其他替代方案也都非常昂贵,特别是如果您的应用程序(如我的应用程序)严重依赖推送。

于 2011-06-20T11:51:36.407 回答
6

这样做的一个好方法是在对等点之间使用简单的直接 TCP 连接。

如果您不熟悉 Java 上的套接字编程,请尝试以下操作:

所有关于套接字

于 2011-06-07T10:54:47.677 回答
5

另一种选择是使用某种 IM 作为应用程序的通信媒介。例如。像 GTalk 一样使用 Asmack连接到 XMPP Im。提示用户在那里为您的游戏创建一个帐户。并使用它通过 IM 发送和接收命令。这样您就无需设置中介服务器。

如果用户知道他在和谁一起玩,这将起作用。要收集用户数据并让他们搜索可用的玩家,您仍然需要设置服务器。IRC 聊天室也可能是避免这种情况的一种选择。

  • GTalk 只是一个例子。您也可以使用任何 IM 或 IRC。
于 2011-06-23T04:47:01.270 回答
3

国际象棋通常通过电子邮件进行。你可以这样做。

当然,任何集中式/联合式消息传递系统都可以工作。

更适合您使用的方法是将 jabber 客户端添加到应用程序,并让程序生成用于自动消息传递的帐户名称。您可以托管 jabber 服务器或在免费提供商上生成帐户。

于 2011-06-16T09:29:10.823 回答
3

C2DM 并非旨在传输信息,即使它们很小,例如“b4 中的马”或类似的东西。它旨在通知设备某些事情,可能是文档的较新版本或网站上的更多文章.. 像这样的东西.. 它不是为了在设备之间进行通信。而且对于实时国际象棋游戏来说,它可能不够快。

您应该寻找一种更传统的通过互联网进行交流的方式或搜索一些可以帮助您的库(我很确定存在某些东西..)。

于 2011-06-07T10:41:10.470 回答
3

恕我直言,C2DM 正是您想要的国际象棋游戏;当 oppo 轮到他时收到通知(可能是几分钟/几小时/几天后?)。我已经与一些 google android 开发人员讨论了我的游戏,他们表示 C2DM 非常适合这个。不过,您需要通过集中式服务器(嗯,不是必需的,但非常可取),因为重新同步游戏状态等可能存在问题。担心“达到极限”?好吧,首先我的 c2dm 帐户被限制为每天“仅”100,000 条消息。我猜你是在买饮料,如果你打到了!!

于 2011-06-08T12:27:20.813 回答
2

如果您了解 Python 或 Java,请使用Google App Engine 。

或者,目前有两种广泛使用的 Web 应用程序 API 样式:SOAP XML 和 RESTful Web 服务。

如果你知道 RoR,我会推荐使用 JSON/REST,因为你可以使用Phusion Passenger和 Apache 来部署你的应用程序。免费,极其简单,并使您的服务器非常可靠。

你可以,我只提到这一点是因为我的朋友一直这样做,在游戏之间使用 twitter 作为服务器。

我还发现了一个名为mages的库,看起来很有前途。

祝你好运。

于 2011-06-16T15:28:39.717 回答
1

我为我的在线 2D rpg 做了这个:http: //developingthedream.blogspot.com

基本上,使用中间人服务器来协调所有客户端之间的数据。您只需打开一个套接字并与中间服务器通信,它负责将信息传递给任何其他连接的客户端。

由于消息限制,我不推荐 C2DM,因为延迟仍然很大。您可以使用自己的服务器对其进行优化,而且您将是唯一使用该服务的人,因此您的数据将被更快地传递。

于 2011-06-22T21:16:02.317 回答
0

我认为 C2DM 不是下棋的正确方式,因为无法保证消息会被传递。您需要更可靠的数据传输方式

于 2011-06-16T21:44:31.563 回答