0

我开始制作多人游戏,但由于我没有经验,我尝试了不同的方法,但我觉得有些不对劲。所以,我真的需要一个关于我应该最好使用哪些平台/工具/语言/技术的建议。我必须说我不相信诸如:Photon、AppWrap、Skiller、Gamooga 等之类的东西。我不相信它们的规模会很大,也不会太贵,或者它们太大(我不是指尺寸,我是指它们有多少我不需要的东西)以满足我的需求。

首先,我将描述简化的游戏会话过程。

  1. 三名玩家开始游戏会话
  2. 每个玩家收到一个问题,并应在 10 秒内回答。
  3. 当玩家回答时,他应该能够看到任何其他玩家(如果有的话)已经给出的任何答案,并且他应该能够在给出答案后立即看到任何答案。基本上,其他客户应该实时收到任何答案,但只有在我们回答之后(以避免作弊)。如果时间到了,那么任何没有回答的人都不会得分,下一个问题会继续进行。
  4. 决定获胜者并进入下一个问题。N轮后完成游戏会话。

其次,我将解释我考虑的一些要求。

  • 游戏应在 iOS/Android/Web 上运行。这让我别无选择,只能基于 HTTP。
  • 我寻找我非常喜欢的 Google Cloud Endpoints。它有 iOS/Android/JS SDK,谷歌云平台有谷歌 BigQuery,还有很多其他很棒的东西。但是因为我需要实时回答传递,所以我不知道这是否合适(有 Channel API 但没有适用于 iOS 的客户端 SDK,人们说它不是那么好)。
  • 然后我寻找 Node.js 和长轮询(客户端的 AFNetworking),但它很难管理。我需要向客户端提供游戏状态更新(并且我需要发送增量)。这样,我需要单独跟踪每个玩家的所有更改。当玩家连接时,我应该检查是否已经有任何变化;如果是则立即发送;如果不是,则侦听“更改”事件,然后发送。最后代码看起来很尴尬,很难理解,我不知道如何使它正确。有 socket.io 可以让服务器端的事情变得更好,但同样没有用于客户端的 iOS SDK。

我不知道从这里去哪里。任何帮助将不胜感激。

4

2 回答 2

4

基于回合的架构实际上并不太复杂,因为延迟确实不是一个大问题,并且数据不会不断发送。

我会创建两个 Web 服务,一个用于匹配,另一个用于处理实际游戏。

匹配会简单地将玩家排队,当有足够的匹配时,服务会挑选一组玩家并为他们分配一个 sessionID 并将玩家传递给游戏服务。

对于游戏服务,区分客户端和服务可以处理的内容很重要。

游戏服务将存储每个 sessionID 的所有游戏信息,包括客户端。这将允许一个服务轻松地同时管理数百个游戏。当玩家回答问题时,它会在请求中使用 sessionID 将其发送到服务器。服务器将遍历会话中的客户端并将信息发送给它们。

在用户回答之前,客户端可以处理隐藏的问题。(如果您担心黑客攻击,您甚至可以加密其他问题信息)。

服务器还将跟踪会话的计时器,当计时器到期时,它将向所有客户端发送响应,并忽略任何以后的答案。一个整数可以存储在会话中,并与 sessionID 进行通信,以区分过去问题的答案。您可以在客户端上设置一个用于预测的计时器,但服务器需要成为计时器的权威以避免作弊。

于 2013-05-12T16:24:01.433 回答
1

使用您自己的身份验证令牌使用安全的 ssl https 协议来阻止作弊者。

客户端需要跟踪每个玩家的时间跨度而不是实际时间。在每个客户端的回合结束后,将各个时间跨度发送到服务器。

像这样想。有 3 个客户端,它们都像开始一轮一样轮询服务器。因为这三个可能具有不同的网络速度,所以您不知道谁将首先开始。因此,当每个客户端最终收到绿灯时,该设备的计时器就会启动,届时该设备会在该客户端设备上接收到该设备。您等到所有 3 人向服务器报告他们的时间跨度,以确定谁赢得了回合。

有一些话题只是出于游戏的逻辑而引起的关注。这里有些例子。用户身份和授权。(游戏中心)游戏数据持久性和存储。(云数据库,如 AWS DynamoDB)游戏匹配队列。(AWS SQS) 不要尝试对使用悲观并发的数据库进行此操作。比赛球员的通知已准备好供睡觉的客户使用。(AWS SNS 到 APNS 到端点(此移动设备))轮询或通知下一步。(AWS SQS 或 SNS)我不会轮询数据库。这些服务只是示例推荐。我不为亚马逊工作,它们是最容易启动和运行的,但那里可能有更好的服务。

基本上,我在您那里得到的不仅仅是一些基本托管站点上的传统 MySQL 数据库。与自己在专用服务器上创建所有基础架构相比,其中一些云服务变得非常实惠。它们的可扩展性也成倍增加。你可以做上面列出的所有事情,开始使用云服务每月不到 15 美元。最好的事情是,如果您的想法成功,您只需从管理门户轻按一下开关就可以提高阈值。这将是一个很好的问题。

于 2013-09-05T22:45:45.373 回答