当前位置:首页 » 操作系统 » arpg源码

arpg源码

发布时间: 2022-05-03 02:31:24

Ⅰ 跪求ARPG页游全套源代码,不是那种服务器架设端的,是整套的开发文档,仅自己学习研究用,不涉及版权。

你想自己做一款网页游戏吗?那你怎么不做一代宗师 这款网页游戏呢!

Ⅱ RPG真三国无双或真三3.9D和dota的区别

真三国无双玩家与DOTA玩家历来是水火不容,DOTA玩家骂真三国无双抄袭DOTA,使用DOTA的源代码,而真三国无双的玩家则更过激,骂DOTA玩家崇洋媚外,还口出狂言:“是中国人,就玩真三国无双!”殊不知,魔兽争霸是美国暴雪公司的,真三国无双是日本光荣公司的。而这张地图也不一定就那么有中国意味。当然,这些都无关痛痒,本文仅把两张地图做下比较,发现一下其中的不同。

需要说明的是,DOTA这张图要远先于真三国无双这张地图存在,经历了诸多版本,目前定格再v6.53,可以肯定,真三国无双无论在英雄技能还是物品合成方面,都在一定程度上借鉴了DOTA的元素,但又融合了自己独有的系统,而并不像一些玩家所说的单纯抄袭。目前虽然已经快出到v5.0,但大家依旧对v3.9D这个经典版本相当钟爱,所以,本文将以DOTA v6.53和真三国无双 v3.9D这两个版本作为范本进行比较。

(2)一血系统和杀人系统
“First Blood”就是第一滴血,拿第一滴血就是第一个击杀英雄,还可以得到额外的200块,此时DOTA的语音提示系统开始运作。成为一血就是第一个被击杀的英雄,没有额外的惩罚。如果一名英雄连续击杀英雄后,杀人系统开始运作。从最基础的“大杀特杀”到最终的“超越神”,连续杀人没有任何奖励,而终结杀戮的人则可以得到额外的金钱收入。这大大增加了的趣味性,也增加了游戏的公平性。比如如果一个法师在前期杀的太厉害,一旦被一个后期英雄击杀,那么很有可能这个英雄就会成长起来。而且一旦一名英雄连续杀人,很容易引起敌方阵营的注意,大家都会去终结他,正应了那句话“出来混,早晚是要还的!”
(二)英雄技能
英雄是两张图的核心,也就是玩家要直接控制的单位。
首先从英雄数量上说,真三英雄数量明显偏少,而且还有很多英雄的观赏性要明显大于实用性。因此直接导致的一个结果就是在绝大多数比赛中,英雄阵容相当单一。
蜀国:诸葛亮,关羽,张飞,赵云,魏延。
魏国:司马懿,郭嘉,典韦,曹仁,荀彧(其实就是荀,根据列传可以看出)
大多数状况下大家拼的还是操作。随着版本的革新,这一状况有所改变,但英雄依旧是热门英雄,新增英雄,强就上,不强依旧是万年的板凳。比如糜竺就是后起新秀。
英雄的稀少带来的还有战术的单一。正式比赛中,蜀国的目的很明显,就是要保赵云,保关羽,打后期。而魏国三法一控,曹仁到后期也只是经验,因此魏国想打后期是不可能的,就要借助前期双法的优势速推。辅助以曹仁的车子。10场比赛9场如此。不同的只是细节和不同队伍队员间的配合。反而路人战中更有趣味一点。
其次,从属性上说,真三中的英雄成长属于极端属性成长,比如真三中的智力英雄,智力成长要远远大于其他属性的成长。形成的结果就是力量英雄高力量,血厚。敏捷英雄高敏捷,高护甲,高攻速。智力英雄智力高,魔法多。极端的属性成长,就使得英雄落入力量克智力,智力克敏捷,敏捷克力量的死循环之中。更何况真三中的敏捷英雄以远程的居多,就使俗称的“弓手”混得更加凄惨。
DOTA中似乎显得好一点。正如前文所说,DOTA的英雄成长很另类。比如食人魔法师主属性是智力,可力量成长相当高,25级时的力量可以成长到99,比许多力量英雄还要高。又比如幻影长矛手的主属性是敏捷,可是智力成长却远高于其他。这使得英雄可以不按常理来使用,甚至有些力量英雄都可以成为法师!
其次,真三的法师也注定是悲剧。这主要源于技能设计的不合理。众所周之,法师是靠技能杀伤,技能升到满级伤害就固定。而英雄的血量则可以随着等级的提升而提升,因此越到后面对法师越不利,也就形成法师在前期相当强大,到后期被虐待的命运。加之真三中几乎所有法师的终极技能随着等级的提升不仅耗魔增大,而且冷却时间几乎没有太大变化或者有所增长,以及针对法师的辅助性道具的缺乏,使得法师更加处于不利的地位。而与之相比,DOTA中的法师不仅有大量后期英雄存在,比如沉默术士以智力作为额外伤害,也就是说随着智力的成长,沉默术士的输出也更加可观。而且还有大量的适合法师的道具。比如增加终极技能威力的蓝杖,刷新技能冷却时间的刷新球。以及新物品中的紫苑之杖和希瓦之守护(俗称“冰甲”)等等。
再次,具体到蜀魏两国来说,也是相当不平衡,蜀国的关羽,张飞,赵云是公认的强大,同样6级的情况,魏国英雄单挑的话几乎无人能与之抗衡,另外,整张图上的唯一一个全图技能也给了诸葛亮。

敏捷英雄方面无论是马岱,黄忠还是黄月英,都有转化为DPS的潜质,因此蜀国无论什么阵容,总会有一两个后期英雄的存在,更多的打的是后期。
魏国则显得凄惨了一些,力量英雄中能成为肉盾的少之又少,勉强能拿得出手的只有曹仁,许褚而已,但是技能的设置又让他们无法成为战场的主力。敏捷英雄只有张郃与于禁是弓手,其余大多数是近战,像甄姬与服部半藏也只能靠偷袭取胜,想要正面与蜀国抗衡简直是不可能。在路人战中,也许甄姬能在后期嚣张一下,在真正的高手对决中,以甄姬的属性成长,不被虐待死才怪呢。唯一的亮点也只有司马懿,郭嘉,荀彧等一批王牌法师的存在。魏国的法术杀伤相当强大,能在前期很好的克制蜀国后期英雄的成长,因此魏国要取胜第一要靠英雄间的配合,第二也就是速战速决,如果发现推进的速度越来越慢,那么魏国里失败也就不远了。蜀国可以不上关羽,不上赵云,不上诸葛,但魏国却不能不上司马,不上郭嘉,这是魏国的悲哀,其实也是真三的悲哀。阵容的单一使得游戏的趣味性大大降低,大家唯一能做的只是在配合和杀人间寻找快乐。

最后就是技能,真三的技能很中规中距,都很朴素也很使实用,诸葛的卧龙射线和司马的星落都能称得上华丽了。相比之下DOTA中,英雄技能还算好一些。不但华丽,也很有特色。比如一些力量英雄的技能相当实用,使之不单单成为肉盾,更成为转化为力量法系,如沙王,撼地神牛等等。还有强大的后期法师存在,如沉默术士,死亡先知等等。还有如屠夫的肉钩和女祭司的月神之箭的此类施法距离能突破1000的技能。盲射,盲钩,使得很多比赛出现惊人的高潮,令人折服。

因此,站在公平的角度说,DOTA的趣味确实要远远大于真三。举个很简单的例子,现实中,有很多玩家从真三转玩DOTA,可是却没有DOTA玩家跑去玩真三,这是为什么?原因只是在于你可以不了解DOTA,不屑于玩DOTA,但如果真正玩一下的话,就会真正的喜欢上他。这是真三所不能比拟的。

(三)物品合成
物品合成是两张图所共有的,但是DOTA的物品不论是质量还是数量都要优于真三很多。首先,需要说的是,在真三中,像消耗性物品的购买CD就很叫人费解,更何况CD时间还很长,通常大家会让法师先买药,可在路人中,大家一起挤在一起抢药的情况也不是没有,边路的话如果想把钱全换成药的话,至少要错过一波小兵。另外移动速度偏慢,回城卷轴和远程传送道具的缺乏令英雄往往在前线与基地的奔波间浪费时间。
其次,就是物品的稀缺,比如在真三国中,无论哪个法师,孙子兵法是必须要出的,除了孙子兵法就是风暴之杖,要说出别的东西,没有也没用。一场比赛,诸葛出个飞鞋,一本孙子,一个巫术权杖,基本也就没什么了。如果诸葛出个血斧没有意义也会被人家耻笑。
另外,真三中有很多基础性物品,但只有很少一部分能得到利用,其他许多都在闲置。更重要的是古物商店也是如此,除了孙子,青囊,孟德,银剑以外,根本没有人用其他物品,除此以外的物品根本就是多余。物品的单一也是造成真三战术单一的原因之一。

DOTA中,物品分为四个等级,以及新物品。每个商店都有11件武器道具。一级物品大多合成部件低廉,性价比很高,在一定程度上,实用性和使用频率最高的物品。而4级物品中,大多数就是所谓的“神装”。新物品是自v3.7以来新增的,到现在的版本新物品基本已经把商店填满。但无论哪个商店,针对力量,敏捷,智力3种类型英雄的物品还是很平均的。同样是法师,由于道具的存在,同一个法师可以打成主攻的,也可以辅助的,即便一个奶妈只要打出良好的装备一样是杀人利器。最好的例子就是全能骑士,一个标准的奶妈,如果打成辅助的话,可以出风杖(类似于风暴之杖),羊刀(类似于巫术之杖),还可以出刷新球,用两次守护天使锁定战局。除此之外,还可以出死灵书,辉耀,这样的全能骑士相当强悍。

最后真三中,能称得起光环类道具的只有护卫心得,还是万年的板凳道具。相比而言在DOTA中,梅肯斯特(补盾),吸血鬼的祭品,强袭装甲,希瓦之守护,都是很优秀的光环类物品。当小兵被加上数个光环后,那种强悍是无法用语言形容的。

通过上面的文章,大家应该可以看出两张图的不同。对于真三国无双来说,英雄的稀少,物品的缺乏,战术的单一是致命伤,而小兵的强悍,属性成长的底下,更加依赖玩家的操作与耐心。因此,真三更多时候是在考验玩家的细节操作和团队精神以及对时机的把握。

而DOTA中,英雄众多,物品丰富,地图制作精良,更考验玩家的创造性。比如对地图阴影的利用,对地形的利用,以及如屠夫盲钩的那种意识。如果比团队配合的话,不是不重要,只是没有真三那种牵一发而动全身的紧密性。有些后期英雄甚至可以靠一个人翻盘,也就有了传说中的RPG英雄的存在。

最后,很有意思的是,曾经看过一个帖子抱怨:“真三的玩家骂人的技术更加高,出个冷门英雄要骂,出件冷门的武器也要骂,杀不到人要骂笨蛋,杀了人又要骂抢人,真不明白玩真三到底图什么。”其实说句公道话,正是由于真三的英雄少,物品少,战术少,才导致大家很难开拓出新的一片天地,只有在固有的模式中去寻找快乐,因此大家不妨多接触一下新的东西,真三玩累了可以玩DOTA,随心所欲的发挥自己的想象力。而DOTA玩多了,同样也可以尝试一下真三,体会团队配合的那种感动。

(一)地图元素

首先,对于地图细节方面的比较,DOTA明显要高出一个档次,不论是地图的文字说明显示还是地图边缘的处理,或者是地图的整体色彩,DOTA都要更细腻一些。例如真三中的地图边缘没有树林的覆盖最后竟然可以让演变成逃生的路径,相当不可思议,尤其是蜀国的下路最为夸张。因此,真三单从整体效果给人的感觉还是很粗糙。

其次,两张地图的构成基本相同,进攻路线分为上中下三路,有固定的野区和终极BOSS。不同的是,真三国无双中双方所守卫的是魏国和蜀国的本阵,而双方的小兵是步兵+弓箭手的组合,双方中路都由一根外塔,一根中塔和两根内塔防守,上下两路的外塔位置由两根箭塔守护的据点构成,内塔同样为两根,在蜀国的下路和魏国的上路则多出一根中塔做防守。终极BOSS则为黄龙。DOTA中,近卫所守卫的是世界树,小兵由树精+猛禽德鲁伊组成,天灾守卫的是冰封王座,小兵由食尸鬼+亡灵法师组成。双方上中下三路各由一个外塔,一个中塔和一个内塔组成。终极BOSS为ROSHAN。

再次,真三国无双中,箭塔的攻击力和防御都比DOTA的防御塔高出一个档次,因此不依靠攻城车的帮助,想在短期内破塔是不可能的。就算购买攻城车的话,想要迅速成型也是不可能的。何况真三国无双的出兵系统也可以拖延攻城速度。因此按照正常来说,三国无双每局的时间都要长些,没有绝对的优势是打不下来的。而DOTA中,攻城车则随小兵一起攻城,虽然是隔数波小兵一辆,但如果英雄防守不到位,真的能让它一下一下的砸掉。另外英雄中有相当一部分英雄的技能是对箭塔有效的,比真三国无双中的英雄要多出好多,大量召唤系英雄的存在也令速推成为一种战术。因此,DOTA的游戏时间明显就要短好多,大多数情况下40分钟左右基本就能见分晓。

再次,还需要说明的是,在真三国无双这张地图中,小兵的攻速很平和,相对于DOTA来说,很容易补刀。但反补却相当不容易。在DOTA中,半血的小兵就可以反补,而在真三中,则要是死血,即血条变成红色才可以反补,就这点来说,还是很考验玩家操作的。

最后,是野区的分别,野区是两张图的重要组成部分,很多后期英雄无法在线上立足时往往会去选择打野。但相比较而言,真三的野怪组合太过单一:6个盗贼,3个巨魔,2个螃蟹,3只狼,3只老虎,1只巨蟹,1头熊就可以概括了。充当的作用,也只能是玩家的金钱和经验而已。而DOTA中,野怪的种类相当丰富,至少有20余种,还可以被玩家用道具和技能收为己用,成为输出和肉盾,最差还可以被点金手直接变成金钱。相当有意思。

接下来是两张图所具有的独特系统

1.真三国无双

(1)士气系统
个人感觉是一个好坏参半的系统。首先可以肯定的是,地图作者很尊重原游戏。玩过光荣公司的ARPG游戏《真三国无双》系列的玩家都知道,士气对双方交战的重要性。而在真三这张图中,同样,士气高涨的小兵的输出往往要高一个档次。所以劣势方后期要面对的不单单是对方的英雄,更重要的是要先把士气拉回来。如果士气太低的话,单单是小兵就能把英雄搞死。换句话说,士气系统就是让优势方加速胜利,让劣势方加速失败。可是,我们应该注意到,虽然优势一方是通过自己的努力慢慢积累来的,但就算DOTA中也有后期英雄,后期英雄要在后期才能发挥作用,前期缺乏有效的输出,很容易死在强力魔法输出的法师手上。因此后期英雄都是在屈辱中成长,最后一战定胜负。而士气系统的介入,在一定程度上却干扰了游戏的公平性。一个强力法师在前期尽情的虐待一个后期英雄,而每虐待一次,身边的小兵就要比后期英雄的小兵强一点点。所以,后期英雄要比在普通情况下更难成长。但如果在很幸运的情况下,这个后期英雄终于成长起来了,但要面对的不仅是这个英雄,还有那么多如狼似虎的小兵,各位,你会觉得公平吗?也许有人会说,正因为后期英雄比较强,所以要让小兵强一点保护法师才更公平啊。但各位,法师就是要压制后期英雄,能让后期安安稳稳成长起来本身就是法师的失职,你没有把握好前期的优势,所以就要承担后果,靠地图的优势去弥补,本身就是一种不公正。而在DOTA中,优势方虽然让会有“近卫方或者天灾方正在向胜利迈进!”等字样的提示,但丝毫不会影响小兵的实际能力,充其量是对玩家的一种激励,让玩家在尽可能公平的环境下游戏。

(2)粮仓系统
相当有意思的设定,也是笔者相当欣赏的设定。在蜀国的上路和魏国的下路,各有由两根箭塔和两个攻高,血厚,防高的船长守卫的粮仓。如果将对方的粮仓破坏不仅每人可以得到800块的奖励,还可以断掉地方英雄的经济收入,即电脑定期供给的资金。因此,对方的英雄只能靠自己刷兵赚钱,对经济是个不小的打击。但打粮仓是有风险的,稍有不慎,就会让积累的优势前功尽弃。所以才更具有挑战精神,也是笔者相当肯定的。

(3)攻城车系统
真三中,攻城车分为投石车和冲车。投石车为远程攻击,攻击类型为攻城,重甲,可以攻击建筑物和普通单位。而冲车其实就是人族的坦克,近战攻击,攻击类型为攻城,城甲,只能攻击建筑物。但都需要玩家自己购买,而且要消耗木材。在真三中要靠杀兵才有木材。因此一个人要拥有大量的车是不可能的。通常都是几个人买大量的车,用车强推敌人的基地。虽然这也称的上一种战术,但却大大降低了游戏的趣味。更何况,像曹仁这位裸奔男,车子似乎就是天生为他准备的。没有车子,真的不知道在常态下还能做什么。

(4)出兵系统
同样也是值得肯定的系统。真三中,其实真正保卫的不是本阵,而是上中下三路的兵营,如果兵营被拆掉的话是无法继续出兵的,因此,兵营如果被破的话,在通常情况下是很难翻盘的。因此,兵营在真三中是相当重要的。但随着英雄等级的提高,死亡后的复活时间也持续增长。所以一次团灭可能导致直接被破掉一路。虽然买活是最有效的防守途径。但当资金不足的时候,选择出兵则可以最大限度的抵挡敌人的进攻。吴国和匈奴算是比较强的援军,但是需要大量的金钱和木材以及时间,正常情况下,一般是看不到出现的。

2.DOTA

(1)指令系统与模式系统
指令系统其实对游戏没有实际的效果,只是方便玩家进行游戏。充分体现了地图作者人性化的一面。通常个人常用的指令大只包含以下几个:
-random 随机一名英雄
-repick 放弃英雄,重新选择
-di 在游戏中,显示反补记号
-ma 显示敌人使用的英雄
-ms 显示英雄当前的移动速度
-cs 显示当前的杀兵数和反补数
-swap xx 交换英雄
-apm 显示所有玩家的手速
这些指令在最大程度上方便了玩家,是真三国无双中所没有的,因此在这一方面上,DOTA似乎做得更好一些。
模式系统则使得DOTA更具有可玩性。最常用的是全阵营选择,即双方玩家都可以选择近卫或天灾的英雄。这使得游戏不再局限于单一的阵营。不同阵营的英雄间的技能搭配也更多样化,随之而来的战术也层出不穷。很值得肯定。另外死亡模式,扯淡模式也都突破传统的思维,使得玩家体会不一样的玩法。

Ⅲ 60版本光强堆满多少

打开QGIS软件,将左侧上面浏览器中的“道路图层”拖拽到左侧下面的图层窗口中。
2
/4
选中道路图层,选择工具栏“切换编辑模式”工具(黄色的铅笔符号),开始编辑。
3
/4
鼠标左键沿着影像上道路的轮廓进行点击绘制道路,绘制完成后右键,填写道路属性信息。
4
/4
选择工具栏“当前编辑”下的“保存所选图层”,对绘制的道路进行保存。

QGIS(原称Quantum GIS)是一个自由软件的桌面GIS软件。它提供数据的显示、编辑和分析功能。
中文名
QGIS
外文名
Quantum GIS
开始于
2002年 5月
类别
桌面地理信息系统
特点
用户界面友好、跨平台、可扩展
快速
导航
功能介绍使用方法功能
软件介绍
QGIS是一个用户界面友好的桌面地理信息系统,可运行在Linux、Unix、Mac OSX和Windows等平台之上。QGIS是基于Qt,使用C++开发的一个用户界面友好、跨平台的开源版桌面地理信息系统。[1]
QGIS项目开始于2002年 5月,是基于跨平台的图形工具Qt软件包,采用C++ 语言开发的一个GIS软件。目前的开发非常活跃,当前(2014年)的最新版本是QGIS 2.4 版。QGIS源码采用 GNU General Public License协议对外发布。

Ⅳ 端游,手游服务端常用的架构是什么样的

端游、手游服务端常用的架构是什么样的?
类型1:卡牌、跑酷等弱交互服务端卡牌跑酷类

因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器:

登录时可以使用非对称加密(RSA, DH),服务器根据客户端uid,当前时间戳还有服务端私钥,计算哈希得到的加密 key 并发送给客户端。之后双方都用 HTTP通信,并用那个key进行RC4加密。客户端收到key和时间戳后保存在内存,用于之后通信,服务端不需要保存 key,因为每次都可以根据客户端传上来的 uid 和 时间戳 以及服务端自己的私钥计算得到。用模仿 TLS的行为,来保证多次 HTTP请求间的客户端身份,并通过时间戳保证同一人两次登录密钥不同。

每局开始时,访问一下,请求一下关卡数据,玩完了又提交一下,验算一下是否合法,获得什么奖励,数据库用单台 MySQL或者 MongoDB即可,后端的 Redis做缓存(可选)。如果要实现通知,那么让客户端定时15秒轮询一下服务器,如果有消息就取下来,如果没消息可以逐步放长轮询时间,比如30秒;如果有消息,就缩短轮询时间到10秒,5秒,即便两人聊天,延迟也能自适应。

此类服务器用来实现一款三国类策略或者卡牌及酷跑的游戏已经绰绰有余,这类游戏因为逻辑简单,玩家之间交互不强,使用 HTTP来开发的话,开发速度快,调试只需要一个浏览器就可以把逻辑调试清楚了。

类型2:第一代游戏服务器 1978

1978年,英国着名的财经学校University of Essex的学生 Roy Trubshaw编写了世界上第一个MUD程序《MUD1》,在University of Essex于1980年接入 ARPANET之后加入了不少外部的玩家,甚至包括国外的玩家。《MUD1》程序的源代码在 ARPANET共享之后出现了众多的改编版本,至此MUD才在全世界广泛流行起来。不断完善的 MUD1的基础上产生了开源的 MudOS(1991),成为众多网游的鼻祖:

MUDOS采用 C语言开发,因为玩家和玩家之间有比较强的交互(聊天,交易,PK),MUDOS使用单线程无阻塞套接字来服务所有玩家,所有玩家的请求都发到同一个线程去处理,主线程每隔1秒钟更新一次所有对象(网络收发,更新对象状态机,处理超时,刷新地图,刷新NPC)。

游戏世界采用房间的形式组织起来,每个房间有东南西北四个方向可以移动到下一个房间,由于欧美最早的网游都是地牢迷宫形式的,因此场景的基本单位被成为 “房间”。MUDOS使用一门称为LPC的脚本语言来描述整个世界(包括房间拓扑,配置,NPC,以及各种剧情)。游戏里面的高级玩家(巫师),可以不断的通过修改脚本来为游戏添加房间以及增加剧情。早年 MUD1上线时只有17个房间,Roy Trubshaw毕业以后交给他的师弟 Richard Battle,在 Richard Battle手上,不断的添加各种玩法到一百多个房间,终于让 MUD发扬光大。

用户使用 Telnet之类的客户端用 Tcp协议连接到 MUDOS上,使用纯文字进行游戏,每条指令用回车进行分割。比如 1995年国内第一款 MUD游戏《侠客行》,你敲入:”go east”,游戏就会提示你:“后花园 - 这里是归云庄的后花园,种满了花草,几个庄丁正在浇花。此地乃是含羞草生长之地。这里唯一的出口是 north。这里有:花待 阿牧(A mu),还有二位庄丁(Zhuang Ding)”,然后你继续用文字操作,查看阿牧的信息:“look a mu”,系统提示:“花待 阿牧(A mu)他是陆乘风的弟子,受命在此看管含羞草。他看起来三十多岁,生得眉清目秀,端正大方,一表人才。他的武艺看上去【不是很高】,出手似乎【极轻】”。然后你可以选择击败他获得含羞草,但是你吃了含羞草却又可能会中毒死亡。在早期网上资源贫乏的时候,这样的游戏有很强的代入感。

用户数据保存在文件中,每个用户登录时,从文本文件里把用户的数据全部加载进来,操作全部在内存里面进行,无需马上刷回磁盘。用户退出了,或者每隔5分钟检查到数据改动了,都会保存会磁盘。这样的系统在当时每台服务器承载个4000人同时游戏,不是特别大的问题。从1991年的 MUDOS发布后,全球各地都在为他改进,扩充,退出新版本,随着 Windows图形机能的增强。1997游戏《UO》在 MUDOS的基础上为角色增加的x,y坐标,为每个房间增加了地图,并且为每个角色增加了动画,形成了第一代的图形网络游戏。

因为游戏内容基本可以通过 LPC脚本进行定制,所以MUDOS也成为名副其实的第一款服务端引擎,引擎一次性开发出来,然后制作不同游戏内容。后续国内的《万王之王》等游戏,很多都是跟《UO》一样,直接在 MUDOS上进行二次开发,加入房间的地图还有角色的坐标等要素,该架构一直为国内的第一代 MMORPG提供了稳固的支持,直到 2003年,还有游戏基于 MUDOS开发。虽然后面图形化增加了很多东西,但是这些MMORPG后端的本质还是 MUDOS。随着游戏内容的越来越复杂,架构变得越来越吃不消了,各种负载问题慢慢浮上水面,于是有了我们的第二代游戏服务器。

类型3:第二代游戏服务器 2003

2000年后,网游已经脱离最初的文字MUD,进入全面图形化年代。最先承受不住的其实是很多小文件,用户上下线,频繁的读取写入用户数据,导致负载越来越大。随着在线人数的增加和游戏数据的增加,服务器变得不抗重负。同时早期 EXT磁盘分区比较脆弱,稍微停电,容易发生大面积数据丢失。因此第一步就是拆分文件存储到数据库去。

此时游戏服务端已经脱离陈旧的 MUDOS体系,各个公司在参考 MUDOS结构的情况下,开始自己用 C在重新开发自己的游戏服务端。并且脚本也抛弃了 LPC,采用扩展性更好的 Python或者 Lua来代替。由于主逻辑使用单线程模型,随着游戏内容的增加,传统单服务器的结构进一步成为瓶颈。于是有人开始拆分游戏世界,变为下面的模型:

游戏服务器压力拆分后得意缓解,但是两台游戏服务器同时访问数据库,大量重复访问,大量数据交换,使得数据库成为下一个瓶颈。于是形成了数据库前端代理(DB Proxy),游戏服务器不直接访问数据库而是访问代理,再有代理访问数据库,同时提供内存级别的cache。早年 MySQL4之前没有提供存储过程,这个前端代理一般和 MySQL跑在同一台上,它转化游戏服务器发过来的高级数据操作指令,拆分成具体的数据库操作,一定程度上代替了存储过程:

但是这样的结构并没有持续太长时间,因为玩家切换场景经常要切换连接,中间的状态容易错乱。而且游戏服务器多了以后,相互之间数据交互又会变得比较麻烦,于是人们拆分了网络功能,独立出一个网关服务 Gate(有的地方叫 Session,有的地方叫 LinkSvr之类的,名字不同而已):

把网络功能单独提取出来,让用户统一去连接一个网关服务器,再有网关服务器转发数据到后端游戏服务器。而游戏服务器之间数据交换也统一连接到网管进行交换。这样类型的服务器基本能稳定的为玩家提供游戏服务,一台网关服务1-2万人,后面的游戏服务器每台服务5k-1w,依游戏类型和复杂度不同而已,图中隐藏了很多不重要的服务器,如登录和管理。这是目前应用最广的一个模型,到今天任然很多新项目会才用这样的结构来搭建。

人都是有惯性的,按照先前的经验,似乎把 MUDOS拆分的越开性能越好。于是大家继续想,网关可以拆分呀,基础服务如聊天交易,可以拆分呀,还可以提供web接口,数据库可以拆分呀,于是有了下面的模型:

这样的模型好用么?确实有成功游戏使用类似这样的架构,并且发挥了它的性能优势,比如一些大型 MMORPG。但是有两个挑战:每增加一级服务器,状态机复杂度可能会翻倍,导致研发和找bug的成本上升;并且对开发组挑战比较大,一旦项目时间吃紧,开发人员经验不足,很容易弄挂。

比如我见过某上海一线游戏公司的一个 RPG上来就要上这样的架构,我看了下他们团队成员的经验,问了下他们的上线日期,劝他们用前面稍微简单一点的模型。人家自信得很,认为有成功项目是这么做的,他们也要这么做,自己很想实现一套。于是他们义无反顾的开始编码,项目做了一年多,然后,就没有然后了。

现今在游戏成功率不高的情况下,一开始上一套比较复杂的架构需要考虑投资回报率,比如你的游戏上线半年内 PCU会去到多少?如果一个 APRG游戏,每组服务器5千人都到不了的话,那么选择一套更为贴近实际情况的结构更为经济。即使后面你的项目真的超过5千人朝着1万人目标奔的话,相信那个时候你的项目已经挣大钱了 ,你数着钱加着班去逐步迭代,一次次拆分它,相信心里也是乐开花的。

上面这些类型基本都是从拆分 MUDOS开始,将 MUDOS中的各个部件从单机一步步拆成分布式。虽然今天任然很多新项目在用上面某一种类似的结构,或者自己又做了其他热点模块的拆分。因为他们本质上都是对 MUDOS的分解,故将他们归纳为第二代游戏服务器。

类型4:第三代游戏服务器

2007从魔兽世界开始无缝世界地图已经深入人心,比较以往游戏玩家走个几步还需要切换场景,每次切换就要等待 LOADING个几十秒是一件十分破坏游戏体验的事情。于是对于 2005年以后的大型 MMORPG来说,无缝地图已成为一个标准配置。比较以往按照地图来切割游戏而言,无缝世界并不存在一块地图上面的人有且只由一台服务器处理了:

每台 Node服务器用来管理一块地图区域,由 NodeMaster(NM)来为他们提供总体管理。更高层次的 World则提供大陆级别的管理服务。这里省略若干细节服务器,比如传统数据库前端,登录服务器,日志和监控等,统统用 ADMIN概括。在这样的结构下,玩家从一块区域走向另外一块区域需要简单处理一下:

玩家1完全由节点A控制,玩家3完全由节点B控制。而处在两个节点边缘的2号玩家,则同时由A和B提供服务。玩家2从A移动到B的过程中,会同时向A请求左边的情况,并向B请求右边的情况。但是此时玩家2还是属于A管理。直到玩家2彻底离开AB边界很远,才彻底交由B管理。按照这样的逻辑将世界地图分割为一块一块的区域,交由不同的 Node去管理。

对于一个 Node所负责的区域,地理上没必要连接在一起,比如大陆的四周边缘部分和高山部分的区块人比较少,可以统一交给一个Node去管理,而这些区块在地理上并没有联系在一起的必要性。一个 Node到底管理哪些区块,可以根据游戏实时运行的负载情况,定时维护的时候进行更改 NodeMaster 上面的配置。于是碰到第一个问题是很多 Node服务器需要和玩家进行通信,需要问管理服务器特定UID为多少的玩家到底在哪台 Gate上,以前按场景切割的服务器这个问题不大,问了一次以后就可以缓存起来了,但是现在服务器种类增加不少,玩家又会飘来飘去,按UID查找玩家比较麻烦;另外一方面 GATE需要动态根据坐标计算和哪些 Node通信,导致逻辑越来越厚,于是把:“用户对象”从负责连接管理的 GATE中切割出来势在必行于是有了下面的模型:

网关服务器再次退回到精简的网络转发功能,而用户逻辑则由按照 UID划分的 OBJ服务器来承担,GATE是按照网络接入时的负载来分布,而 OBJ则是按照资源的编号(UID)来分布,这样和一个用户通信直接根据 UID计算出 OBJ服务器编号发送数据即可。而新独立出来的 OBJ则提供了更多高层次的服务:

对象移动:管理具体玩家在不同的 Node所管辖的区域之间的移动,并同需要的 Node进行沟通。

数据广播:Node可以给每个用户设置若干 TAG,然后通知 Object Master 按照TAG广播。

对象消息:通用消息推送,给某个用户发送数据,直接告诉 OBJ,不需要直接和 GATE打交道。

好友聊天:角色之间聊天直接走 OBJ/OBJ MASTER。整个服务器主体分为三层以后,NODE专注场景,OBJ专注玩家对象,

GATE专注网络。这样的模型在无缝场景服务器中得到广泛的应用。但是随着时间的推移,负载问题也越来越明显,做个活动,远来不活跃的区域变得十分活跃,靠每周维护来调整还是比较笨重的,于是有了动态负载均衡。动态负载均衡有两种方法,第一种是按照负载,由 Node Master 定时动态移动修改一下各个 Node的边界,而不同的玩家对象按照先前的方法从一台 Node上迁移到另外一台 Node上:

图11 动态负载均衡

Node Master定时查找地图上的热点区域,计算新的场景切割方式,然后告诉其他服务器开始调整,具体处理方式还是和上面对象跨越边界移动的方法一样。但是上面这种方式实现相对复杂一些,于是人们设计出了更为简单直接的一种新方法:

图12 基于网格的动态负载均衡

于网格的动态负载均衡还是将地图按照标准尺寸均匀切割成静态的网格,每个格子由一个具体的Node负责,但是根据负载情况,能够实时的迁移到其他 Node上。在迁移分为三个阶段:准备,切换,完成。三个状态由Node Master负责维护。准备阶段新的 Node开始同步老 Node上面该网格的数据,完成后告诉NM;NM确认OK后同时通知新旧 Node完成切换。完成切换后,如果 Obj服务器还在和老的 Node进行通信,老的 Node将会对它进行纠正,得到纠正的 OBJ将修正自己的状态,和新的 Node进行通信。

很多无缝动态负载均衡的服务端宣称自己支持无限的人数,但不意味着 MMORPG游戏的人数上限真的可以无限扩充,因为这样的体系会受制于网络带宽和客户端性能。带宽决定了同一个区域最大广播上限,而客户端性能决定了同一个屏幕到底可以绘制多少个角色。

从无缝地图引入了分布式对象模型开始,已经完全脱离 MUDOS体系,成为一种新的服务端模型。又由于动态负载均衡的引入,让无缝服务器如虎添翼,容纳着超过上一代游戏服务器数倍的人数上限,并提供了更好的游戏体验,我们称其为第三代游戏服务端架构。网游以大型多人角色扮演为开端,RPG网游在相当长的时间里一度占据90%以上,使得基于 MMORPG的服务端架构得到了蓬勃的发展,然而随着玩家对RPG的疲惫,各种非MMORPG游戏如雨后春笋般的出现在人们眼前,受到市场的欢迎。

类型5:战网游戏服务器

经典战网服务端和 RPG游戏有两个区别:RPG是分区分服的,北京区的用户和广州区的用户老死不相往来。而战网,虽然每局游戏一般都是 8人以内,但全国只有一套服务器,所有的玩家都可以在一起游戏,而玩家和玩家之使用 P2P的方式连接在一起,组成一局游戏:

玩家通过 Match Making 服务器使用:创建、加入、自动匹配、邀请 等方式组成一局游戏。服务器会选择一个人做 Host,其他人 P2P连接到做主的玩家上来。STUN是帮助玩家之间建立 P2P的牵引服务器,而由于 P2P联通情况大概只有 75%,实在联不通的玩家会通过 Forward进行转发。

大量的连接对战,体育竞技游戏采用类似的结构。P2P有网状模型(所有玩家互相连接),和星状模型(所有玩家连接一个主玩家)。复杂的游戏状态在网状模型下难以形成一致,因此星状P2P模型经受住了历史的考验。除去游戏数据,支持语音的战网系统也会将所有人的语音数据发送到做主的那个玩家机器上,通过混音去重再编码的方式返回给所有用户。

战网类游戏,以竞技、体育、动作等类型的游戏为主,较慢节奏的 RPG(包括ARPG)有本质上的区别,而激烈的游戏过程必然带来到较 RPG复杂的多的同步策略,这样的同步机制往往带来的是很多游戏结果由客户端直接计算得出,那在到处都是破解的今天,如何保证游戏结果的公正呢?

主要方法就是投票法,所有客户端都会独立计算,然后传递给服务器。如果结果相同就更新记录,如果结果不一致,会采取类似投票的方式确定最终结果。同时记录本剧游戏的所有输入,在可能的情况下,找另外闲散的游戏客户端验算整局游戏是否为该结果。并且记录经常有作弊嫌疑的用户,供运营人员封号时参考。

类型7:休闲游戏服务器

休闲游戏同战网服务器类似,都是全区架构,不同的是有房间服务器,还有具体的游戏服务器,游戏主体不再以玩家 P2P进行,而是连接到专门的游戏服务器处理:

和战网一样的全区架构,用户数据不能象分区的 RPG那样一次性load到内存,然后在内存里面直接修改。全区架构下,为了应对一个用户同时玩几个游戏,用户数据需要区分基本数据和不同的游戏数据,而游戏数据又需要区分积分数据、和文档数据。胜平负之类的积分可以直接提交增量修改,而更为普遍的文档类数据则需要提供读写令牌,写令牌只有一块,读令牌有很多块。同帐号同一个游戏同时在两台电脑上玩时,最先开始的那个游戏获得写令牌,可以操作任意的用户数据。而后开始的那个游戏除了可以提交胜平负积分的增量改变外,对用户数据采用只读的方式,保证游戏能运行下去,但是会提示用户,游戏数据锁定。

类型8:现代动作类网游

从早期的韩国动作游戏开始,传统的战网动作类游戏和 RPG游戏开始尝试融合。单纯的动作游戏玩家容易疲倦,留存也没有 RPG那么高;而单纯 RPG战斗却又慢节奏的乏味,无法满足很多玩家激烈对抗的期望,于是二者开始融合成为新一代的:动作 + 城镇 模式。玩家在城镇中聚集,然后以开副本的方式几个人出去以动作游戏的玩法来完成各种 RPG任务。本质就是一套 RPG服务端+副本服务端。由于每次副本时人物可以控制在8人以内,因此可以获得更为实时的游戏体验,让玩家玩的更加爽快。

说了那么多的游戏服务器类型,其实也差不多了,剩下的类型大家拼凑一下其实也就是这个样子而已。

热点内容
标签匹配算法 发布:2024-10-06 06:37:23 浏览:221
云顶之弈脚本 发布:2024-10-06 06:37:23 浏览:764
jsp与javaweb 发布:2024-10-06 06:32:13 浏览:294
c语言修饰符 发布:2024-10-06 06:27:09 浏览:276
有解压密码的压缩包 发布:2024-10-06 06:18:46 浏览:72
分镜头脚本模板广告 发布:2024-10-06 06:18:44 浏览:14
大众迈腾车辆密码在哪里 发布:2024-10-06 06:05:51 浏览:673
access数据库乱码 发布:2024-10-06 06:05:18 浏览:322
光遇安卓音韵季有什么 发布:2024-10-06 05:06:51 浏览:76
apk脚本破解 发布:2024-10-06 04:33:23 浏览:52