文/ Matchvs

在此前的《网络接入篇》中我们介绍了实时联网游戏网络接入相关内容,网络接入层开发考验的是开发者高性能网络编程的功底,即解决C10K甚至C10M的能力。本文开始介绍游戏逻辑层,由于不同游戏玩法千奇百怪,本文不涉及游戏具体的业务逻辑,只探讨在逻辑层实现中经常遇到的房间匹配和数据同步问题。

基于“房间”模式的联网对战游戏,游戏流程可分为匹配(matchmaking)和 对战(gameplay)两个阶段。匹配是指将在线”玩家中满足一定条件或要求的玩家“撮合”到一起进行游戏。对战是指匹配到同一房间的客户端(玩家)彼此建立通讯信道(一般是通过连接到指定房间服务器,并通过房间服务提供的接口)来同步玩家操作、游戏状态等数据以支持同一房间内玩家对战和互动。

房间匹配

一般来说房间匹配服务架构如下图所示,其中和房间匹配相关的通讯数据称之为“控制流”,房间内游戏对战通讯数据称之为“数据流”,显然两种不同类型的流对带宽、延时等指标容忍度不同,实际开发中应分别由不同服务器来承担。

171957x1i7ep6et6216eue.png
不同游戏的匹配策略可能不太一致,例如常见的基于场次、基于等级、随机匹配等。如果在房间创建时给房间打上一定数量的标签,我们便可以借鉴搜索引擎的倒排索引的思路来实现房间匹配算法。例如待加入的房间有: R1: [T1,T2,T3],R2:[T3],R3:[T1,T3],Rn:[T1,T2],这些房间不仅会存在与全局匹配列表中,同时还会存在每个标签索引中。

171955umyu003zry70p3lh.png
游戏类型、网络条件是同步机制选择时的首要考虑因素,对于同步频次低,例如休闲回合制游戏,鉴于数据流量小同时对游戏逻辑安全性和以及防外挂能力有较高要求,一般大都采用状态同步的方式。但对于操作要求比较高的,例如运动、赛车类游戏里涉及大量的物理逻辑运算,以及MOBA类对流畅性有更高要求的游戏,帧同步是更好的选择。

via: 游戏扶持by腾讯游戏学院


锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛