手游对战设计方案

1       术语

1.1    术语和定义

术语 解释
硬直时间 客户端连续作移动消除时的累积时间
   

2       需求说明

2.1    实时对战

下面论述以《女巫之战》为例进行。

系统从当前在线玩家中,匹配出合适对手来。当进入挑战场景时,对战两方玩家在同一屏显示,双方的每一次游戏操作带来的变化,如:消除效果,都能实时同步到屏幕上。

如下图:来自《女巫之战》截图,即游戏对战界面会显示两个棋盘,左边为玩家自己的,右上角为对手的,游戏过程中,会同步显示血条和棋盘的变化。

2.2    离线对战

离线对战模式,在SNS游戏中是比较常见的一种PVP玩法。玩家可以随时对自己的关系链好友发起挑战,即玩家A可以对好友玩家B发起的挑战,不关心其玩家B是否在线。挑战完成后,若玩家B在线,则即时通知其被挑战的信息,若玩家B离线,则待其上线时,再通知被挑战详细信息。

2.3    半实时对战

同实时对战类似,系统也是先从当前在线玩家中,匹配出合适对手来。但是当进入挑战场景时,屏幕只显示玩家自己,不显示对手游戏界面。待这局游戏结束后,在结算界面一起显示对战结果。

还有另一个版本是,对战双方都是带角色的,游戏过程中可以显示对手玩家的角色Icon,对战过程中发生的变化,如:分数等,是实时广播给双方的。

 

3       设计实现

3.1    实时对战

实时对战的设计实现,总的来说,可分为两类,一类是服务器强同步,一类是服务器弱同步,下面详细描述之。

3.1.1     服务器强同步方案

在这个方案中,游戏逻辑的判定均放在服务端进行,无论是棋盘的初始化操作,还是游戏过程中的消除、新棋子生成等逻辑均由服务器运算,即将消除的算法放在服务器端,客户端主要作相应消除效果的表现。

进一步分析,该方案分为两种情况:

  • 阻塞同步

阻塞同步的特征是:玩家每次移动棋子作消除操作时,需要等本次操作产生的效果全部完成后(如:播放消除特效、已有棋子下落,新棋子填充等),才能作下一次移动棋子的操作。基本流程如下图所示:

 

图1  阻塞同步序列图

 

(0)客户端发起PVP匹配,服务器根据相关规则,在同一台gamesvr上匹配出对手玩家,并向两者广播一致的初始化棋盘信息;

  • 客户端A和B分别发起棋子移动请求,在收到服务器的响应包之前,客户端阻塞不允许移动;
  • 服务器分别判定两者的移动是否合法,若非法,客户端收到移动失败响应包后,让棋子置位;若合法,先响应客户端移动成功消息。然后,服务器进一步计算本次移动影响的待下落棋子和新生成待填充的棋子,以及新生成棋子中可能引发的combo棋子,计算完毕后,则一起打包分别向客户端A与B广播棋子下落消息,同时处理业务对应的逻辑,如:扣对手玩家的HP、累加自己的分数等;
  • 客户端收到服务器的响应移动结果包后,若检查通过,则处理棋子移动,并播放棋子消除特效等,若不通过,则重置棋子归位;
  • 客户端收到服务器的棋子下落和新棋子填充广播包后,分别处理A和B两个棋盘的棋子下落效果;
  • 进入下一轮棋子请求处理;

 

  • 帧同步

帧同步允许玩家在一定时间内(硬直时间),即时移动消除,即时反馈移动消除结果。当硬直时间到达时,客户端A和客户端B分别提交其在硬直时间内累积的所有移动请求,同时锁定棋盘,并等待服务器的处理结果。这种情况下,客户端和服务器都需要作消除逻辑的计算,并且两者的算法要保持一致。基本流程图如下所示:

图2  帧同步序列图

 

(0)客户端发起PVP匹配,服务器根据相关规则,在同一台gamesvr上匹配出对手玩家,并向两者广播一致的初始化棋盘信息;

  • 在硬直时间内,客户端A和B各自处理玩家的移动消除操作,此时只处理移动效果和消除爆炸效果,而棋子下落和新棋子填充不处理。硬直时间到达时,分别向服务器提前期间所有的请求移动信息;
  • 服务器分别判定两者的移动是否合法,若非法,客户端收到移动失败响应包后,让棋子置位;若合法,先响应客户端移动成功消息。然后,服务器进一步计算本次移动影响的待下落棋子和新生成待填充的棋子,以及新生成棋子中可能引发的combo棋子,计算完毕后,则一起打包分别向客户端A与B广播棋子下落消息,同时处理业务对应的逻辑,如:扣对手玩家的HP、累加自己的分数等;
  • 客户端收到服务器的棋子下落和新棋子填充广播包后,分别处理A和B两个棋盘的棋子下落效果;
  • 进入下一轮处理;

 

3.1.2     服务器弱同步方案

在该方案中,游戏消除逻辑主要放在客户端进行,即棋盘初始生成算法、消除检查算法、棋子下落与新棋子生成算法等均由客户端来控制,而服务器主要作消息转发与一些简单的判定,如:对局结束的条件等,基本流程图如下所示:

图3  弱同步序列图

 

(0)客户端发起PVP匹配,服务器根据相关规则,在同一台gamesvr上匹配出对手玩家,并向两者广播约定的对局开始时间,如:播放开场动画(3s)后开始;

  • 客户端各自判定玩家的移动棋子操作,判定能过,则表现相应的消除效果、棋子下落与新棋子填充过程,同时将本次消除信息打包发至服务器;
  • 服务器收到客户端的消除信息后,分别转发至其对应的玩家,同时处理业务对应的逻辑,如:扣对手玩家的HP、累加自己的分数等;
  • 客户端收到对手玩家转发来的消除信息后,在其对手棋盘上表现相应的消除过程与效果;
  • 如此循环往复,直至对局条件达到,如:某一方玩家HP<=0,或游戏对局时间到等;

3.1.3     小结

对比以上两类实时对战的实现方案,可以得出如下结论:

  • 强同步方案一般适用于需要服务器作严格检查判定的场合,即游戏业务上,需要严防玩家作弊的情形。其中,阻塞同步方案在MMORPG中应用较多,如:战斗技能系统等;帧同步方案在ACT中经常使用,如:双人格斗游戏中的动作同步等;
  • 与强同步方案有所不同,弱同步方案所应用的游戏,往往更关心玩家的单机体验手感,而不是数值本身,因此,对于数据校验的要求也会低一些,如:Puzzle类休闲游戏;
  • 强同步方案的实现成本一般要高于弱同步方案,并且,由于强同步方案往往需要服务器实现比较复杂的逻辑运算,因此,其服务器的性能开销要较弱同步方案的大一些,相应地,服务器的承载能力就会较弱同步方案的低;

3.2    离线对战

离线对战在实现层面需要关注点是多点数据的修改问题。即同一时刻,某个玩家可能会被他的多个好友同时发起挑战,而在挑战过程中,可能会同时修改对战双方的玩家数据。

多点数据的修改问题,目前都有比较成熟的解决方案,具体方案需要根据业务需求实际来选择:

  • 全局逻辑锁方案

实现要点是用一个单独的locksvr来保持数据修改时的同步。即玩家A发起对玩家B挑战,gamesvr在get玩家A和玩家B数据的同时,会lock这两者的数据。此时,若还有其他玩家需要get这两个玩家数据时,就会get失败,即锁冲突。这样就保证了,每次修改只会有一个玩家在操作。

该方案的优点:

  • 好处在于单独的locksvr可以设计得比较通用,多个项目可以复用,一定程度上可以提高开发效率;
  • locksvr逻辑上比较清晰,部署也比较方便。目前微连等项目就是采用的架构组提供的locksvr组件;

不足的地方:

  • 当交互比较频繁时,locksvr的机制可能会导致比较多的冲突,从而会影响玩家的游戏体验。这个问题在webgame中,玩家可能不会太敏感,这跟玩家的操作习惯有关,当冲突发生时,玩家一般刷新一下页面操作即可恢复正常。而在手机游戏中,需要根据具体游戏业务来评估;

 

  • 增量修改方案

实现要点是gamesvr修改玩家数据时,只提交修改的相对值,各个gamesvr的修改数据请求汇总至一台中心服务器(热点服务器)进行,因为只有一个地方修改,故修改数据自然会保持队列同步。

该方案的优点:

  • 最大的好处是不会产生修改引发的冲突问题;
  • Gamesvr为无状态服务器,逻辑会比较简单;

不足的地方:

  • 要求修改的数据结构比较简单且单一,否则会导致中心服务器的逻辑处理复杂度成倍增加;
  • 由于所有数据的修改均在中心服务器进行,故其有单点风险;

 

(三)Compare And Swap

实现要点保证每次提交的操作,只有一个是成功的。即gamesvr修改玩家数据前,先获取该玩家的cas值,并在修改数据时把cas值带上。数据到达DBSvr时,会检查cas值的合法性,检查通过,则允许修改数据,同时将当前cas值加1。此时,若有其它gamesvr提交同一玩家的修改请求时,会发现cas值与当前的不匹配,则拒绝此次修改,同时,返回一个错误给这个gamesvr的请求。

该方案的优点:

  • 它其实是前两种方案的一个折衷方案,相对于全局锁的强锁定(get数据就会锁定),它只会在set数据时判定数据是否冲突,即有玩家A修改玩家B数据时,玩家C依然可以get玩家B或玩家A的数据,不会引发冲突问题;
  • 该方案同样可以做到通用;

不足的地方:

  • 依然有强交互时,可能有比较多的冲突问题;
  • 需要有DBsvr支持该CAS机制;

注:目前公司的CMem组件支持CAS机制;

 

3.3    半实时对战

半实时对战本质上还是在线玩家之间的PK,只是客户端在表现手法上,与实时对战有所区别。以《女巫之战》为例,若换成半实时对战,则对战开始后,对战界面只显示玩家自己一个人的棋盘,对手玩家只显示一个Avatar Icon和血条。

半实时对战的实现方案可参考实时对战中的弱同步方案。

4       我们的选择

上面讨论了三类对战需求,在实现层面上,可供选择的设计方案。并且分析了每种设计方案的优缺点和适用场合。咱们微项目具体选择哪种实现方案,需要根据特定的业务需求来决定。选择原则是:方案满足需求,实现代价最小

每月自评之四:2013年4月

(一)我读

     本月阅读过的书籍:

     (1)《OpenGL超级宝典
          1)推荐指数:四星半
          2)简评:学习OpenGL最佳入门读物,并且书中刚开始的两章,对计算机图形学的基础知识也作了非常简要地介绍,对于想要夯实游戏编程的基础知识的同学来说,此书的确是一本佳作!
          1)推荐指数:五星
          2)简评:不愧为amazon五星推荐书籍。无论是学习Unity入门知识,还是再想全面了解Unity基础知识,本书都是非常好的选择。阅读过程中,最好是下载好配套的asset资源,这样在边看边练习,效果更佳!
(二)我看
     本月看过的电影:
     (1)《国家公敌 Enemy of the State
          推荐指数:四星半
          推荐理由:故事题材与演技俱佳
     (2)《成事在人 Invictus
          推荐指数:四星
          推荐理由:故事虽然有主旋律的嫌疑,但的确是真实的史实。而且,由两位super star来主演(两位恰好是俺最喜欢的好莱坞演员:Morgan Freeman和Matt Damon),为影片增色不少,虽然也有人说,摩根与曼德拉不像,但这都是小小瑕疵,无伤大雅!
     (3)《登堂入室 Dans la maison
          推荐指数:四星
          推荐理由:不错的剧本,值得反复多看几遍!
          推荐指数:三星半
          推荐理由:这是一部带有暗喻性质的典型主流恐怖片,收获的不是影片本身,而是其所讽刺对象带来的启示。
          推荐指数:三星
          推荐理由:三星是给凯奇的。
(三)我听
     (1)【东吴相对论
               依然订阅podcast,依然占据我吃饭、走路、排队等零碎时间…
     (2)【Black Cat】系列之《King Arthur and his Knights》
               被亚瑟王的传奇经历所吸引,发现自己慢慢喜欢上西方魔幻故事了
     (3)【Black Cat】系列之《Oliver Twist
               可怜又幸运的Oliver,不朽的名著。
(四)我用
    (1)【vs2012】
          本周用vs2012替换了之前用的vs2010,刚开始使用,发现vs系列至此版本已然修成神器,不但编译速度比之前版本快很多,各种提升开发效率的辅助功能也增强很多,可以抛弃vc助手等工具了
     (2)【Win7桌面小工具】
          用win7这么久了,还是第一次用这东东,说来也惭愧。在本本上增加了日历、时钟、天气预报等工具,既美观又实用
(五)我藏
     本月摘录收藏的各类帖子和文章:
     (1)技术:12篇
     (2)产品:7篇
     (3)行业:4篇
(六)我做
          用U3D做一个FPS小demo,还未完工,但很有趣!
(七)我玩
     (1)【大掌门】
          玩至20级,刚开始玩时,第一印象不错,但玩到这个阶段觉得整个游戏的系统设计方面还不是特别丰富。只是接下来过关成长,必须要花money才能进行下去了,连每日任务都木有。客户端快速更新的设计对玩家很友好(即每次更新无需到appstore下载)。
     (2)【王者之剑】
          蓝港在移动平台的首作,传闻在ios和android月流水均过千万。玩过之后,感觉的确不错。无论是玩法内容,还是游戏本身的品质,个人感觉都排在目前手游市场的前列。游戏是用U3D开发,难怪能这么快在这两个平台均同时推出。目前感觉唯一不足的是,客户端不太稳定,我在iPad1上玩,基本上10左右就会崩掉一次,或许是我的Pad out了吧,有朋友有iPhone4上玩,说crash的问题倒没那么严重。
     (3)【刺客信条3】
          传说中的3A大作,终于利用小长假的时间体验了一把。玩了三章内容,整体感觉很好。每个场景、背景音乐、主角/Npc动作、战斗体验、音效等待、都是精心设计,能将你完全带入至游戏世界中。加上这期的游戏背景也是我感兴趣的美国独立战争期间,因此,这款大作的确值得游戏爱好者好好体验!
     (4)【足球经理2013】
          作为近十年的Fmer,一直在玩盗版,说起来真是惭愧之至。本月终于决定入手正版,看各种推荐,还是选定淘宝上Steam的一个代理商,卖家服务很热情,付完款后,就给了Steam的SN,然后去Steam下载安装,花了一个半小时左右,终于可以玩了。虽然花了RMB240多银子,但绝对物超所值。这一代的FM比之前的数据更加真实,AI更加合理。3D比赛面面的改进虽然不如官方宣传的那样好,但还是可以看有改进的地方。用一句来概括就是:更加真实!我想,这是任何模拟经营类游戏最重要的core play!
(八)我思
       本月经历了转岗这件大事,前后几个月的纠结终于也划上了句号。
       皮皮的出生,是促使我下决心转岗的很重要的原因。这近两年来,长期与老婆分隔两地,真是委屈她了!无论是怀孕期间的她张罗着装修房子,还是皮皮出生后,她细心呵护着小Baby,都是她独自一人在承担,我却没有为她分担什么,心中愧疚有加!
       幸运的是,转岗过程还算比较顺利,两边部门的领导都给予了理解和支持,在此,也再次感谢了!
       新项目,新同事,新挑战!
       为自己加油!