用于Android / iOS回合制棋盘游戏的游戏服务器

时间:2011-02-12 17:38:14

标签: android iphone multiplayer

我正在编写iPhone游戏,我想创建一个在线多人游戏模式。在未来,这个应用程序将移植到Android设备,所以我想知道如何创建游戏服务器?

首先,我应该选择哪种语言?如何使服务器能够与用objective-c和Java编写的程序进行通信?

然后,如何有效地做到这一点?如果我通过客户端打开一个套接字是好的(会有2个)吗?我应该向服务器发送什么样的信息?对客户?

感谢您的时间。

2 个答案:

答案 0 :(得分:8)

编辑你将如何进行大型多人游戏?

嗨西里尔,

正如您所注意到的,两个主要考虑的因素有两个:

  1. 发送到服务器的信息

  2. 发送给客户的信息

  3. 只有一种类型的信息要发送到服务器:用户输入。如果你不这样做,当流氓客户端试图向你的服务器发送虚假数据时,你会遇到令人头疼的问题(比如说“我的坦克现在有100 000 000盔甲”)。 / p>

    然后您发送给客户端的内容取决于您,但完全有可能只向客户端发送其他玩家的输入。这是使绝对最小值和小带宽使用成为可能的方法。这就是暴雪的魔兽争霸3 这样的游戏正在做的事情。作为奖励,这会产生微小的重播文件(因为你需要做的就是重播游戏所需要的是每个玩家输入发生的时间(和输入))。

    将另一个玩家的输入发送到客户端的一个缺点是,这意味着每个客户端都存在所有游戏的逻辑。对于某些游戏,这可能是一个问题,因为人们可能会通过逆向工程游戏和发现缺陷来作弊。通过仔细,可控,随机化可以缓解此问题(除了输入+时间,您发送输入+时间+ 随机性,其中随机性无法由客户端提前猜测

    另一种方法是在服务器端进行一些逻辑计算。然后,显然,您需要将服务器计算的结果发送到客户端。做得正确,这有利于防止作弊不可能的盗版(例如没人设法在实体经济中玩魔兽世界 - 也就是说,真正的暴雪服务器 - 使用伪造的许可证密钥。)

    关于基于手机回合制的游戏服务器:只看一款畅销的回合制游戏就是这样做的。以Uniwar为例:适用于iPhone和Android。游戏服务器“当然是用Java编写的。”

    要实现的一件事是,像您计划编写的游戏完全是确定性的:如果您无法轻松编写重放代码,或者您无法轻松复制任何导致逻辑错误的情况,你做错了。

    请注意,确定并不意味着你不能向你的玩家添加看起来像随机性的东西:简单地说,随机性也应该是确定性的(例如,通过简单地为每个游戏使用不同的种子+时间玩家输入是伪造的随机来源。)

答案 1 :(得分:3)

对于提出的问题,这是一个横向解决方案。您可以选择使用Gamooga(http://www.gamooga.com/),因此您不必担心服务器端,套接字,传输逻辑等。您可以专注于您的游戏逻辑并开发它而不是所需的系统东西。

Gamooga为您提供了一个可在游戏中使用的实时通信平台。您可以将服务器端消息处理脚本上传到Gamooga的集群,并在您的应用程序中使用其iOS API来发送和接收来自/到服务器端的消息。服务器端由Gamooga自动扩展和管理。您可以下载SDK并开始使用SDK中的演示。

披露:我是Gamooga的创始人,仅在与该问题相关时作出回复。