好玩的角色扮演网络游戏-比较有名的网络游戏有哪些啊???要是角色扮演的,画面风格要好看,

一 : 比较有名的网络游戏有哪些啊???要是角色扮演的,画面风格要好看,

比较有名的网络游戏有哪些啊???

要是角色扮演的,面风格要好看,要Q一些.要好玩
最重要的是要免费啦


问道

我现在在玩,我觉得很好玩,你也试试吧

二 : 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

北京交通大学

硕士学位论文

大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

姓名:马思阳

申请学位级别:硕士

专业:软件工程

指导教师:韩臻

20080601

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

摘要

随着互联网的普及和网络技术的不断发展,网络游戏逐渐取代单机游戏成为Pc游戏的主流,并且仍在高速发展之中。[www.loach.net.cn)其中大型多人在线角色扮演游戏(删ORPG)是目前最受广大玩家推崇的网络游戏形式。而角色战斗系统是MMORPG中最为复杂和最重要的玩法系统。它的复杂是因为它必需提供给玩家多样化的玩法和技能,否则就没有给玩家一个很大的钻研空间和游戏乐趣。它的复杂还在于它是一个跨进程的有限状态机,而状态机编程本来就是一项难以设计、编码和调试的工程。另外还需要加上对网络环境、角色信息同步策略的考虑。

网络游戏项目作为商用软件的一员,长期以来其主要的开发方法使用的是传统的瀑布型。然而笨重的瀑布型方法已经不能适用于需求多变的游戏项目开发。目前国内有着越来越多的游戏公司在引进敏捷开发方法方面进行摸索和实践,但总体来说敏捷方法在国内网络游戏项目中的实际应用范围有限。本文希望能够通过总结在实际项目开发中应用敏捷开发方法的经验,为国内游戏开发团队应用敏捷开发方法提供参考和借鉴。

本文阐述了角色战斗系统的需求分析,数据结构设计,配置表设计,编码实现,常用的编码技巧等开发经验。重点研究了网络游戏需求分析的特点、需求分析中遇到的问题和解决办法以及系统功能模块的设计。另外结合了本系统的开发经验,总结了敏捷开发方法在游戏项目开发过程中所起到的重要作用以及实际应用敏捷开发方法的经验,并发现了敏捷丌发方法在实际应用中的一些问题以及解决的办法。最后描述了本系统所使用的测试框架以及该方法给整个项目带来的帮助和该方法的不足之处,并给出了具体的测试用例和测试结果。本项目成果已成功用于网络游戏《佣兵天下》的开发中,经测试达到了预期效果,证实了方案的合理性,可行性和实用性。

关键词:网络游戏;软件工程;敏捷开发

分类号:TP311.5

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

ABSTRACT

WiththepopularityoftheInternetandnetworktechnologycontinuestodevelop,OnlineGamesgraduallyreplacesingle—playerPCgamesintothemainstreamofthegame.MassivelyMultiplayerOnlineRolePlayingGame(MMORPG)isthemostpopulargameformina11theOnlineGames.CharacterfightingsystemiSthemostcomplexandmostimportantsystemintermsofgamelogicinMMORPG.Itscomplexitycomesfromthediversegameexperiencewhichitmustprovidetothegameplayers.MeanwhileitiSacross—process

asfinite—statemachine.Thedifficultyofcodinganddebuggingincreases

thestatemachineprogramming,networkenvironmentandcharacterinformation

Asasynchronizationofneedtoconsider.Game

ausesmembercommercialsoftware,Onlineastraditionalwaterfalldevelopmentmethoditsmainmethodforlongperiod.However,

waterfal1methoddoesnotmeettheneedoffastchangingrequirementingamedevelopment.Currently,moreandmoredomesticgamecompaniesexploretheusageofagiledevelopmentmethodingamedevelopment.Through

ingamethispaper,thepracticalexperienceofapplyingagilemethod

developmentwillhopefullycontributetotheprocessofexploringtheagilemethodingamedevelopmentdomain.

ThiSpaperdescribestherequirementanalysiS,datastructuredesign,numericalconfigurationdesign,commonlyusedcodingskillsduringthecharacterfightingsystemdevelopment.Additionally,withthedevelopmentexperienceofcharacterfightingsystem,thiSpapersumsupuseful

game

tosomeexperience,problemsandcorrespondingsolutionsinpracticalrespectdevelopment,andsuggestscorrespondingsolutionswith

problems.Finally,thepaperdescribesthetestautomationframeworkandmethodusedintheprojectandtheresultingimpactcomingfromthetestautomation.Thecharactersystemhasbeenusedincommercialonlinegamedevelopmentproject,anditsrationality,feasibilityandpracticalityhasbeenproved.

网聚知识提醒您本文地址:

KEYWoRDS:MMORPG;AgJile

CLASSN0:TP311.5Development;SoftwareEngineering

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

学位论文版权使用授权书

本学位论文作者完全了解北京交通大学有关保留、使用学位论文的规定。[www.loach.net.cn]特授权北京交通大学可以将学位论文的全部或部分内容编入有关数据库进行检索,并采用影印、缩印或扫描等复制手段保存、汇编以供查阅和借阅。同意学校向国家有关部门或机构送交论文的复印件和磁盘。

(保密的学位论文在解密后适用本授权说明)

学位论文作者签名:弓罢,f母导师签名:签字日期:刎F年占月,o日签字R期:厶"吕年多月fD同

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

些塞窑煎太芏主些亟±堂焦监塞独创性直明

独创性声明

本人声明所呈交的学位论文是本人在导师指导下进行的研究工作和取得的研究成果,除了文中特别加以标注和致谢之处外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得北京交通大学或其他教育机构的学位或证书而使用过的材料。(www.loach.net.cn]与我一同工作的同志对本研究所做的任何贡献均己在论文中作了明确的说明并表示了谢意。

学位论文作者签名:弓要P寸签字日期:伽口g年∥月么,日

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

致谢

本论文的工作是在我的导师韩臻教授的悉心指导下完成的,韩臻教授严谨的治学态度和科学的工作方法给了我极大的帮助和影响。(www.loach.net.cn)在此衷心感谢两年来韩臻老师对我的关心和指导。

论文工作在进行过程中同时得到了许多实习公司同事的帮助,特别是主程序员黄舒怀对论文工作提出了很多建设性的意见和建议,在此表示诚挚的感谢。

另外也感谢我的父母以及其他家人,他们的理解和支持使我能够在学校专心完成我的学业。

最后感谢软件学院以及比利时GroupT的授课老师,是你们的悉心教导进一步夯实了我的专业知识和技能,指引我迈入了游戏行业。在今后的学习和工作中,我将会应用所学的知识和其他同事一道共同推进国内游戏行业的快速发展,以此来回报各位授课老师的辛勤耕耘。

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

1绪论

1.1论文背景介绍

1.1.1大型多人在线角色扮演类网络游戏概述

在过去的几年里,中国的网络游戏产业得到了长足健康的发展。[www.loach.net.cn)网络游戏的价值得到了政府部门和社会各界的认可,国家相关部门无论在研发还是运营上都给予网络游戏产业大力支持与推动。网络游戏首次正式纳入国家“863”计划,登上“大雅之堂”,此举标志着网络游戏产业开始得到了政府扶植,为国内游戏厂商搭建起一个核心技术平台,保护我国网络游戏软件的自主知识产权。国家政策的倾斜,将拉动本土企业的自主知识产权创造能力的提高。与一般的电脑游戏相比,网络游戏具有信息双向交流、速度快、不受空间限制等优势,从根本上提高了游戏的互动性、仿真性和竞技性,使游戏玩家在虚拟世界里可以发挥现实世界无法展现的潜能,改变了单机版游戏固定、呆板、与机器对话的状况。因此,网络游戏在近几年里异军突起并以惊人的速度蚕食着单机版游戏的地盘,并且成为网络业三大(网上金融、网上教育和网络游戏)赢利且利润优厚的领域之一。就国内的发展来看,最近这两三年内国内的游戏公司如雨后春笋般的成立,所开发或代理的网络游戏更是不胜枚举。

另外根据中国互联网协会发布的((Netguide2008中国互联网调查报告》中显示,2007年中国网络游戏市场规模达到93.6亿元人民币,较2006年增长57%。其中,2007年中国网络游戏用户达到4800万,环比增长17.1%。由此可以看出网络游戏巨大的市场价值和其带来的经济效应。

MMoRPG(MassivelyMultiplayerOnlineRolePlayingGame)指的是大型多人在线角色扮演游戏,是目前网络游戏的主流模式。MMORPG是以角色扮演游戏为基础的。玩家在游戏里扮演一种自己喜爱的角色,让他/她按照自己的喜好不断地成长、成熟。加上一些支线情节与任务的点缀,还有公会及联盟系统、结婚系统、PK(Ii[J玩家与玩家战斗)系统等丰富的游戏系统支持,角色扮演类游戏能长时间吸引玩家的关注,让玩家百玩不厌。在MMoRPG中,数以千计的玩家同时存在于同一个游戏中,玩家可以在一个虚拟的世界中互相交流,也可以使用拥有不同特点的角色来体验生活,并且可以通过游戏中的即时通讯系统互相沟通,这使得游戏变得生动有趣、极具互动性。网络游戏渐渐成为一种人际交往模式。而MMORPG

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

正好拥有这些吸引玩家的特性,因而成为广大玩家广为推崇的游戏模式,也成为最具发展潜力的网络游戏模式。[www.loach.net.cn)

1.1.2项目背景介绍

《佣兵天下》是北京蓝港在线科技有限公司专门为中国玩家量身订做的史诗玄幻大作,此款游戏是根据国内同名的超人气玄幻战争史诗《佣兵天下》改编而成,该小说在起点文学网总推荐榜高居次席长达两年之久,总点击率接近两千万人次。

《佣兵天下》采用国内自主研发的性能卓越的新一代3D引擎开发,游戏画面力求风格清新、唯美,为玩家创造出完美的游戏世界。内容上,游戏将忠实小说原著,真实再现小说中规模宏大的人神大战,波澜壮阔的剧情以及美丽奇幻的场景。玩家可以自由选择加入到人神大战中的任一阵营,也可以选择与艾米并肩作战,成就一番丰功伟业;同时还可以选择成为一名尽职尽责的佣兵,为了神圣的佣兵使命,进入神秘的迷宫探险,享受那份责任带来的荣耀;玩家也可以成为一名飘逸洒脱的吟游诗人,在广袤的艾米诺尔大陆传播着英雄们的事迹;还能成为一个“唯利是图"的商人,在各个阵营之间应付自如、积累财富。

网聚知识提醒您本文地址:

游戏将拥有丰富多样、可玩性极高的角色战斗系统,使得玩家无论是在各大战役中还是平常的野外历险中都能够淋漓畅快地施展自己的技能和特长。加强了不同阵营玩家之间对抗的激烈程度。在整个角色战斗系统中继承和发扬了目前最为流行的网络游戏《魔兽世界》和经久不衰的单机即时战略游戏《魔兽争霸3》的角色战斗系统。这两款游戏的战斗系统丰富多样,可玩性高,是玩家公认的制作精良、平衡性好、非常耐玩的角色战斗系统。同时游戏还将具有极为丰富的换装系统,人物的发型、衣服、武器以及宠物的饰品、样式和颜色都可以进行变更。宠物系统也将是游戏的一大亮点,各式各样、个性迥异的宠物,将为玩家的游戏生活平添几丝亮色。除此之外,游戏同样拥有其他各大角色扮演类网络游戏所拥有的帮会系统、拍卖系统、邮件系统以及生活技能等辅助系统,充实了整个游戏的可玩性。

1.1.3大型多人在线角色扮演类网络游戏的玩法核心

不论是哪一款MMORPG,玩家在介入之前必然需要选择一个角色,这个角色戏中的NP卜非玩家控制角色,即先于玩家存在的系统设置人物,如药店老板、2就是今后在网络游戏体验虚拟世界的人物,也是与其他个体(包括其他玩家和游

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

武器商人等)进行利益互动的前提。(www.loach.net.cn)游戏角色如同现实世界中的“我”,可以通过“职业”选择决定自己的发展方向(以后所能拥有的能力),也可以通过一定的努力提升自己的“能力’’(等级)。

玩家所控制的角色与其他角色进行交互的最主要途径非战斗莫属了。玩家大部分时间都会用于与NPC或其他玩家进行的战斗之中,由此可以看出角色战斗系统是目前流行的即时角色扮演类网络游戏中非常重要的组成部分,是整个游戏的玩法核心之一。角色战斗系统的主要的功能是管理游戏场景中玩家所扮演角色的移动、战斗。同时场景中各种NPC和怪物的移动和战斗行为也由角色战斗系统来统一管理。角色战斗系统是吸引广大玩家的亮点之一。

1.2论文作者所做的主要工作

论文作者在蓝港在线(北京)科技有限公司实习期间,参与了佣兵天下项目的网络游戏研发工作。加入了“佣兵天下”角色组的开发工作,主要参与了:

1)角色战斗系统的需求分析与经验总结。分析了普通商用软件与网络游戏开发过程中需求分析的异同,以及作为网络游戏开发团队中的程序员应该掌握的需求分析技能。由于网络游戏的需求并非来自于项目的投资者或游戏用户,而是来自游戏开发团队本身。在游戏开发的过程中,游戏的具体需求文档先由策划撰写,然后需要程序员仔细阅读策划提出的需求文档并对需求的实现难度进行预估,最后需要和策划共同商讨并确定最后的功能需求。对于程序员来说,在商讨过程中需要尽可能多地发掘一些潜在的需求。通常来说,因为文字表述的二义性以及术语使用上的误解,一些潜在的需求没有明确的被商讨双方所确认。因此这部分工作需要在商讨会上仔仔细细地进行,确保整个游戏功能需求的完善。然而由于策划和程序员的知识结构和术语使用上的差异,通常导致会议进行地很缓慢。针对这种问题,本文总结了在需求分析会上双方可以参照的基本流程以及注意事项,帮助提高需求分析会的进展速度,并确保游戏功能需求的完备性和可实现性。

2)角色战斗系统的数据结构设计,配置表设计,编码实现。由于角色战斗系统涉及到服务器端和客户端的数据同步以及战斗中大量的数据运算,因此在设计各个类以及类之间的关联时充分考虑了服务端和客户端数据的同步规则。例如,提炼并抽象了角色的位置信息以及相关的位置信息同步模块。对于战斗有关的角色战斗属性,依照同步的频率和存储的范围做了分类和归纳,并对所有角色战斗属性采取了统一编号的办法,建立了一个简单的客户端、服务端的通信协议,减少了网络传输量,提高了同步的实时性。在设计战斗流程时,总结归纳并抽象了战斗流程中的各个模块,达到了高内聚低耦合的设计要求,实现了吟唱、引导、3

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

瞬发等战斗流程,同时还实现了子弹魔法、可传递魔法等游戏中非常重要的魔法。(www.loach.net.cn]此外,充分考虑到了整个角色战斗系统的框架的可扩展性,统一了各个模块问的接口,在新增某些魔法或属性时无需改变已有的接口,只需在框架中加入枚举变量或新增具体的魔法或属性类。整个角色的战斗属性就采用了这种设计思路。

3)角色战斗系统的测试代码的编写。在游戏开发过程中应用了引擎提供的测试框架,保证了已有代码的功能的正确性和完整性。特别是在开发后期,当已完成的功能越来越多之时,新加入模块以后通过测试能够很容易的确保没有影响已完成模块的功能。

4)应用敏捷开发方法协调、组织角色战斗系统的开发,总结了敏捷开发方法应用到游戏开发中的相关开发经验。与传统的瀑布型开发方法进行了深入比较。由于游戏开发过程中需求的变更比较频繁,对项目开发者的工作效率提出了更高的要求,最重要的是需要开发人员发挥自己的主观能动性,提出创新性的设计和实现。这些要求使得无法应用传统的重型开发方法,然而敏捷开发方法思想和方法却适用于游戏开发过程,对需求的变化能够灵活机动地应对,最重要的是其强调以人为本、强调开发团队成员主人翁意识的思想特别适合应用于游戏开发。在游戏开发过程中,本文应用了Serum敏捷方法来管理和控制整个开发过程,给出了具体实践的应用示例并对敏捷方法的思想作了一些具体的解释,最后对实际应用敏捷方法过程中遇到的问题给出了解决办法。

1.3本文组织结构

本文总共分为七章。

第一章为介绍了论文的背景知识以及角色战斗系统在网络游戏中的作用。

第二章介绍了Serum敏捷开发方法在系统开发过程中的具体实践以及遇到的主要问题和相关解决方案。

第三章探讨了网络游戏需求分析的特点,并进行了角色战斗系统的需求分析。

第四章介绍了系统设计的前期工作,主要是介绍引擎相关模块。

第五章详细说明了系统的功能设计与实现。

第六章介绍了系统所使用的测试框架以及系统测试。

网聚知识提醒您本文地址:

第七章总结了本文的内容并对以后的工作方向做出了展望。4

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

2敏捷软件工程在系统开发中的应用

2.1敏捷开发方法简介

敏捷开发方法是一种从90年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种开发方法。[www.loach.net.cn)它更强调程序员团队与需求提出者之间的紧密协作,面对面的沟通,频繁交付新的软件版本,紧凑而自我组织性的团队,能够很好地适应需求变化的代码编写和团队组织方法,同时更加注重开发人员在软件开发中的主观能动作用。它是一种面临迅速变化的需求快速开发出高质量软件产品的新方法。由于软件在规模、复杂度、功能上的极大扩展和提高,以及在需求和技术不断变化的过程中实现软件自身开发的需求,敏捷开发正逐渐成为软件开发的新模式。敏捷软件开发方法从开发速度和响应变化的角度出发进行考虑,实现高效率、高质量和低成本地开发和生产软件。敏捷软件开发方法满足作为一种好的软件开发方法的要求——将人、技术和过程很好地融起来,满足快速变化的需求和对产品高质量的要求。

敏捷方法提倡经验型过程,而不是规定型过程。规定型过程(也被称为指令型过程)在开发阶段中需要遵从许多规定的和安排好的活动。规定的过程适用于预见性的生产领域。经验型过程适用于高度变化和不稳定的领域;它们基于频繁地度量结果,动态地响应变动的事件,而不是依赖于预先排好顺序的活动。

传统重型开发方法主要指严格按照软件生命周期模型——瀑布模型来开发软件,阶段问具有严格的顺序性和依赖性:必须等前一阶段的工作结束后才能开始下一阶段的工作;前一阶段的输出文档是后一阶段的输入文档。只有前一阶段的输出文档正确,后一阶段才能获得正确的结果。而且,为了保证软件开发质量,传统重型开发方法要求每一阶段必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务:每个阶段结束前都要对所完成的文档进行评审。

敏捷软件开发方法与传统重型开发方法同属于软件开发方法学。敏捷软件开发方法强调的是:开发方法不拘泥于形式,以效率和质量最大化为原则。多采用迭代式开发,以应变客户需求和开发环境频繁变化的影响。强调人的因素在软件开发过程中的重要作用,注重分析和研究人的个性和共性特点以及对软件开发过程中效率和质量的影响,在这些研究的基础上,采用多样性的、以人为本的软件开发方法。注重团队中信息的对流和渗透、友好和冲突、团队意识的建立以及团队文化的培养。

重型方法最大的一个问题就在于忽视了人的主动因素,强调必须严格按重量5

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

级方法、标准执行各种开发规范,从而增加了大量的工作量。(www.loach.net.cn)敏捷开发方法并不是说可以不要规范、不要文档。敏捷开发同样需要文档,只不过它对规范和文档像对开发人员一样,要求把它们组织得更加清晰、高效,要求简化的只是不必要的部分。重型开发方法容易使项目组的成员僵化工作,工作目标主要以完成个人责任工作为主,而不是以整个项目为主。另一方面,敏捷软件开发是在重量级开发方法的基础上所进行的提炼与升华,要想实践好敏捷开发,团队必须经历长期的规范管理。当规范意识和规范行为成为开发人员自发的表现时,自然就可以减化开发方法,增加敏捷程度。所以说,敏捷开发是团队开发水平的一个更高层次。2.2敏捷开发宣言与原则

2001年,一个致力于迭代和敏捷方法的小组创建了敏捷联盟(AgileAlliance)。他们发布了一个宣言并陈述了原则【4】【l7】。这些都是敏捷开发方法的核心思想与方法。

2.2.1敏捷软件开发宣言

胜过

胜过

胜过

胜过过程和工具面面俱到的文档合同谈判遵循计划个体和交互可以工作的软件客户合作响应变化

2.2.2敏捷软件开发遵循的原则

1)我们最先要做的事通过尽早地、持续地交付有价值的软件来使客户满意。2)即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。

3)经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。

4)在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。5)围绕被激励起来的个体来构建项目。给他们提供所需要的环境和支持6)在团队内部,最有效果并且富有效率的传递信息的方式,就是面对面的交流。

7)工作的软件是首要进度度量标准。

8)敏捷过程提倡平稳的开发。6

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

9)发起人、开发者和用户应该能够保持一个长期的、恒定的开发速度。[www.loach.net.cn)

10)不断地关注优秀的技能和好的设计会增强敏捷的能力。

11)简单——使未完成的工作最大化的艺术——是根本的。

12)最好架构、需求和设计出自于自我组织的团队。

13)每个一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地调整自己的行为。

2.2.3敏捷软件开发方法的应用范围

敏捷软件开发主要适用于需求不确定或经常要进行变更;开发人员有责任感和积极向上的心态,用户容易沟通并能参与。

2.3Scrum开发方法在系统开发中的具体实践

2.3.1Scrum开发方法的应用

Scrum方法是应用最广泛的敏捷方法之一。Scrum一词来源于于橄榄球运动,暗指这种情况:“在橄榄球比赛中,双方前锋站在一起紧密相连,当球在他们之间投掷时他们奋力争球。”它强调自我组织的团队、每日的团队测评以及避免遵循规定的步骤。其中关键实践包括带特定问题的每同工作例会(Scrum会议)、为期两周到四周的迭代(在本项目中使用了比较短的迭代周期——lO个工作日)以及每次迭代后向利益相关人员演示。

在应用Scrum方法的过程中有两种文档是非常重要且必不可少的。第一个是产品待办事宜表,见图3.1。产品待办事宜记录了所有目前想到的产品待办事项,并预估了工作量。某件待办事宜可以是暂时的、未细化的工作,需要随着开发的不断深入加以细化,同时更新每件细化后的待办事宜的预估工作量。往待办事宜中添加新的待办事宜时必须和Scrum团队的管理者协商讨论,看该工作是否确实需要进行。因为该待办事宜是作为整个团队的行动指南,需要团队的管理者来共同把握。7

网聚知识提醒您本文地址:

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

表2.1产品待办事宜表样例

产品待办事宜表

预估

工作内容

冲击波魔法代码调试治疗魔法操作魔法条件魔法操作

需要增加命中,暴击,未命中的概率计算

完成所有魔法条件的编码和调试完成所有魔法操作的编码和调试,完成现有已预留接u的魔法操作例如,在读技能配置表时就将魔法

完善配置表对象的初始化

效果名转换为对象指针存到技能对象中

新建类CMagicOpPos和

重构CMagicOp

CBaseMagicOp,然后将CMagicOp

和CMagicOpPos继承CBaseMagicOp

详细描述所属大项战斗系统战斗系统战斗系统战斗系统

负责人工作量

84

4824

战斗系统

战斗系统

除了待办事宜表,在每次迭代中都会有一个疾跑(Sprint)计划表,每一次迭代开发又称为一次疾跑。(www.loach.net.cn]疾跑计划表如图3.2所示,对每一个任务进行每日的评估。这些列也将记录日期以及每天保持的总时间。负责某个任务的开发人员需要每天更新疾跑计划表。新的估算时间允许超过最初的估算。这里再次充分体现了Scrum开发方法的灵活性。

表2.2疾跑计划表样例

疾跑计划表

预估工时

所属大项

负责

状态

日期总计

378

344

278

250

230

182

3-18

3-19

3—20

3—21

3-24

工作内容

读取技能配置表

战斗

已古

系统

兀成

8OOOOO

冷却时间编码

战斗

系统

已占兀

888888

已古兀

子弹魔法编码

战斗

系统

1616121288

Scrum开发方法的另一个重要实践就是召开每日会议。每一个工作日内,在同

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

样的时间和地点,团队成员围成一圈召开会议。[www.loach.net.cn)在会议上,每一位团队成员都要对同样的Scrum问题给出自己的回答。会议的时间最多不超过15分钟,非Scrum问题不得在会议上提出,如果有其他问题需要解决的可以召集部分团队成员召开二级会议。Scrum问题通常有以下几个:

1)上个工作日所作的主要工作是什么?

2)接下来的工作日将要进行哪些工作?

3)有什么经验值得和其他团队成员分享?

4)疾跑计划中自己的各项任务预计还剩余多少小时?

5)遇到什么问题需要求助于其他团队成员或非团队成员?

在每个疾跑结束的时候,由Scrum团队主管组织召开疾跑总结与计划会议。会议由所有团队成员、产品所有人以及其他利益相关人员参加。会上将有产品展示。会议的目的是告知利益相关人员本次疾跑所完成的系统功能、设计、优点、缺陷、团队付出的努力,以及将来可能会出现的bug。会议的长度尽量控制在两小时以内。会议中的产品展示禁止使用微软演示程序,重点放在展示产品。

2.3.2一切以提高开发效率为目的

由本文第二章所介绍的需求分析过程来看,游戏开发过程中有许多要求和Scrum开发方法不谋而合,应用Scrum开发方法能大大提高项目的成功几率和开发效率。例如,在做需求分析时,需要策划和程序员经常进行口头的沟通与交流,而不需要经常召开多人会议。在Scrum方法中同样非常重视开发人员见面对面的口头交流,因为这种交流是最高效的交流方式。Serum开发方法对文档的规范性没有具体的硬性要求,文档的撰写可以根据项目的具体需要来决定,一切服务于高质量的代码编写,不是为了文档的整齐规范而花大量精力来撰写和整理文档。灵活的文档正规性带来的明显好处就是能对频繁变化的需求做出快速的反应。如果每次系统实现之前都强行规定必须写出系统功能文档,画出类图等等,必将大大削弱开发团队对需求变更的适应能力。试想一下,程序员刚写好一大堆正式的文档,突然策划的想法有了少量变化,程序员按照规定又必须先修改整理文档然后才能进行开发,这样的事情一旦频繁发生,程序员的大部分工作时间将会用于文档的修改而不是代码编写。

2.3.3团队的自我管理与自由度

Serum开发方法带给开发团队的一种前所未有的自主权与自由度。开发团队作9

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

为一个自我组织自我管理的团队,尊重每一位团队成员在专业技能方面的权威性,充分调动每一位成员的工作积极性。(www.loach.net.cn)在角色战斗系统的开发过程中,角色组的所有团队成员都是团队中平等的一员,不存在管理者与被管理者之分。每一个成员都是他所负责模块的专家,他的意见和看法会得到其他成员的尊重。

在开发角色战斗系统的过程中,除了策划提出策划案,指导和规划整个游戏的功能以外,程序员作为开发人员同样可以提出好的点子和想法,充实整个游戏的可玩性。尤其是在开发角色战斗系统中的技能系统过程中,游戏经验丰富的程序员经常能够联想起他所玩过的游戏中的一些好玩的技能,这样将不仅会丰富游戏的内容,更加重要的是程序员自己对自己提出的需求是最清楚的,有利于加快此部分需求的实现速度。

团队的自我组织与管理带来不仅仅是灵活性,更深层次的意义在于充分调动了开发人员的主观能动性,加强了每位开发人员的主人翁意识和责任感。每一位开发人员都是团队的主人、某一方面的权威。一个非常有意思的现象是越是有主人翁意识和责任感的开发人员表现得越积极主动,想到的问题、提出的对原系统的改进和新需求也就越多,从而他所熟悉的需求和相关系统模块也就越多,进而导致他所负责和熟悉的模块也就越来越多,最后回过头来更进一步地加强了他在这个团队中的主人翁意识和责任感。这是一个非常的现象,这个现象特别值得肯定,因为它不仅带动了某一个人,还感染了周围的人,培养了整个开发团队积极主动的开发氛围。在这样的开发团队中,将会越来越少地看到由上至下的任务分配,取而代之的是各种想法、设计频繁地来自于每位开发人员,因为他们才是专家,而不是传统做法中的某一两个领导者。传统的领导者在开发团队中的主要作用是为团队成员提供所需的环境和条件,具体来说就是维护整个团队的积极氛围和应对在开发过程中各种来自团队外的干扰。最后还有一个疑虑,那就是如果某位开发人员不太熟悉将要开发的内容怎么办?如果这个前提不成立的话,如果他在开发过程中遇到了很多问题的话,是不是就不能使用Scrum开发方法了?其实不然,Scrum方法强调的是开发人员的自我管理,这其中也包括了对遇到的问题的自我解决。鼓励团队成员在遇到问题时积极向有经验的开发人员咨询(并非被动等待),建议多用高效地面对面地口头交流方式。例如,Scrum开发方法中的每日晨会中就会要求每位团队成员提出自己在开发过程中所遇到的问题,鼓励团队成员积极地向别人寻求帮助,可以向团队内部的其他开发人员求助,必要时也可以向团队外的有经验的开发人员咨询。

网聚知识提醒您本文地址:

2.3.4遇到的问题以及解决办法lO

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

总体来说在应用Scnnn开发方法进行角色战斗系统的开发时遇到的最大问题是开发团队中缺乏相关开发经验或对敏捷开发思想不太熟悉的成员不知道应该怎样给自己的任务预估剩余时间,只是了解敏捷开发方法的形式,却未领悟敏捷开发的思想与原则。(www.loach.net.cn)

Scrum开发方法是基于经验型的开发过程,在预估任务的剩余时间时需要有相关的开发经验才能顸估地比较准确。因此在缺乏开发经验的情况下,开发人员对于剩余时间总是不敢预估。此时,一方面应该向开发人员说明任务的剩余时问不是一成不变的,预估的准确性也没有硬性规定。另一方面,有经验的开发人员应该主动帮助来预估剩余时间,这可以说在一定程度上降低了敏捷度,破坏了敏捷原则,但是对于保证整个团队召开会议的效率是有帮助的。需要向被动接受帮助的团队成员附加说明的是,这种帮助会越来越少。换句话说,随着团队成员开发经验的不断累积,敏捷度也会不断提升。

2.4小结

本章主要介绍了在游戏项目开发过程中Scrum敏捷开发方法的实际应用,并与传统的软件工程开发方法进行了比较,发现敏捷开发方法确实适用于游戏项目的开发。最后说明了在实际应用Scrum敏捷开发方法的过程中所遇到的问题以及解决的办法。

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

3系统需求分析

3.1网络游戏需求分析的特点

网络游戏和其他类型的软件一样需要进行需求分析,但网络游戏的需求的来源却与普通软件开发不太一样。[www.loach.net.cn]普通软件的开发总是有一个非开发团队成员来提出具体的需求,而作为开发团队成员就必须充分地与需求提出者进行沟通,确定具体的系统功能。并且尽可能地挖掘出一些需求提出者自己都未发掘的潜在需求。具体来说需求提出者可能是这个开发项目的资金提供者、买家等等。

而对于网络游戏开发的程序员来说,具体需求不是来自于开发团队以外的成员。程序员不需要和项目的资金提供者进行充分讨论,商量游戏的具体玩法和功能,因为他们通常根本不懂游戏。也不需要直接和未来的广大玩家进行交谈,决定游戏的内容应该怎样来设定,因为玩家通常提出的想法天马行空,比较凌乱,没有系统化,并且很多都不能实现,有些设置和游戏开发的整体思路是南辕北辙。实际上网络游戏的具体需求来源于开发团队中的策划和美术。这就是和普通软件开发的需求分析最大的不同——需求来自开发团队内部。

游戏开发团队内部需求分析的过程是比较漫长的,需要反复提炼和修改。这一点比起普通软件开发流程有过之而无不及。简单来说可以将游戏需求的获取流程归纳为:策划、美术提出策划案以及美术工具的需求之后转交给程序员,由程序员来衡量编码实现的工作量、难度,最后程序员和策划美术协商确定最后需要编码实现的功能,同时还需要挖掘潜在的需求。

看起来需求分析的流程不太复杂,工作的难点在于策划案的提出,其实不然。在整个需求分析的环节中最难把握的是程序员和策划的讨论和协商。在解释其原因之前先介绍一下策划的工作范畴。

网络游戏策划是将某一个想法变为可以实现的设计。想法可以是简单或复杂的,可以是普通或天马行空的。网络游戏首先是一件商品,其次才是一件艺术品。游戏公司需要靠游戏来获得利润,如果游戏不能给公司带来利润,策划作为开发团队的一员自然需要反省一下自己的设计思路和方案。因此策划的想法和思想都会受到“获利”这个前提的约束,从而经常需要参考和研究其他广受欢迎的网络游戏的出彩之处以及广大网络游戏玩家的喜好和心理。关于公司的利润,大家都知道利润简单来说等于收入减去支出。把游戏设计得非常漂亮和好玩,能迎合广大网络游戏玩家的口味,吸引广大的玩家来玩自己开发的网络游戏,这个只是增12

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

加了公司的收入,但并不意味着公司的利润能够得到同等的增长。(www.loach.net.cn)在利润公式中的另外一个重要因素就是支出,也就是成本。网络游戏的成本中有大概10%来自于支付开发团队成员的工资【27】。在开发游戏的过程中尽量节约这一部分的支出也是提高公司利润的途径之一。

因此网络游戏策划不仅需要考虑游戏的可玩性、平衡性,更重要的是还需要考虑方案的可行性,也就是编码实现的难度。如果某个方案非常有创意,但对于程序员来说,实现起来需要消耗大量的人力,那么这个方案就需要再次斟酌,看看具体是哪些功能实现起来非常耗时。通常来说这些在现有技术条件下实现起来非常费力的功能可以分为三类:费力不讨好型,另谋出路型,非要不可型。

对于第一种类型的功能是会被去掉的,这样的功能一旦多起来将会大大延缓开发的进度,加大开发成本,并且重要的是不能获得满意的回报。对于第二种类型的功能,需要程序员和策划进行详细的讨论,要么程序员能提出一种更为简单的实现,这样也就不会大大增加成本,如果不能的话就需要将功能再次细化和拆分成子功能,并将这些子功能按上面的分类方法进行分类,递归地来分析这些子功能。对于第三种类型的实现,当然是要程序员硬着头皮上的,对于这种难啃的硬骨头开发团队需要控制好风险。因为这些功能的实现难度大,地位重要,其能否实现和按期实现关系着整个项目的生死存亡,所以需要经常对这些功能的开发进度进行评估。

从上面的分析可以看出,网络游戏的策划其实需要考虑的因素非常多,受到的客观约束也很多。经常需要在创意和实现之间拿捏一个平衡点,这个平衡点找准了那么这个项目的进展将会非常顺利,因为对于策划和程序员来说都觉得这样做的性价比非常高。但事实是想要找准这个平衡点谈何容易,经常碰到的情况是:策划和程序员对某个方案的看法不一样,策划心中的平衡点可能总是多多少少会偏向创意,而程序员则刚好相反会偏向实现一些。因此在确定详细需求能够的过程中出现比较多的分歧。

其实造成这些分歧的原因很简单,策划和程序员的工作范围和思维方式有差异。因此要避免产生分歧,解决已出现的分歧的方法就是策划和程序员都要换一种思维方式来看待这些分歧。这就需要策划和程序员要学习对方领域中的一些基本方法和知识,学习用对方的思维来思考和看待事物。

网聚知识提醒您本文地址:

一般来说,策划学习在实现领域的知识比较困难,上手难度大,短期学习的效果不好。而程序员学习策划领域的知识就相对比较容易一些,容易上手,短期的学习效果明显。因此通常都是程序员相对比较对地来了解策划工作领域的知识和策划的思维方式。这也就是程序员做需求分析的难点所在,需要充分理解策划的想法和思维方式,提炼出策划真正想要的功能,并且挖掘一些潜在功能需求。13

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

这样对程序员的要求提高了,特别是做需求分析的能力。[www.loach.net.cn)

首先要会看策划写的文档。一般来说策划提供的需求都是写好的各种策划文档,程序员在拿到这些文档时怎样把文档中的功能性需求提炼出来是非常有讲究的。先要了解文档的主线和主要框架,通常这一步是比较容易做的。接下来的工作通常会很繁杂,需要和策划反复地核对文档中的每个细节。因为策划书写文档的过程中经常会将注意力放到如何将游戏设计得更完善,如何归纳整理游戏中的概念,从而忽视了别人的理解能力和感受。因此需要花时间来核对文档中的每一个概念和术语。在做角色战斗系统的需求分析过程中,经常碰到有很多游戏相关的术语和缩写需要和策划统一含义,这方面也确实耗费了一部分需求分析的时间。如何加快策划和程序员的沟通速度也是一个需要解决的问题。例如,策划可以在书写文档时按照平常游戏中的规定来使用缩写和术语,不要发挥想象力来创造新的缩写和术语,这样只会加大和程序员的交流成本。同时,程序员也需要多接触各种各样的游戏,了解游戏中的常用术语和缩写,在游戏的知识面上缩短和策划的差距。这一点在做需求分析的时候能大大缩短和策划的沟通速度。

在做角色战斗系统的需求分析时就碰到了很多这种问题,如果做需求分析的程序员没有接触比较多的游戏,那么和策划之间的交流将会变得非常艰难。比如在做引导、吟唱技能的需求分析时,一个没玩过多少游戏的程序员肯定首先会问这样一个问题:“什么是引导、吟唱技能?"。然后接下来策划必须得和程序员解释这些名词的含义,这大大影响了交流的效率。如果程序员玩过《魔兽世界》这款网络游戏的话,即便以前从未听说引导和吟唱这两个名词,策划也只需要举几个简单的例子(比如释放大火球就是吟唱技能,奥术飞弹就是引导技能等等),程序员马上就能够很具体很详细地理解了这两个名词。这还仅仅只是一个非常小的环节,如果对其他的术语和缩写程序员都能够很快地理解和反应过来,那么和策划之间交流的效率将会大大地提高。程序员多了解游戏的另外一个明显的好处就是能够帮助快速地理解策划的真实想法。特别是对于开发网络游戏角色战斗系统的程序员来说这个好处是最明显不过的了。因为角色战斗系统在各种角色扮演类网络游戏中大同小异,都是需要有一个主角,主角能够战斗,能够学习各种技能,获取经验,提升等级,追寻稀有的神兵利器等等,所以如果程序员玩过很多角色扮演类的网络游戏的话,在看策划的文档时将会非常容易理解,和策划交流时也将变得很顺利。

充分理解了策划的需求所带来的好处也是很多的。首先,能够快速地和策划核对文档中的每一个细节,确定需要实现的功能。其次,程序员能够快速地对策划提出的需求进行实现难度大小的预估。这个预估的准确与否和游戏开发的经常有很大的关系,一位经验丰富的游戏开发程序员很快就能对功能的实现难度做一14

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

个比价准确地判断,这也就是为什么在和策划进行需求分析讨论时总需要一位经验非常丰富地程序员在场来把关。(www.loach.net.cn]如果在需求分析这一关没有把握好,将会在开发过程中出现很多因为开发难度大而中途放弃的现象,这样将大大延误项目的开发进度。充分理解策划的需求的最后一个好处是不会被策划的思路所限制。关于这一点,主要会体现在将策划的需求转换成系统设计的过程中。在通常的面向对象的系统设计过程中,总是习惯将文档中的名词转换为类,将动词转换成各个类之间的关系。简单地照搬文档中的分类方法和对系统的描述来构建和设计系统会出现很多的漏洞,大大降低系统架构的通用性和代码重用度。在设计角色战斗系统的战斗技能时,最初的设计就犯了这个错误。简单地照搬了策划文档中的技能分类,在最初的开发过程中暴露了许多的问题。仔细分析了策划的需求文档中后才发现,策划的归类方法只是系统描述层面的,或者可以这样说,如果把整个系统的结构想象成树型结构的话,程序员在设计整个技能系统时可以将这种系统描述层面的分类下放到整个系统结构的底层(靠近叶子节点),而不用放到真个系统结构的高层(靠近根节点)。因为越靠近根节点就意味着这些概念对于系统结构来说就越抽象,越具有代表性。所以对于策划的文档中出现的分类需要反复地斟酌,不要一味地照搬。

另外在需求分析的交流会议上,还经常出现很多拖延或阻碍会议进行的因素,比如说策划和程序员不自觉地在为对方思考和解决问题。在想应该提出怎样的策划方案,应该怎样来设计和实现这个方案等等。这些事情应该是在会下进行的工作,结果被拿到了会上来进行,这样不仅影响效率,通常想出来的方案也不是很好。导致出现这些因素的原因主要是参加会议的人员事先准备不充分。没有注意把握会议的主要议程,所需要解决的问题。召集策划和程序员在一起开会,内容一般是策划向程序员简单讲解需求,或者是程序员向策划提出细节上的疑问。而不应该转为讨论如何设计游戏,或者是如何设计系统。和策划核对配置表也是一种需求分析,对于这种特殊的有代表性的需求分析做出了一些原则上的规定,以此来提高需求分析的效率和质量。在流程方面:

1)程序员先根据策划的需求列出所有用到的数据结构和大致流程。确定这些数据结构和流程是否能满足策划的所有功能性需求。(策划暂时不要考虑填表的方便性,注意力需放到是否满足功能性需求上)

2)策划再提出填表方便性等需求,列出策划的理想的配置表和填表流程.3)程序员和策划需要考虑从策划的理想配置表转换到程序数据结构的工作复杂度以及策划填表的复杂度,最终拿出一个平衡这两种复杂度的方案。

网聚知识提醒您本文地址:

以上这种原则上规定的流程应用于角色战斗系统的需求分析中的效果非常好,加快了策划和程序员核对需求的速度,减少了很多不必要的争执和讲解。15

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

3.2角色战斗系统框架

角色战斗系统中主要可以划分为两大块:第一,与战斗属性有关的数值计算。(www.loach.net.cn)第二,与战斗动作、特效有关的角色动作播放、特效播放与状态管理。这两部分分别侧重于服务端和客户端,与数值计算有关的部分都需要放在服务端进行,因为客户端是不可信的,为了防止某些客户端利用外挂对数值进行非法的修改,保证所有玩家的公平游戏的环境,所以所有战斗数值计算都会放到服务端进行,然后服务端将计算结果反馈给客户端。对于角色战斗系统的第二部分,它是侧重于客户端的。因为只有在客户端才需要动作的播放、特效的播放,而服务端时根本不关心此时角色的到底在播放什么样的动作,服务端只关心角色目前所处的是什么状态。关于状态的类型,主要分为移动、静止、战斗、击晕等等。这些状态将影响到角色的移动和战斗技能释放。例如某些技能在角色移动时将不允许释放,处于击晕状态下主角将不能移动或释放技能。

目前角色战斗系统的第二部分的结构还比较简单,只满足了一些最基本的需求。例如播放移动动作,角色进入战斗状态等。下面详细介绍的是角色战斗系统的第一部分,也是角色战斗系统的核心。

总体来说需要完成的功能就是三个:角色战斗属性的保存、修改、同步。

下图将角色战斗系统的核心部分的三个主要模块之间的关联关系作了简要说明。16

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

角色战斗属性在客户端的存

储.通常需要仪存的属性数量

要少于服务端

服务端客户端

角色战斗属性

角色战斗

属性的修

改流程

\\f;.战斗技能流程,也就是不\L』的战斗属性修改流程

\f;磊斗属性作为参数传入计算

l流程/性

在服务端角色的战斗过程也就是对角色战斗属性进行修改的过程,只不过由于各种因素的影响将导致修改的方式和修改量会有所不同。(www.loach.net.cn)例如角色A对角色B释放一个法术X,那么战斗系统将会根据法术x的计算流程以及角色A和角色B的某些战斗属性作为参数来计算战斗结果,最后将战斗结果反馈到角色A和角色B的战斗属性(例如,减少角色A的魔法值和减少角色B的生命值)。

3.3系统需求分析

服务端战斗属性的修改流程是整个角色战斗系统的核心部分。首先来看看策划关于战斗系统的需求示例。见表3.1,图3.2,图3-3,图3.4,图3.5。

表3.1部分战斗技能的功能描述

战斗技能名

猛击功能描述释放最大距离3格,瞬发,对敌方角色造成伤害(物理流程),并

附加lO的物理伤害,冷却时间5秒,消耗怒气10(如果未命中目

标则消耗怒气1)

闪电链释放最大距离8格,瞬发,对敌方角色造成40伤害,并跳跃到相

邻的2个敌方角色,造成20的伤害,冷却时间5秒,消耗魔法值

8017

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

火焰术引导,每秒对自己身边5*5格范围内的敌方角色(上限10)造成

20伤害,持续5秒,冷却时间5秒,消耗魔法值100

冰暴术吟唱1秒,对自己身边范围5*5格内的敌方角色(上限5)造成50

伤害,冷却时间5秒,消耗魔法值100

火球术释放最大距离15格,吟唱2秒,释放一个跟踪敌方角色的火球,

击中后造成伤害(法术流程),附加50的法术伤害,法术暴击后进

入移动和攻击加速20%的状态,持续5秒,冷却时间3秒,消耗魔

法值100

痛苦释放最大距离10格,瞬发,在敌方角色身上安装一个状态,每秒

造成20伤害,持续10秒,冷却时间2秒,消耗魔法值60

治疗术释放最大距离12格,吟唱2秒,对友方单位恢复生命值(治疗流

程),冷却时间5秒,消耗魔法值80

恢复术释放最大距离10格,瞬发,在友方角色身上安装一个状态,每秒

恢复10生命值,持续lO秒,冷却时间2秒,消耗魔法值50

下面是四种战斗技能计算流程,所有战斗技能都隶属于这四种流程中的一种。(www.loach.net.cn)每种流程中都有一个“掷骰子"的步骤,以物理攻击为例来说明其作用。实际上就是需要产生一个从0到1之间的随机浮点数,如果该浮点数落入“未命中”所在区间,则接下的计算流程将会沿着“未命中”下面箭头所指的方向进行。而“未命中”、“物理躲避”等都是角色的属性,其取值范围是大于0的浮点数(可以大于1),然而掷骰子只会在O到1之间进行,如果这六种属性的总和大于l的话按以下规则处理:区间从左至右的优先级依次递减,优先保证优先级高的区间范围。也就是说如果“未命中"的区间值为0.8,而“物理躲避"的区间值为0.4的话,那么最后参与掷骰子流程的区间只有“未命中’’和“物理躲避”,区间值分别为0.8和0.2。对应于每个“掷骰子”的区间都会有一个同名的事件与之绑定,当“掷骰子”的结果落入某个区间后,将会触发特定的事件,如果战斗技能对某种事件进行响应的话就会进入物理和法术的计算流程的最后一步——事件触发。例如在表3.1中给出的“火球术"如果暴击的话就会按照触发暴击事件并产生加速效果。

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

lliJl毒;

l伤害为ol

●li●●●

●‘‘

●■●

●●毒I●I;●●‘上●●I■’{●

伤害1=物理伤害附加率木普攻伤害+附加物理伤害

伤害描述统一为造成物理伤害,附加x点物理伤害

;:Jl:^;:善;:

;●喜-●

●●■■_●●

●●■●■●

’’

●l●●●;●●I,II-;●

网聚知识提醒您本文地址:

上|上告一’

;;上;毒;上l

}I星竺笪童三垡圭垄!!二圣查塑!堕芝奎!堕壹耋型叁垫!

;lI}liJl上;I}I事件触发l

图3.2物理攻击计算流程

图3.2、图3.3、图3.4、图3.5中的“未命中”、“命中"等区间值都是作为角色的战斗属性存储在角色身上的,在“格挡值"、“暴击上限"等参与到数值计算公式中的也都是角色的战斗属性。[www.loach.net.cn)图中虚线所分割的区间表示掷骰子后的战斗计算流程。

19

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

;上l上;I事件触发l

图3.3法术攻击计算流程图3.4效果施放计算流程

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

上l上

I治疗2=治疗l木甲方暴击

I上限治疗2=治疗1

图3.5治疗计算流程

在获取了策划的需求之后总结了最主要的两点需求:

1)实现所有战斗技能计算流程。(www.loach.net.cn)每个战斗技能也就是一个属性修改流程。2)需要提供一个流程参数配置工具,以便策划能对各种战斗技能计算流程中的可变参数进行调整,包括释放最大距离、吟唱时长、引导时长、作用范围、附加伤害、冷却时间等等。

除了这两点最主要的需求之外,还发现了其他一些隐含的功能需求:

1)当施法者正在吟唱或引导某个战斗技能时应处于静止状态,任何自身的移动行为或遭受到别人的某些战斗技能(例如表3.1中的“猛击")的攻击都将打断吟唱或引导流程。

2)在吟唱或引导流程中,如果目标跑出了释放最大范围,那么应停止吟唱或引导流程。

3)吟唱结束时才会扣除释放者的魔法值,而引导在一开始就会扣除释放者的魔法值。

4)当施法者或目标中的任意一方在施法过程中死亡,那么所有相关的战斗技能流程都应停止。

5)火球术释放出的火球在跟踪目标过程中如果遇到了障碍物将自行销毁。根据最主要的两点需求,本文提出了两种初步的设计思路:

1)提供一个具有界面的参数配置工具,每种参数都有相应的输入框,方便策划填写,最后将设定好的参数及战斗技能名导出为程序可读的特定格式。

2)使用微软电子表格(Excel)来替代界面化的配置工具,表格的每一列对应于一种参数,每一行对应一种战斗技能。策划填写好所有战斗技能后导出为文本2l

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

格式(txt格式)。[www.loach.net.cn]程序通过解析导出的文本文件获得各个参数。

第一种设计具有友好的界面,策划相对来说更容易填写,但开发成本比第二种设计高,第二种设计虽然没有界面,但策划的填写效率并没有受到很大影响。最后对程序员的实现难度和策划填写参数的方便性进行平衡考虑之后选择了第二种设计思路。其实在后来的配置表设计过程中发现使用第二种设计思路能够带来更大的灵活性。详细设计请见5.2.2.1。

3.4系统开发语言的选择

目前国内外流行的网络游戏开发都是使用Lua语言配合游戏引擎进行开发。因为Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。Lua体积小、启动速度快,它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里,和许多“大而全"的语言不一样,网络通讯、图形界面等都没有默认提供。但是L吡可以很容易地被扩展:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。Lua并不提供继承这个特性,但是可以用元表来模拟它。诸如名字空间、类这些概念都没有在语言基本特性中实现,但是我们可以轻易的用表结构(Lua唯一提供的复杂数据结构)轻易模拟。Lua原生支持的数据类型非常之少,它只提供了数字(缺省是双精度浮点数,可配置)、布尔量、字符串、表、函数、协作式多线程(coroutine)以及用户自定义数据这几种。但是其处理表和字符串的效率非常之高,加上元表的支持,我们可以高效的模拟出需要的复杂数据类型(比如集合、数组等)。最重要的是Lua是一个动态类型语言,支持增量式垃圾收集策略,有内建的操作系统无关的协程(corouine)支持。动态语言在开发过程的最大优势就是无需编译。如果使用静态语言(例如C或C++)进行开发,那么每次对代码的修改都必需重新编译和链接生成新的可执行文件,然后才能看到修改后的结果。对于一个大的游戏开发项目而言,编译和链接整个项目的时间通常都很长(一般在5到10分钟或更长),如果代码的修改非常频繁的话开发人员等待编译和链接结果的时间将会非常多,降低了开发效率。然而,使用动态语言就无需等待编译和链接,修改代码之后马上能看到修改的实际效果。动态语言的这种优势还体现在了游戏运营时对服务端功能进行修改无需停止服务端程序的运行。这样就能够在线修复服务端程序中的某些小的缺陷,也可以在线改进服务端程序的功能,大大减少了服务端程序的停机维护次数。当然,选择了动态语言意味着降低程序运行时的速度。虽然Lua作为动态语言其运行效率无法与静态语言相比(经测试,一般来说其运行时问大概是C语言的15倍),但它已被公认为运

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

行速度最快的动态语言。(www.loach.net.cn]

正因为Lua所具备的轻量级、方便嵌入、无需编译链接、在线更新服务端程序、运行速度快等特点,我们的项目采用Lm和C++混合编程的方法进行开发。Lua主要用于编写游戏逻辑部分的代码,因为逻辑代码的修改频率非常高,而C++则用于引擎和对运行速度要求很高的模块。虽然角色战斗系统的开发属于逻辑代码部分的开发,但由于服务端角色战斗属性的计算对运行速度要求比较高,当客户端发来战斗属性的计算请求时,服务器端需要实时地将结果计算出来并同步给客户端。因此在角色战斗系统的开发过程中会使用Lua和C-H混合编程。使用C++开发与战斗属性的保存和计算相关的模块,而剩余部分的功能则使用Lua开发。3.5小结

网聚知识提醒您本文地址:

本章首先分析了网络游戏需求分析的特点,总结了在需求分析过程中程序员应注意的相关事宣,提高需求分析的效率和质量(特别是和策划的沟通效率),更好更准确的获取需求,为接下来的系统设计和实现打下基础。然后本章根据策划的系统需求,确定了系统的主要功能需求以及一些隐含的功能需求,提出了两种开发和设计的思路。经过进一步分析和比较确定了最终的设计思路。

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

4系统设计的前期工作

角色战斗系统的设计与开发是基于公司已有的引擎进行设计和开发。[www.loach.net.cn)因此作为在引擎上进行的二次开发,非常有必要弄清楚已有引擎的框架和结构的原理和特点,特别是与角色战斗系统的开发过程联系非常紧密的部分。

4.1引擎框架介绍

游戏引擎最早出现在上个世纪90年代,它并非和游戏诞生在同一时刻,而是当游戏开发发展到一定程度后才产生的。游戏引擎比较准确的定义是:“游戏引擎是电子游戏或者其它交互式实时图像应用程序的核心软件组件,它提供游戏运行的底层技术,简化了游戏开发过程,支持多种硬件平台和操作系统,包括游戏主机和运行Linux、Mac0SX或Windows的桌面系统。它主要包含以下功能模块:二维或三维渲染引擎(即渲染器)、物理引擎碰撞检测(碰撞响应)、声音、脚本、动画、人工智能、网络、流(steaming)、内存管理、线程以及场景组织。”【26】

游戏引擎代表了所有非游戏本身的技术,也就是从一款游戏中剥离场景、角色、动画、音乐、剧情、人工智能、游戏规则等具体内容之后剩下的部分,因此游戏引擎可以重复使用,制作出不同的游戏。

游戏引擎中除了有可复用的软件组件外,还包括一系列可视化开发工具,它们构成了一个完备的集成开发环境。从商业角度来看,在竞争激烈的电子游戏行业中,游戏引擎作为一个灵活的可重用的软件平台,提供了全面且成熟的核心技术,使开发商在节约开发成本,降低了技术难度并加快了产品的同时发布速度,因此有人把游戏引擎称为“游戏中间件"。

在本项目中所使用的引擎同样为团队中不同的开发人员提供了便利。

首先,对于团队中的美术人员来说,引擎提供了各种各样的美术工具。例如,窗口编辑器、模型和动画导出工具、模型编辑器、特效编辑器、图素编辑器、地图编辑器等。

这些工具将协助美术制作游戏中所需的各种图片、3D模型、动作等美术资源,同时还将帮助美术人员方便地将这些美术资源保存为项目所规定的特殊格式,以便程序能够解析和使用。

其次,对于策划人员来说,为了将他们的工作成果——各个子系统所需的配置表数据(通常保存为Excel格式)转换为程序能够认识的文本格式或二进制格式,引擎提供了配置表转换工具。24

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

最后也是最重要的是引擎为程序员提供了一个可运行的框架和许多功能强大的库。(www.loach.net.cn)共包括:主运行框架、窗口管理、场景系统、对象系统、C++代码的脚本导出功能、连接控制与协议定制、Coroutine数据库、音乐音效功能、自动更新帮助库、调试帮助等。

下面将简要介绍提供给程序员的各种功能。

1)主运行框架主要是封装了程序的主循环,封装了main函数,但这只是一个连窗口都没有打开的进程。在主循环汇中提供了引擎事件的通知机制,例如OnStartUp,OnStartUp,OnCleanUp,OnConnected,OnObjectCreated,OnEnteredAoiOf.OnDataReceived等等。进行游戏开发就是在这些事件通知函数中填写代码。

2)窗口管理是一个类似于MFC中的窗口系统非常相像的功能完备的框架。它提供了CWnd、CButton、CEdit等等类,拥有增强的3D功能并可以从窗口资源中创建编辑好的窗口。

3)场景系统可以载入地图编辑器产生的地图文件,并自动渲染、自动播放场景音效和音乐。场景系统可以与对象系统互相协作,以此在场景中创建对象。服务端程序只需要调用SceneMgr.CreateCoreScene(“场景文件名”)即可创建一个服务端的场景。然而客户端无需调用创建函数,在服务端设置了客户端所在场景后,客户端引擎会自动创建指定的场景,利用事件回调通知逻辑代码。

4)对象系统封装和固化了网络游戏中与对象信息同步有关的功能。包括:可视关系、自动创建和删除、广播范围控制、广播时机、移动和寻路功能、位置同步、主被动状态切换等功能。对象系统还封装了客户端对象的外观显示功能,包括:模型、特效、动画、柔布等等。

5)C++代码的脚本导出功能将把导出到lua中,为衔接高效c抖代码与lua代码服务。如果一些游戏代码用脚本编写效率不能达到要求,就可以用c抖编写,然后用这个功能导出到lua中。引擎本身的功能也是这样到出到脚本代码中的。

6)连接控制与协议定制提供进行网络连接和数据收发的全部功能,进行一定程度的连接数据加密。还提供了定制lua代码进行远程函数调用的机制。

7)Coroutine数据库提供sql函数定义功能,把sql语句转变成一个函数,利用lua代码直接调用。利用Coroutine实现的sql调用机制,使得可以并发执行sql语句,并且不会因为io的原因阻塞服务器运行。Coroutine数据库还提供了完善的Coroutine频道机制,解决多连接同时访问数据库的数据一致性问题。

8)音乐音效库提供了播放音乐和音效的功能,并提供了多频道管理的功能。9)自动更新帮助库能提供可配置的自动更新信息,例如:版本号、patch下载地址。另外还提供了BT下载patch的功能和应用patch的功能。

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

10)调试帮助功能其实是一个可开关的lua调试器。(www.loach.net.cn]在出现lua错误时可设置为自动弹出,进行现场调试。同时它还能提供可开关的产生CorcDump的功能。出现卅异常时可产生CoreDump文件。用给WinDebug进行分析。

网聚知识提醒您本文地址:

4.2引擎对象系统的介绍

在简要介绍完引擎的整体框架之后将要详细介绍与角色战斗系统密切关联的系统——对象系统。因为每个角色,无论是主角还是NPC都是一个对象,或者可以这样说,每个角色都是派生自对象。

首先将介绍在引擎层面上的对象系统。对象这个概念在引擎中的定义是:在场景中存在的实体,具有移动、自动寻路、自动同步位置、自动创建和删除镜像对象等功能。可以看出,对象不能脱离某个场景而存在,所有对象的创建必须滞后于场景的创建和加载,然后由场景来负责创建和销毁对象。在这里附带说明一下为什么引擎的对象系统具有这些功能,换句话说为什么对象系统会是引擎的一部分而不是作为游戏逻辑代码的一部分。因为仔细琢磨对象所具有的功能和属性的话,可以看出这些功能和属性会存在于每个MMORPG游戏中,无论游戏的内容有着千差万别的变化,只要游戏中存在角色,那么就会存在移动、寻路和自动位置同步等等。所以这些对于每款MMORPG游戏都适用的功能理所当然的提炼到了引擎中,加快下一个游戏项目的开发进度。这也就是游戏引擎所有组成部分的由来原因,也是它们之所以能够成为引擎的一部分的重要原因。

下面将分别介绍存在于客户端和服务端的引擎对象。在服务端,对象可以被逻辑代码(使用引擎的代码,也可以理解为在引擎基础上进行二次开发所编写的代码,因为这些代码与正在开发的游戏的内容和逻辑有着紧密的联系,并非所有MMORPG游戏的共性,因此也就被称为逻辑代码)来创建和删除。创建、删除的方式是由引擎代码提供创建、函数,逻辑代码在合适的时机来调用对象创建、函数。在客户端,对象不能被逻辑代码创建和删除,也就是说引擎代码不会对外提供创建和删除函数,对象的创建和删除由引擎代码内部进行统一管理。这是因为,每个客户端对象都需要依附于某个服务端对象,不然的话客户端对象的所有信息不会被服务端得知,所有客户端对象的请求也不得到服务端的响应,这样客户端对象只是一个行尸走肉,空壳而已,没有任何存在的意义。既然每个客户端对象都需要依附于服务端对象,因此客户端对象的创建也就没有必要开放给逻辑代码。如果逻辑代码也可以直接创建客户端对象的话,客户端对象的创建时机就有可能先于服务端对象,这样就违背了对象创建时机的约定,违反了设计原则。所以与其将创建客户端对象这个功能开发给逻辑代码,给编写逻辑代码的程序员留下一

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

个可能犯错的隐患,还不如不将这个功能开放给逻辑代码,而是在引擎内部统一实现和管理。(www.loach.net.cn)

在服务端,存在两种对象:独裁对象(CoreObjectDictator)和仲裁对象(CoreObjeetMediator)。在客户端,存在两种对象:主动对象(CoreObjectDirector)和跟随对象(CoreObjectFollower)。对象名字前面的Core代表着这是引擎对象的意思。

在介绍这四种对象之前,先介绍一下AOI(AreaofInterest)这个概念。AOI指的是某个连接所能观察的最大的信息区域,进入某个AOI范围的服务端对象的信息才会发送到对应的客户端。例如在客户端,AOI范围也可以理解为客户端程序所渲染的画面的范围。

独裁对象可直接由游戏逻辑控制其移动行为。独裁对象进入某个服务端对象的AOI时,该AOI对应的客户端会自动创建一个跟随对象,该跟随对象的移动行为完全由独裁对象所控制。独裁对象离开AOI后,对应的跟随对象被自动删除。

仲裁对象是一种独裁对象,但是具备独裁对象所没有的能力。仲裁对象有一个主动对象与其对应,他们的生存周期是一致的。仲裁对象可工作于跟随模式或主动模式。处于跟随模式的仲裁对象的行为由主动对象控制,但是为了防外挂,主动对象的所有行为都会经过仲裁对象校验,如果行为超出容许的范围,将会判定为外挂。仲裁对象工作于主动模式的时候,其行为不再受主动对象控制,相反他还控制主动对象的行为,相当于使主动对象变成跟随对象。

跟随对象是可以被客户端看见的由其他玩家或者AI控制的对象。例如NPC(称为NPC跟随对象)和在客户端看见的其他玩家控制的角色(称为主角跟随对象)。

主动对象是一种跟随对象,但是具备跟随对象不具备的能力。他可以由该客户端的玩家控制。如果服务端对象夺回控制权,主动对象就退化成跟随对象。例如自己控制的角色。一个客户端连接只能有一个主动对象。

4.3引擎对象的位置同步策略

本节将介绍引擎对象所实现的最重要的功能之一——服务端对象与客户端对象的位置同步。在MMORPG中,角色的位置信息非常重要,尤其在战斗系统中的影响。例如,主角释放技能需要做施法距离判断。如果同一个角色在客户端与服务端的位置不一致甚至有着很大差异时,给玩家的印象将会非常差,大大降低了游戏的可玩性。设想一下,在客户端,主角的AOI中有一个NPC,按照常理主角能够攻击NPC并且客户端给玩家的提示也表示NPC在主角的施法范围之内,但是由于NPC或者主角的位置信息未能及时和服务端同步,因此所有主角的施法命

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

令发送给服务端之后得到的反馈却是无法施法。(www.loach.net.cn)这样位置不同步的现象对于玩家来说是非常恼火的,因此必须减少这种现象发生的次数和每次持续的时间以及位置差异的大小。

关于不同步现象发生的主要原因其实很简单,那就是网络延时。因为网络延时是无法消除而且是不可控的,因此只要角色处于非静止状态,位置的不同步是必然会出现的。我们只能尽量减少在角色移动过程中服务端和客户端对象位置的差异和持续的时间。因为在服务端和客户端,所获取的场景信息都是一样,在起点位置、终点位置都一致的情况下所产生的路径必然是一致的。这样服务端只需要每间隔一段时间将自己在这条路径上的移动进度同步给客户端就行了。当客户端的位置处在差异时应该如何来纠正呢?如果总是强行设置客户端对象的位置,给玩家印象就会很糟糕,因为角色在客户端总是会瞬间移动。因此在客户端会进行移动平滑处理,当客户端对象的移动进度提前于服务端对象的话就降低客户端对象的移动速度,反之则提高客户端对象的移动速度。这样给玩家的感觉也就没有很卡的感觉,整体感觉也就非常平滑。当然也会存在强行设置客户端对象的情况,一般来说会设定一个阀值,当综合考虑位置差异和时间延时等因素后,发现超过预先设定的阀值时就会强行设置客户端对象的位置。通常的做法是,位置差异越大,时间延时越长,强行设置客户端对象位置的可能性就越大。

网聚知识提醒您本文地址:

4.4引擎对象的其他同步

引擎对象系统除了位置信息同步外还有其他一些同步,包括动作播放同步、对象面朝的方向同步、速度同步、装备同步和数值变化同步等。这些同步因为不需要做复杂的平滑处理,信息准确性的要求也不高,使用的方法就是当事件触发或者数值变化的时候,由服务端到客户端进行远程调用的办法来进行同步。4.5逻辑对象与引擎对象的关联

在介绍逻辑对象与引擎对象的关联之前先说明一下逻辑对象的概念。逻辑对象的概念可以从两个方面来理解。首先从字面意思来看,逻辑对象是由逻辑代码创建和销毁的。从功能上来说,逻辑对象是引擎对象的扩充,逻辑对象是角色战斗系统的参与者,它保存了角色的战斗属性(与战斗数值计算相关的属性,例如,角色的攻击、防御、生命值等),因此它必然会参与到角色战斗技能数值计算的流程。此外它还将参与角色动作播放以及动作状态转换的过程。因此可以这样说,角色战斗系统的开发主要就是围绕着逻辑对象的开发和完善所进行的。

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

因此首先需要解决的问题就是逻辑对象如何才能“继承"引擎对象的功能。(www.loach.net.cn)最直接的方法就是使用面向对象的继承了,这样逻辑对象就“是"引擎对象了,自然引擎对象的所有功能逻辑对象也就拥有了。但我们没有采用这样一种方式,而是下面将介绍的另一种方法。这样做的具体原因是由于逻辑对象与引擎对象的创建时序是错开的,在客户端的引擎对象是由引擎内部直接创建的,然而逻辑对象却是由逻辑代码创建的。因此不能直接使用面向对象的继承方法。

首先举一个例子来说明逻辑对象与引擎对象间的关联方式。

逻辑代码中的Player对象拥有一个指向引擎对象CoreObject的指针,初始化这个指针就是将引擎对象关联到了逻辑对象。这样一来逻辑对象才能使用引擎对象提供的功能。引擎对象中也有一个handler指针,调用SetHandler函数并以逻辑对象作为参数传入函数,这样就将逻辑对象关联到了引擎对象。随后引擎对象就可以对逻辑对象及其行为进行操控和修改。参见图4.1和图4.2。

BaseHanlder

么∑CoreObject

-m—handler:BaseHanlder

+SetHandler0

+GetHandler0

Player

—m_CoreObject:CoreObject

日一mCoreObj

图4.2逻辑对象与引擎对象的关联

在服务端对象创建和关联的流程如下:

1)创建逻辑对象:在逻辑代码中实现,一般为CServerPlayer.new0等。此时创建的逻辑对象只是一些数值。并不能完成真J下的渲染、移动、战斗等实际功能,除非依附于一个引擎中的对象。

2)创建引擎对象并将逻辑对象关联到引擎对象:获取场景对象,并由场景对象创建一个引擎对象。创建DictatorObject或MediatorObject的时候就已经将指向

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

逻辑对象本身的指针作为参数传入了创建引擎对象的函数,所以在创建引擎对象的同时逻辑对象已经关联到引擎对象。(www.loach.net.cn]

3)将引擎对象关联到逻辑对象:将引擎对象返回并保存到逻辑对象的m_CoreObject。

客户端对象的创建、关联总是滞后和受控于服务端对象。并且在客户端,主动对象和跟随对象的创建和关联流程还有比较大的不同。

客户端主动对象创建和关联的流程:

1)创建逻辑对象:由于玩家是主角,在服务端的相关对象创建和关联完成之后会通知客户端进行同步创建并初始化一个逻辑对象。

2)创建引擎对象:引擎中的场景对象在收到服务器发过来的命令后创建主动对象。

3)关联引擎对象和逻辑对象:在引擎对象创建完后马上会回调逻辑代码中的OnObjectCreated函数,完成引擎对象和逻辑对象的关联。

跟随对象只有在一个玩家或NPC(取名为A)进入了另一个玩家或陷阱(取名为B)的视野范围时才会创建,所以其创建时机以及关联步骤都不一样。首先在引擎中,服务端发消息给客户端创建跟随对象,同时将将A已进入B的视野范围这个事件压入队列统一派发。客户端跟随对象创建和关联的流程:

1)创建引擎对象:服务端发消息给客户端创建跟随对象,客户端场景对象在收到服务器发过来的命令后创建A的跟随对象。

2)创建逻辑对象:首先在服务端,引擎派发“A已进入B的视野范围”这个事件并以回调的形式通知逻辑对象B,然后B通知逻辑对象A把A的信息同步给B。此时A的服务器端逻辑对象才会利用远程调用发消息给客户端创建一个A的客户端逻辑对象,并将引擎中的跟随对象和逻辑对象进行关联。

4.6小结

本章主要介绍了与角色战斗系统关系非常紧密的引擎对象系统,以及相关的角色位置同步策略等。分析了角色战斗系统和引擎对象系统的关联关系,介绍了引擎对象和逻辑对象的概念以及他们之间关联的具体实现方法以及关联步骤。深刻理解引擎对象的概念和功能,以及不同引擎对象和逻辑对象之间关联方式和步骤将有助于设计和开发角色战斗系统。

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

5系统设计与实现

5.1角色战斗属性的保存策略

角色的战斗属性是整个角色战斗系统的基石,所有的角色战斗流程都要围绕着战斗属性来进行。[www.loach.net.cn)首先介绍的是角色属性的分类。在游戏中,依照属性同步频率的高低以及存储的范围分为了易变值(AgileValue)和计算值(CalValue)。

易变值(AgileValue)-服务端一旦做了修改,需要马上同步给客户端,客户端保存有最新的易变值数据。例如生命值,魔法值等。AgileValue存储在服务端的CFighterMediator对象以及客户端的CFighterFollower、CFighterDirector对象身上。补充说明一下CFighterMediator对象:CFighterMediator对象是角色战斗系统服务端用来管理战斗数值计算的对象。该对象是属于逻辑对象的一员,与之对应的是引擎对象中的仲裁对象(CoreObjectMediator),因此取名为CFighterMediator。客户端的CFightel'Follower、CFighterDirector也是逻辑对象,并与引擎中的跟随对象(CoreObjectFollower)、主动对象(CoreObjectDirector)。

网聚知识提醒您本文地址:

计算值(CalValue):服务端修改属性之后不需要立马同步给客户端。只有当客户端需要获取最新的计算值数据时才发消息给服务端。要求其将数据同步下来。例如防御,攻击力等属性。CalValue存储在服务端的CFighterMediator对象以及客户端的CFighterViewlnfo对象身上。先补充说明一下CFighterViewlnfo。CFighterViewlnfo对象的生存周期和客户端角色面板的生存周期是一致的,创建角色面板时需要创建一个CFighterViewlnfo对象,并向服务端发送请求同步所有的CalValue。面板关闭时CFighterViewlnfo对象也随之消亡。

所以客户端的CFighterFollower、CFighterDirector只继承CFighto'A#lelnfo(所有AgilValue的容器类)。服务端的CFighterMediator才会继承CFighterCallnfo(所有CalValue的容器类)和CFighterAgilelnfo。

CFighterCallnfoCFighterAgilelnfo

△么∑

l千千

ll

CFighterFollowerCFighterDirectorCFighterViewlnfoCFighterMediator

图5.1战斗属性存储结构31

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

接下来将介绍供给外界读写战斗属性的接口。(www.loach.net.cn]因为C++代码和Lua代码都有可能对战斗属性进行读写操作,所以下面将分别介绍提供给C++/I,ua代码的接口。

由于属性数据的修改方式可以是加/减某个绝对值,或者是乘以某个百分比。因此对于每个属性,都提供了adder和multiplier来保存所作的修改。又因为特定职业和特定等级的角色的所有属性都有一个固定的基础值,因此服务端和客户端都有一个全局的二维数组来保存所有属性的基础值。

总之,每种属性至少由三个值构成:basic,adder,multiplier。

属性最终值=(basic+adder)事multiplier

因此每种属性都会提供GetAdder/SetAdder/GetMultiplier/SetMultiplier/Get等接口。但是在CFighterAgilelnfo中的CHealthPoint/CManaPoint等AgileValue中的basic,adder,multiplier保存都是与MaxHP,MaxMP相关的数值。而角色当前的HP,MP则是由另外一个变量mValue来保存,同时提供了LimiGet/LimiSet两个接121来对当前HP,MP进行读/写。之所以要对AgileValue提供不同于CalValue的接口,是因为每次修改AgileValue时需要和AgileValue的最大值进行比较,不能超过其最大值。

所以在C++代码中,直接使用各个属性提供的接口:

GetAdder/SetAdder/GetMultiplier/SetMultiplier/Get/LimiSet/LimiGet。

为了给Lua代码提供统一的属性读写接口,另外设计了一套机制。之所以要另外设计一套机制提供给Lua代码是因为如果不这样做的话,每次新添加一个属性就要向Lua代码注册新的读写接口。这样既加大了代码量,又增加了代码维护的复杂度。因此设计了适用于所有属性的读写接口,以后需要添加新的属性时就不再需要注册新的读写接口。

设计了四种具有统一读写接口的Adapter:ValueAdapter

AdderAdapter

MultiplierAdapter

AgileValueAdapter

然后为每种AgileValue创建四种Adapter,为每种CalVlaue创建前三种Adapter。将所有Adapter保存在一个vector中,下标的编号规则为:

ValueAdapter

AdderAdapter一属性ID幸4一属性ID}4+l

MultiplierAdapter一属性ID宰4+2

AgileValueAdapter一属性ID宰4+3

这样我们就能对Lua提供统一的读写接口,传入不同的Adapter编号就能对不32

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

同的属性进行读写操作。[www.loach.net.cn]

由于数字不如字符串直观,我们又提供了使用字符串来索引Adapter的接口。对应规则为:

ValueAdapter

AdderAdaptcr一“属性名”一“属性名”+‘'Adder'’

一“属性名”+“Multiplier'’MultiplierAdapter

AgileValueAdapter一“属性名”+“Agile'’

例如,传入”HealthPoint”,’'HealthPointAdder'’,“HealthPointMultiplier'’,“HealthPointAgile”来读取属性值的话,分别得到的是MaxHP,MaxHPAdder,MaxHPMultiplier,CurHP。

在现有的框架下,若要添加一个新的属性及其提供给Lua的读/写接口就变得非常的容易。添加新属性的具体步骤为:

1)在EPropertylD中添加枚举变量。

2)在CFighterAgilelnfo/CFighterCallnfo中添加新的属性。

3)创建Adapter。

5.2角色战斗属性的修改策略

角色战斗属性的修改策略也是整个战斗系统的核心部分之一,在这个部分花费了大量的时间来设计、编码和调试。在开始设计之前,目标非常明确,首先角色战斗系统要尽可能地覆盖所有《魔兽世界》、《魔兽争霸3》中所出现的战斗技能。这两款游戏代表了当今世界游戏界的权威与经典,代表了目前角色扮演类游戏的最高水平。其次,需要给策划提供一个结构清晰、调试方便的工具以便他们来对角色战斗系统进行数值平衡性的调试。

网聚知识提醒您本文地址:

为了达到第一个目标,我们总结归纳了绝大部分《魔兽世界》、《魔兽争霸3》的战斗技能,根据技能释放方式、效果产生方式的不同将技能分类并提取各个类别的主要特征。然后,为了提高开发效率实现多人并行开发战斗系统,我们将整个战斗流程拆分为不同的模块。各个模块在概念、功能划分上有着严格的区分和定义。

5.2.1客户端与服务端战斗流程的总体设计

首先分析和设计了客户端与服务端战斗流程的具体步骤以及它们之间的交互:

33

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

1)首先客户端的施法者选定目标,将目标同步给服务端。(www.loach.net.cn]以选中目标的引擎对象的编号作为参数。

2)客户端施法者进行战斗技能释放条件的预判,预判通过后向服务端发送释放技能的命令。以技能的编号作为参数。关于技能编号请参见表5.1。

3)服务端角色进入战斗技能流程,最后将计算结果返回给客户端并在客户端显示。在服务端的战斗技能流程中还需要通知客户端播放相应的角色动作和特效。

因为客户端和服务端的网络传输采用的是TCP协议,所以在服务端保证了设置选定目标的命令一定比释放技能的命令先得到处理,从而确保了服务端选定目标的正确性。

下图是一次战斗流程的客户端与服务端交互流程图。图5.2客户端服务端战斗流程

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

5.2.2服务端功能模块及配置表的详细设计

5.2.2.1详细设计方案

在配置表的最初设计方案中考虑到了所有的功能需求以及参数配置相关的需求。[www.loach.net.cn]设计各个配置表的过程其实就是设计和划分整个战斗系统的各个模块的过程。基本上战斗系统的每个模块都将对应于一个配置表,除了魔法操作这个模块(具体原因请参见本小节最后)。

1)技能:所有战斗技能流程的入口点。主要的功能是解析此次技能释放的目标类型,技能冷却时间判断,技能释放的距离范围判断,以及调用该技能所拥有的魔法效果,每个技能最多只拥有一个魔法效果。

配置表中“魔法效果"一栏中所填写的名称将作为索引与魔法效果表一一对应,关于使用字符串作为索引的原因请参见5.2.2.2。在表中还有“编号"一栏,其作用是作为客户端和服务端共同的技能索引,缩短客户端发送释放技能命令的网络包长度。表中“选中目标类型"一栏中填写的是该技能的释放目标类型,共有“空地"、“确定敌方目标”、“确定友方目标"、“自身"、“自身所在位置”等5中类型。详见下表。

表5.1技能表

技能名称编号选中目标类型最小施法最大施法冷却

距离距离时间魔法效果

闪电链2确定敌方目标O85闪电链效果火焰术3自身所在位置OO5火焰术效果火球术5确定敌方目标O153火球术效果痛苦6确定敌方目标0lO2痛苦效果

2)魔法效果:该模块在战斗技能流程中起着承上启下的作用。主要的功能是对技能作用目标(注意与技能中的释放目标的区别)进行再次筛选,并对筛选出来的技能作用目标使用魔法操作,也就是调用魔法操作并以技能作用目标作为参数传入。

配置表中“魔法效果名称”是整个表的主索引,因为每个魔法效果可以拥有多个魔法操作,所以多个魔法操作在表中以多行的形式存在,这样做的好处请参见5.2.2.2。“操作类型”一栏标识了魔法操作的类型,决定了魔法操作的执行时机。各种魔法操作的执行流程请参见图5.3。“目标再次筛选"说明了筛选作用目标的类型。共有“自身”、“自身地点周围自身的队友”、“自身地点周围自身的敌人"、“目标"、“目标地点周围自身的队友"、“目标地点周围自身的敌人”等六种类型。

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

“筛选半径”说明了筛选的范围,“目标上限"说明了在筛选范围内最多能对多少个目标产生作用,如果筛选出来的目标数超出了上限则选择最先筛选出的目标执行魔法操作。(www.loach.net.cn]对于“自身’’、“目标’’这两个非范围筛选的类型将忽视筛选范围和目标上限。“魔法操作"一栏中填写的是魔法操作名,也就是程序中提供的各种魔法操作的索引。“魔法操作参数"中填写的是输入到魔法操作中的参数。每个魔法操作只能接受一个参数。关于魔法操作的具体介绍请参见本小节最后的详细介绍。魔法效果配置表示例请见表5.2。

图5.3魔法效果流程图条件操作最先被执行,在判断技能施放条件的时候就会被调用,主要用于检

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

测消耗参数,距离检测等。(www.loach.net.cn)每个魔法效果最多有一个主操作,而且主操作一定会被执行。每个魔法效果可以有多个必须操作,所有必须操作也是一定会被执行。临

时操作(必须是可撤销魔法操作)在主操作之前执行,并且在所有操作结束后被

撤销(执行逆操作)。与主操作相关联的成功、暴击、失败等操作要根据主操作的

返回结果来有选择地执行。如果没有主操作则与之相关联的操作也不能存在。

表5.2魔法效果表

魔法效果名

称闪电链效果闪电链效果闪电链效果闪电链伤害1闪电链伤害2火焰术效果火焰术效果火焰术生效

操作类型条件主必须主主条件主主条件条件主必须主暴击临时条件主主主

目标再次

筛选

自身目标自身

筛选半径

目标上限

魔法操作魔法值大于施放可传递魔法改变魔法值改变生命值改变生命值魔法值大于

魔法操作参数

80

闪电链

.80一40.20lOO一lOO

目标

目标自身自身自身地点周围自身的敌人自身自身目标自身目标自身自身自身目标目标自身

、‘

改变魔法值

lO

改变生命值魔法值大于魔法值大于释放子弹魔法改变魔法值法术攻击伤害计算

安装魔法状态改变附加法术伤害

魔法值大于安装魔法状态改变生命值改变移动速度百分比

改变攻击速度百分比

网聚知识提醒您本文地址:

.20

火球术效果释放火球释放火球释放火球火球术生效火球术生效火球术生效痛苦效果痛苦效果痛苦生效移动攻击加速生效移动攻击加速生效

100100

火球

一1001.5

移动攻击

加速

1.560

痛苦

一100

O.2

自身

0.2

3)施法流程:归纳了两种应用最广泛的施法流程——吟唱与引导。吟唱就是

37

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

施法者需要在原地准备几秒的时间后才能释放出法术。(www.loach.net.cn)而引导是施法者能够瞬间释放法术并且持续释放几秒的时间,在这几秒的时间内每隔一秒将产生一次效果,同样释法者在引导过程中不能移动。每个施法流程都将拥有一个魔法效果。对于吟唱流程而言,在吟唱流程结束后将执行魔法效果,而对于引导流程来说,将每隔一秒执行一次魔法效果直至施法时间结束。施法流程配置表示例见下表。

表5.3施法流程表

施法流程名称

火焰术

火球术施法类型引导吟唱施法时间52魔法效果火焰术生效释放火球

4)魔法状态:归纳了所有在角色身上存在各种正面或负面效果。例如,暂时在角色身上存在的附加效果,增加角色攻击速度和移动速度,每隔一秒减少生命值10等等。该模块实现了在一定时间段内暂时提高角色战斗属性、在一定时间段内每间隔1秒产生某种效果、状态消失时产生某种效果等功能。并且实现了不同施法者对同一角色安装相同的魔法状态时的叠加规则。魔法状态最后将由魔法操作安装到作用目标角色身上。

配置表中“群体叠加类型"和“叠加上限”两栏说明了魔法状态的叠加规则。共有三种叠加规则:集中(不同施法者所安装的状态叠加到一个图标上)、分散(不同施法者所安装的状态叠加到各自不同的图标上)、唯一(不同施法者所安装的状态不能同时存在)。当角色身上存在某种状态时,客户端中该角色的头像下方将会出现相应的小图标,小图标的编号就应填写在“对应小图标编号’’一栏。关于魔法状态中三种魔法效果的执行流程请参见图5.4。魔法状态配置表示例见表5.4。38

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

I执行最终不可

I撤销魔法效果

l撤销可撤销魔

I。[www.loach.net.cn]法效果

E结束流程‘i

图5.4魔法状态执行流程

表5.4魔法状态表

魔法状群体叠叠加作用对应小

态名称加类型上限时间图标编可撤销魔不可撤销不可撤销最

号法效果间隔魔法

效果终魔法效果

痛苦分散1lOl痛苦生效

移动攻唯一移动攻击152

击加速加速生效

下面是四种魔法,这四种魔法的共同特点是魔法的产生和魔法的生效之间有时间间隔。虽然在时间间隔方面与引导流程有类似的地方,但最大的不同点在于施法者在释放完魔法之后可以自由移动。这四种魔法释放出来后并不是存在于某个角色身上,这一点是与魔法状态的最大区别。下面对这四种魔法所实现的功能做了说明。并列出了最具代表性的子弹魔法和可传递魔法的配置表示例。

5)子弹魔法:实现了类似于子弹飞行的技能。魔法释放后将产生一颗向目标飞行的子弹(或类似物体),击中目标后产生效果。释放的目标必须是某个角色。39

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

配置表示例请见表5.5。(www.loach.net.cn]

6)冲击波魔法:实现了向某个地点释放冲击波的技能。冲击波将从施法者向目标地点推进,所经过的地方如果有角色的话将对角色产生效果。

7)可传递魔法:实现了在一定范围内的角色间传递的功能。例如,释法者对目标A释放了可传递魔法并对A造成了X点伤害,随后该魔法将由A自动传递到周围的目标B并对B造成Y点伤害,再由B传递下去直到达到魔法传递的次数上限或指定范围内没有其他目标为止。配置表示例请见表5.6。

8)位移魔法:实现了主角位置的快速移动。例如,瞬间移动主角的位置。

表5.5子弹魔法表

子弹魔法名称飞行

速度

10魔法效果火球术生

效火球

表5.6可传递魔法表

可传递魔法名称

闪电链传递次数上限2传递范围10传递速度O.3主魔法效果闪电链伤害1副魔法效果闪电链伤害2

最后对整个战斗系统的底层核心部分进行详细说明。

9)魔法操作:整个战斗系统的底层核心部分。按功能可以划分为三种类型:数值修改型、功能型和流程型。所有涉及到战斗属性的修改都要通过数值修改型魔法操作来完成,因此在整个战斗流程中无论是吟唱、引导还是魔法状态最后都要由魔法操作来完成对战斗属性的修改。魔法操作实际上封装了战斗属性提供的读写接口。例如,“改变生命值50”这个魔法操作将找到作用目标的生命值这个战斗属性并将值提高50。魔法操作除了能够修改战斗属性之外还提供安装魔法状态、释放子弹魔法等功能型的魔法操作。这些功能型的魔法操作将对作用目标创建指定的魔法状态或子弹魔法。流程型的魔法操作将实现特定的计算公式,并通过这些公式来计算最后的结果,最后才将最终结果应用到角色的战斗属性。例如,“物理攻击伤害计算”这个魔法操作将根据策划提出的物理伤害计算公式和流程(见图3.2)来计算此次物理攻击的伤害值,最后修改目标的生命值。

外界给魔法操作直接传递的参数只有一个,且不同类型的魔法操作所接受的参数类型不相同。例如,数值修改型魔法操作接收的参数类型为整型或浮点型,而功能型魔法操作接收的参数类型为字符串。具体实现方法就是使用C++中联合体来保存参数,外界并不会进行参数类型的匹配和检查,只负责将参数传给魔法操作,具体的参数类型解析由魔法操作自己来负责。除了接收直接传入的参数以外,魔法操作还将通过施法者和目标角色来间接的获取各个战斗属性。施法者和

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

网聚知识提醒您本文地址:

目标都是CFighterMediator类的对象,它们所具的战斗属性(关于属性存储请参见5.1节)对于魔法操作来说都是可读写的,实现了伤害计算和角色战斗属性的修改。(www.loach.net.cn)具体请见下图。

图5.5魔法操作的参数传递途径

因为魔法操作的调用者只能是魔法效果,在魔法效果表中已经涵盖了所有魔法操作及其直接参数,所以魔法操作配置表已合并到魔法效果配置表之中。

5.2.2.2设计方案的优点

总体来说该设计方案有着以下突出优点:

1)功能模块间的耦合度低,各个模块的概念非常清晰和完整。

2)可读性好,易于策划填表。在设计除了技能配置表之外的所有配置表的主索引时使用了易于理解的字符串。通常的设计思路都是使用数字来作为主索引,但是数字的可读性很低,尤其在表格数量较多、表内容比较繁多的情况下很容易造成误填,填写完之后也很难理解。但是使用字符串作为主索引在实际开发过程中遇到了性能问题,具体的解决办法请参见5.4.1。

3)魔法效果表的设计非常巧妙,每个魔法效果在配置表中占用多行,使得每个魔法效果能拥有任意多个魔法操作数并且没有带来任何的表格冗余,提高了可扩展性。同时,对魔法操作进行了分类,规定了各个种类的魔法操作的执行流程,大大提高了配置表的灵活性。41

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

5.2.2.3设计方案的缺点

该设计方案同时也存在以下不足之处:

1)由于功能强大、灵活度高造成策划前期难于理解和学习。[www.loach.net.cn)因此配置表的设计开发人员需要在前期帮助策划来填写一些典型的战斗技能。

2)每个配置表的内容修改后都需要使用微软电子表格软件将配置表(Excel文件格式)另存为文本文件(txt格式),影响修改效率。解决的办法是需要提供自动导出工具,能一次性将所有表格导出。

3)需要各种检测程序来确保填表的正确性。例如,检测表中填写的非法字符、检测魔法效果配置表中魔法操作参数的类型的jF确性等。

5.2.3客户端战斗流程设计

客户端的战斗流程设计相对予服务端来说就简单多了,主要的模块为:

1)施法条件预判:需要读取技能配置表和魔法效果配置表的数据。并对相关施法条件进行预判,减少客户端向服务端发送的施法命令。由于需要获取配置表数据,所以在客户端同样需要初始化技能和魔法效果配置表类对象。但是对于客户端来说,魔法效果配置表类对象中只需要保存条件类型的魔法操作即可,因为客户端并不需要进行任何计算。

2)播放动作和特效:这部分主要使用了引擎提供的动作和特效播放接口,只需要将动作名和特效名作为参数传入即可。

5.2.4配置表类设计

在完成所有配置表的设计之后需要设计相关的类来存储和读取这些数据。因为配置表数据对于服务端程序而言只需要一份即可,并不需要为每个角色或每个战斗流程保存一个备份,故所有配置表类的对象在服务端程序启动时统一创建并在程序关闭时销毁。每个配置表类将拥有一个静态的映射,用来保存所有(名称,配置表对象指针)的映射,同时为每个配置表类提供一个静态函数,用于读取配置表数据并初始化静态的映射。下面将以技能配置表类为例说明配置表的类设计。

classCSkillServerCfg

private:

typedefmap<string,CSkillServcrCfg幸>MapSkillServer;42

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

typedefmap<string,EFSTargetType>MapTargetType;

//建立群体叠加类型字符串到对应枚举类型的映射

inlinestaticboollnitMapTargetType0

ms_mapTargetType[”空地”】

ms_mapTargetType[”确定敌方目标”】

ms_mapTargetType[”确定友方目标”】

ms_mapTargetType[”自身”】

msmapTargetType[”自身所在位置”】

returntrue;=eFSllr.-Position;=eFS兀-EnemyObject;=eFSl]r-FfiendObject;=eFSl]r_Self;=eFS哪elfPosition;

staticMapSkillServer

static

public:

staticbool

staticvoid

static

private:

string

EFSTargetType

uint32

uint32

uint32

stringms_mapSkill;ms__mapTargetType;‘MapTargetTypeLoadSkillConfig(conststring&szFileName);//读取配置表数据UnloadSkillConfi90;CSkillServerCfg幸GetNormalSkill(constchar簟szName);m_sName;m_eSelectTargetType;//技能名称//选中目标类型//最小施法距离//最大施法距离//冷却时间//魔法效果m_uMinCastSkillDistance;m_.uMaxCastSkillDistance;myecTimeCoolDown;m_sMagicEff;

∥保存与技能名同名的施法流程配置表对象的指针

CCastingProcessServerCfg奉m__pCastingProcess;

);

这里需要补充说明施法流程配置表对象与技能配置表对象关联的方式。[www.loach.net.cn)在初始化技能配置表对象时需要检测是否存在同名的施法流程配置表对象,如果存在则获取该施法流程配置表对象的地址并初始化技能配置表对象的m_pCastingProcess变量。

网聚知识提醒您本文地址:

5.2.5服务端战斗流程综述43

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

整个角色战斗属性的修改都在服务端进行,根据以上服务端各个功能模块的设计以及配置表设计,本小节将对各模块间的关联关系以及流程做进一步阐述。(www.loach.net.cn]

因为子弹魔法、可传递魔法、冲击波魔法以及位移魔法的流程与魔法状态的流程是一致的,所以下图以魔法状态为例说明了服务端的战斗流程以及各个模块之间的关系。

I技直巨II魔法效果lI魔法操佳ll施法流程lI魔法丛态l———————r————一L————————r——————一o————————r———————一L————————r———————-J。———————1————————。

:调用

如果存在同名

图5.6服务端战斗流程

5.3角色战斗属性的同步策略

首先说明一下战斗属性需要同步的原因。其实很简单,就是服务端角色战斗计算的结果要反馈给客户端的镜像角色。

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

接下来说明同步的范围:

对于AgileValue而言,客户端需要保存最新的属性数据,因此这些属性一旦在服务端有了变动,马上需要通知客户端更新数据。[www.loach.net.cn]

然而对于CalValue来说就没有这个必要,因为服务端数据的变动并不需要及时通知客户端,除了在客户端打开了人物面板时(创建了CFighterViewlnfo对象)才需要。因此客户端没有打开任何角色面板时是不会存储任何CalValue,此时也就不需要同步CalValue。

最后介绍一下同步的方式:

同步的方式统一为回调CFighterMediator中的OnValueChanged函数。这个函数的实现是在Lua代码。

在设计服务端调用回调函数的地点时花了一些心思。为了保证属性数据的每次修改都能产生回调,在属性的SetAdder/SetMultiplier/LimitSet中都调用了OnValueChanged。由于这些代码是客户端/服务端的公用代码,客户端的SetAdder又不用回调,只有修改CFighterMediator的属性时才需要回调。为了实现这个功能,在客户端/Jl及.务端的公用代码中加入一个空的OnValueChanged函数,并且在CFighterMediator中加入一个同名函数。在CFighterMediator的这个函数会转调CFighterMediatorHandler上的那个回调函数。

对于AgileValue,可以直接使用上面的同步方式,称之为实时同步。

对于CalValue,如果直接使用上面的同步方式,那就和AgileValue一样变成了实时同步了。而CalValue对同步的实时性要求并不高。同步CalValue的设计思路是:当客户端打开了某个角色的面板时,表示该客户端关心已打开面板的角色的CalValue的变动,一旦服务端修改了该角色的CalValue就需要及时的将最新数据同步给打开了该角色面板的客户端。

5.4系统实现过程中遇到的问题及解决办法

5.4.1关于计算流程中字符串到配置表类对象的转换

在配置表中大量使用了字符串作为表的主索引,虽然提高了配置表的易用性和可读性但是在实际运行过程中却带来了性能问题。例如,当魔法效果配置表的内容越来越多时,每次战斗流程都要实时地去魔法效果的静态映射中搜索与魔法效果名称相对应的魔法效果配置表类对象指针,这样将降低服务端战斗流程的计算速度,影响整个游戏的战斗流畅程度。

针对此问题,本文提出了两种解决办法:45

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

1)在服务端程序读取配置表数据初始化配置表类对象时按照依赖关系来进行初始化。[www.loach.net.cn]例如,技能配置表中索引了魔法效果配置表,因此应先初始化魔法效果配置表类对象,然后再初始化技能配置表类对象。在初始化技能配置表类对象时先读取魔法效果名然后再通过搜索魔法效果配置表类中的静态映射来获取相应的配置表类对象的地址,并将其保存在技能配置表类对象中。这样字符串到配置表类对象的转换在服务端程序启动时就已经完成了,无需在战斗流程中实时地进行转换。然而这种方法存在一个缺点,那就是必须保证配置表初始化的顺序的正确性,如果不正确的话就会导致服务端程序内存非法访问。因此本文又提出了第二种解决办法。

2)将字符串到配置表类对象的转换时机延迟到第一次使用该配置表类对象时。仍然以技能和魔法效果配置表为例进行说明。每个技能配置表类对象都保存一个魔法效果配置表类对象的指针变量,该指针变量的初始值为空(NULL)。当第一次使用技能配置表类对象时,发现该指针变量为空,马上去魔法效果配置表类中的静态映射搜索出相应的魔法效果配置表类对象,同时将搜索的结果保存在指针变量中。下次使用这个技能配置表类对象时就不需要进行字符串到魔法效果配置表类对象的转换了。这种方法的唯一缺点就是在服务端程序第一次进行某个战斗流程时会变得比较慢,然而由于服务器重启频率非常低,对整个游戏的影响不大,几乎可以忽略不计。

5.4.2实现服务端和客户端代码的共用

在整个系统的代码实现过程中一直都在增加客户端和服务端的共用代码,提高代码的重用度。C++提供了模板这样一个强大的工具使得我们可以考虑用继承类模板的形式来实现代码共用,使得整个系统的代码更为简洁

下面将以开发设计角色战斗属性为例来详细说明该方法。

首先介绍一下已有的类结构。服务端的CFighterMediator和客户端的CFighterDirector、CFighterFollower都将继承CFighterAgilelnfo,并且服务端的CFighterMediator还将继承CFighterCalInfo。在CFighterAgilelnfo类中存储了所有易变值属性,CFighterCalInfo类中存储了所有计算值属性,并且在这两个类中的每个属性本身都提供了名字相同的读接口GetO和写接口Set()。,具体类图如图5.7所示。

网聚知识提醒您本文地址:

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

图5.7属性存储的类结构图

为了对所有的属性(包括易变值和计算值)提供一套统一的读写接口SetAttr()和GetAttrO,提高属性读写接口的适用性和可扩展性,我们可以将所有属性进行编号并将编号和属性建立一对一的映射关系,最后以每个属性所对应的编号作为参数传入统一的读写接口,这样在接口的实现部分就可以通过属性编号来找到属性并调用该属性的读写接口。(www.loach.net.cn)这样的设计虽然满足了最初的设计要求但是却必需在CFighterMediator和CFighterDirector中分别加入这样一套统一的读写接口,并且代码看起来完全一样。

因此为了提高代码重用度,引入了模板继承的方法。首先将统一的读写接口移入类模板TAttrHolder<typenameImpClass>中,随后CFighterMediator和CFighterDirector都将继承该类模板并分别以自身类型(即CFighterMediator和CFighterDirector)作为模板实参传入类模板。这样原本需要在客户端和服务端都要编写的代码如今只需要编写一份即可。

最终代码如下:

//公用代码

template<typenamelmpClass>

classTAttrHolder

//AttrType是属性类型,AttrType::Value__t是属性存储的数据的类型47

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

template<typenameAttrType>

voidSetAttr(AttrTypelmpClass::奉pAttr,typenameAttrType::Valuetvalue)

(static__cast<lmpClass幸>(this)->}pAttr).Set(value);

template<typenameAttrType>

typenameAttrType::Value_tGetAttr(AttrTypeImpClass::幸pAttr)const

return(staticcast<ImpClass奉>(this)一>宰pAttr).Get0;

∥客户端代码

classCFighterDirector

:publicTAttrHolder<CFighterDirector>

);

//ill务端代码

classCFighterMediator

:publicTAttrHolder<CFighterMediator>

);

总之,类模板继承特别适合用于编写不同进程间的公用代码,实现了静多态。(www.loach.net.cn]关于静多态的概念以及与动多态的区别在此不再敷述,请参见文献[251。

5.5小结

本章详细阐述了整个角色战斗系统的设计和实现,主要围绕了角色战斗属性的保存、修改和同步三个方面进行说明。其中角色战斗属性的修改是整个系统的设计和实现重点,包括配置表设计和流程设计。充分考虑了策划的填表方便性和配置表的可扩展性。对于所提出的设计方案进行了优缺点分析,提出了以后的改进方向。所设计模块的概念以及模块间流程的定义很清晰,有利于开发和维护。在代码实现过程中考虑了客户端和服务端代码的共用,提高了代码重用度。48

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

esactset_)

6系统测试

在完成系统的开发之后,使用了引擎提供的测试框架进行了测试。(www.loach.net.cn)验证了战斗流程的正确性。测试主要采用的是单元测试。

6.1测试框架介绍

在角色战斗系统的开发过程中使用了单元测试和整合测试相结合的测试框架。在单元测试中采用了lunit单元测试框架。该测试框架主要用来对角色战斗系统进行黑盒测试。单元测试框架的使用示例如下:

名为“testcase.1ua”的文件里面包含有测试代码。

require”lunit”

module(”my”,lunittestcase.

functiontest_successO

neverassert_false(false,”Thistest

endfails.")

functiontest_failure0

testalwaysfail(”This

endfails!”)

然后运行lunit框架就能依次调用“testcase.1ua"中的两个函数testSuccess和testfailure。得到的结果如下:

Loadedtestsuitewith2testsin1testcases.

2Assertionschecked.

1)Failure(my_testcase.test_failure):

mytestcase.1ua:1O:failure

myjestcase.1ua:1O:Thistestalwaysfails!

Testsuitefinished(1passed,lfailed,0errors).

除了单元测试框架以外,还需要整合测试框架的配合才能进行最后的测试。整合测试框架的功能如下:

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

1)建立测试环境,确保测试环境和运行环境相同。[www.loach.net.cn]

2)设计事件机制,解决异步问题。当客户端对服务端访问的时候,只有等待服务端结果的返回,才能继续运行下面的测试代码。

3)模拟鼠标操作,驱动客户端运行。

4)封装基础接口,包括自动登入、退出、重新登入等等。确保所需测试环境。6.2单元测试示例

6.2.1测试的具体步骤

网聚知识提醒您本文地址:

使用测试框架的基本步骤如下:

1)创建名为“TestFightSkill.1ua”的文件,在该文件中定义一个名为Test的函数。

2)在测试框架里包含“TestFightSkill.1ua”文件,并向测试框架注册Test函数。3)在Test函数内添加测试代码。

下面以在客户端测试子弹魔法为例进行说明。该子弹魔法将飞行3秒时间,击中目标后减少目标生命值40。

function

local

local

localTest()testcaseFightSkill=TestCase(”TestFightSkill”)controler=CTstLogJinControler:newOplayer_controler=CTstPlayerControler:new0~创建testcase

functiontestcase_FightSkill:test_LoginO

controler:OneStepLoginEx(”fight_skill”,”fight”)一主角登录

end

functiontestcaseFightSkill:test_BuUetMagicO

player_controler:MoveToGrid(1,1)

localnpc_id=player_controler:AddNpc』elative(5,5,300)

一,一一J7playercontroler:SelectCharacter(npcid)一一

localnpc__curHP=playercontroler:GetNpcCurHP(npc_id)

一主角释放子弹魔法技能

player_controler:Fight(”测试子弹魔法tt91,npc__id)

~主角刚释放出子弹,子弹此时正在飞行,因此目标生命值无变化assert_equal(npc_curHP,player_controler:GetNpcCurHP(npc_id))

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

一主角等待子弹击中目标

player_controler:Sleep(3000)

一子弹击中目标后目标生命值减少40

asscrt_cqual(npc_curHP一40,player_controler:GetNpcCurHP(npc__id))

player_eontroler:DelNpc(npe_id)

functiontestcase_FightSkill:test_LoginOut0

controler:LogjinOutFromGame()

end

所有测试用例跑完之后,如果所有assert都成功的话那么代表测试通过。(www.loach.net.cn]若有失败,则需跟踪追查bug的来源。

目前角色战斗系统客户端共有2个测试套件(testsuite),里面包含16个测试用例。覆盖了大部分角色战斗系统的主要功能,并且全部测试通过。

6.2.2单元测试结果示例

在图6.1中展示了主角对目标成功释放子弹魔法的测试用例。整个测试用例的步骤如下:

1)创建主角和目标,目标离主角的距离在子弹魔法的释放范围之内并且目标和主角之间无障碍物。

2)主角选中目标并对其释放子弹魔法。

3)子弹击中目标后自行销毁,减少目标的生命值40,并在目标的头顶显示数值。5l

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

图6.1成功释放子弹魔法

在图6.2中展示了主角释放子弹魔法失败的测试用例。(www.loach.net.cn]测试用例的步骤如下:1)创建主角和目标,目标离主角的距离在子弹魔法的释放范围之内并且目标和主角之间存在障碍物。

2)主角选中目标并对其释放子弹魔法。

3)子弹遇到障碍物后自行销毁,所以目标不会受到伤害。52

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

图6.2释放子弹魔法火败

在图6.3中展示了主角成功释放可传递魔法的测试用例。(www.loach.net.cn]测试用例的步骤如下:

1)创建主角和6个目标,所有目标都在主角的攻击范围之内,并且目标和主角之问无障碍物。

2)主角选中其中一个目标释放可传递魔法,减少其生命值20,然后可传递魔法将会传递到邻近的下一个目标,同样减少生命值20。

3)当可传递魔法传递到最后一个目标后将自行销毁。53

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

图6.3释放可传递魔法

客户端截图,数据显示正常,说明服务端的计算流程和同步过程都没有问题。(www.loach.net.cn)6.3现有测试框架的不足

现有的测试框架还只能进行单客户端的测试,无法进行多客户端的交互测试。例如,现在只能测试一个客户端的主角和NPC进行战斗的测试用例,还不能测试两个客户端的主角进行战斗的测试用例。

整合测试时,当中间某一个测试用例失败后整个测试框架就停止了。此时需要人工来检查失败的原因并修复相关的bug然后再次运行整个测试框架。如果能够暂时忽略某个测试用例的失败继续跑完所有的测试用例的话,将会减少运行整个测试框架的次数进而提高开发人员排查bug的速度。

6.4小结

本章首先介绍了系统测试所使用的测试框架,并以测试子弹魔法为例重点介绍了测试步骤。最后给出了几个实际的测试用例以及测试效果截图,验证了战斗流程的正确性。

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

7结论

本文设计并实现了网络游戏角色战斗系统的主要功能并完成了主要模块的测试代码的编写。(www.loach.net.cn)整个角色战斗系统的玩法多样,功能丰富。在设计中兼顾了代码的高效性、可维护性与策划填写配置表的方便性。对当前代表游戏最高水平的《魔兽世界》、《魔兽争霸3》中的角色战斗系统做了深入的研究,总结和归纳了角色战斗系统的各个主要模块。各模块都得到了编码实现并在整合测试框架下完成了测试。另外在实现各个模块时,充分利用了已有引擎的功能,完成了与引擎代码的协同开发。

网聚知识提醒您本文地址:

在开发前期与策划核对了角色战斗系统的主体需求,研究并探讨了常规软件需求分析与网络游戏需求分析的不同之处。总结了在进行网络游戏需求分析时,作为程序开发人员应该重点关注的地方。

在整个开发过程中应用了敏捷开发方法中最流行的Serum开发方法进行过程管理和进度控制。通过制定产品待办事宜、制定迭代计划以及召开每日会议,将敏捷方法具体地应用到了实际开发中。研究并探讨了敏捷开发方法之所以适用于网络游戏开发的原因以及给游戏开发人员带来的益处。

由于时间紧任务重,整个系统的设计与开发在以下几个方面还存在可改进之处:

1)丰富角色战斗系统的角色状态以及动作播放管理,实现角色战斗时逼真的动作效果。

2)角色战斗系统中某些可玩性比较高但实现难度较大的技能还未实现,例如角色双手持武器进行物理攻击等。

3)增强已有模块的概念完整性,并高度抽象和提炼各个模块,使之能够完成各种MMORPG游戏中角色战斗系统的功能,实现角色战斗系统纳入引擎代码的目标。

4)完善配置表工具,增加填表正确性的检测程序,最好能做成界面化的工具,提高自动性。55

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

参考文献

【l】Robertolerusalimschy.ProgramminginLua.http://www.1ua.org/piV.2003

【2】R.Ierusalimschy,L.H.deFiguciredo,W.Celes.

Lua5.1ReferenceManual.http://www.1ua.org/manual/5.1L2006

『31DavidAstels.Test.DrivenDevelopment:APracticalGuide.PrenticeHallPTR,2003

【4】4CraigLarman.敏捷迭代开发:管理者指南.中国电力出版社,2004

【5】KentBeck,CynthiaAndres.解析极限编程——拥抱变化(影印版).中国电力出版社,

2005

【6】6KentBeck著,孙平平,张小龙,赵辉等译.测试驱动开发.中国电力出版社,2004

【7】7ScottW.Ambler著,张嘉路等译.敏捷建模:极限编程和统一过程的有效实践.

机械工业出版社,2003

【8】覃征,何坚,高洪江,李顺东,黄茹等著.软件_T程与管理.清华大学出版社,2005

【9】9AlistairCockbum著,俞涓译.敏捷软件.人民邮电出版社,2003

【10】RogerS.Pressman.SoftwareEngineering:APractitioner’SApproach,5”ed.

McGraw-Hill,2001

【11】IanSommerville.SoftwareEngineering,6med.Addison-Wesley,2000

【12】ShadLawrencePfleeger,JoanneM.Atlee著.软件上程~理论与实践(第三版?英文影印

版).高等教育出版社,2006

【13】FrederickPBrooks著,汪颖等译.人月神话(32周年中文纪念)TheMythical

Man-Month:TheEssaysOnSoftwareEngineering,2硼酣.清华大学出版社,2007

【14】LinchRising,NormanS.Janoff.

TheSerumSoftwareDevelopmentProcessforSmallTeam.

IEEESoftware,July/August,2000

【15】Dr.JeffSutherland.AgileDevelopment:LessonsLearnedFromTheFirstSerum.

http://jeffsutherland.com/scrum/FirstSerum2004.pdf,2004

【16】KenSchwaber.SerumDevelopmentProcess.

http://jeffsutherland.com/oopsla/schwapub.pdf,1997

【l7】敏捷联盟.http://www.agilealliance.corn/

【18】CppUnitCookbook.

http://www.cs.nmsu.edu/~jeffery/courses/371/cppunit/cppunit_cookbook.html.2007f191lunit.UnitTestingFrameworkforLua.http://ww.nessie.de/mroth/lunit/.2008

【20】游戏项目中的自动化测试和持续集成.

http://www.guanlilunwen.com/xiangmuguanli/20070902/l416.htm.2007

【21】ElfriedeDustin.EffectiveSoftwareTesting:50SpecificWaystoImproveYourTesting.

PearsonEducation,2002.

【22】ElfriedeDustin,JeffRashka,JohnPaul.

AutomatedSoftwareTestingIntroduction,Management,andPerformance.

PearsonEducation,2003

【23】MatthewH.Austern著,侯捷译.泛型编程与STL.中国电力出版社,2003

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

【24】GenericProgrammingTechniques.http://w姗,.boost.org/more/generic_programming.html

网聚知识提醒您本文地址:

【25】DavidVandevoorde,NicolariM.Josuttis著.陈伟柱译.C++Templates.人民邮电出版

社,2004

【26]GameEngiRe.http://en.wikipedia.org/wiki/Game_engine

【27】JessicaMulligan,BridgettePatTovsky著.姚晓光,恽爽,三F鑫等译.网络游戏开发.机

械工业出版社,2004

【28】MartinFowler著.侯捷,熊节译.重构:改善既有代码的设计(中文版).中国电力

出版社.200357

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

作者简历

基本情况:

姓名:马思阳

民族:汉性别:男政治面貌:团员

教育经历:

l、2002年一2006年,湖南人学,计算机与通信学院,攻读信息安全专业学士;2、2006年一2008年,北京交通人学,软件学院,攻读软件工程专业硕士;58

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

大型多人在线角色扮演类网络游戏角色战斗系统的设计与实

作者:

学位授予单位:马思阳北京交通大学

相似文献(10条)

1.学位论文 黄健 网络游戏服务平台基本架构设计与实现 2005

随着网络游戏业的高速发展,网络游戏开发过程中的一些关键问题开始困扰着网络游戏开发商。[www.loach.net.cn)网络游戏的开发不但需要耗费巨额的前期投资,而且开发周期也非常长,网络游戏开发人员往往要花费大量的精力于底层架构的设计上,而不是在具体的游戏业务,这造成了网络游戏的开发风险非常高,构造具有高性能、稳定、可复用的网络游戏中间件平台已成为网络游戏开发商的迫切需求。在这种形势下,网络游戏服务平台应运而生。

本文主要论述如何设计一个合理的网络游戏服务平台基本架构,并利用先进的软件技术,设计及实现通用的、高效的、易扩展的、可复用的、跨平台的网络游戏基础中间件平台解决方案。

为了使网络游戏服务平台具有良好的扩展性及维护性,本文提出了网络游戏服务平台分布式的物理架构模型,并利用面向构件技术设计了网络游戏服务平台软件层次架构模型。在网络游戏服务平台的功能需求的基础上,本文详细论述网络游戏服务平台主要构件的设计及实现。

网络游戏服务平台除了建立在良好的构件框架之上,还必须给高层游戏业务提供高性能、稳定、易扩展的基础设施支持。本文充分利用了面向构件、面向对象分析设计思想、设计模式、XML语言、线程池、消息传输机制、消息处理机制、缓存机制等技术及设计思想对网络游戏服务平台关键技术的设计和实现进行详细的论述。

本文所论述的网络游戏服务平台解决方案,可以作为各类休闲棋牌类网络游戏的开发中间件及基础运营平台。

2.学位论文 李改 高可扩展性网络游戏平台设计与实现 2005

随着互联网的不断壮大和完善,网络已经成为人们生活的一个不可或缺的部分,许多在现实生活中的活动都可以通过网络环境进行真实的模拟。互联网络的普及和网络性能的提高还促进了软件体系结构的发展和软件开发方式的进步,软件体系结构开始从传统的集中式结构转向分布式结构,软件的开发方式也从原有的集中式开发转向为分布式开发,在这种情况下,软构件技术日益引起人们的重视,如何在网络环境下,合理运用软构件技术合作开发大型的分布式软件系统成为当前软件开发领域中的重要问题。

本文在分析和研究软构件理论的基础上,针对一类典型应用“网络环境下的对抗游戏平台”,提出了一套适合该类应用的分布式体系结构和实现方法,并运用当前最为热门的EJB技术予以实践,对提出的软件结构进行了验证。在整个平台的设计和实现过程中,重点考虑了“如何利用文档/视图模式实现对数据和表示进行分离”、“如何利用层模式提高系统的兼容性”、“如何利用EventListener机制提高事件响应的效率”等问题。

平台采用C/S模式的顶层架构,实现了游戏软件用户在Internet上进行扑克牌联机对战的功能。在平台中,将交互功能和具体游戏逻辑控制进行了分离,分别由客户端和服务器端进行实现,这样使得服务器端的升级和改变不影响客户端。同时,平台本身不负责具体的游戏逻辑,而是采用EJB插件实现服务器端的具体游戏逻辑,使得整个平台具有高度的可扩展性。所有服务器端可用的游戏逻辑EJB插件采用统一的开放接口,使得服务器端具有热升级的功能,并且使得第三方游戏开发伙伴可以方便的开发新的游戏逻辑插件,增添新的扑克游戏种类。

3.期刊论文 王延青.张丽杰.潘巍.周秀虎.刘晓.WANG Yan-qing.ZHANG Li-jie.PAN Wei.ZHOU Xiu-hu.LIU Xiao-bing 计算机实验室教学中影响学习效果的不良行为分析 -计算机教育2008,""(4)

本文对计算机实验室教学过程中频繁出现的学生使用即时通信软件聊天、玩网络游戏、看电影等影响学习效果的不良行为进行了观察记录及问卷调查等研究工作,并在发现问题后对其产生原因进行了分析.最后,针对最突出的问题提出了管理与技术并重的解决方案构想.

4.学位论文 赵晖 基于J2ME的手机3D游戏引擎的研发 2005

随着通信和计算机技术的日益进步,游戏不再仅仅可以在台式计算机上玩。手机硬件技术的进步,使手机也逐渐成为一个好的游戏平台。手机虽然在计算能力、存储空间、视觉效果、声音效果上都不如台式计算机,但是,手机游戏面对的是庞大的手机使用人群从而拥有美好的未来。当人们在等待公车、购物排队以及一些比较短的间歇时间内,拿出手机享受一下手机游戏带来的快乐,这是现代通信技术与计算机技术给予人们的又一项休闲娱乐。 本文吸取了前人在网络游戏引擎方面的研究成果,重点对网络游戏引擎的系统结构方面做了深入的研究,先从宏观上说明了游戏引擎的组成部分,把这些分为系统、控制台、支持、渲染器/引擎内核、游戏界面、游戏本身以及工具/数据等部分,论述了每个组成部分的工作原理。通过对国外先进引擎的分析学习,完成了一个手机3D游戏引擎的系统架构的设计。

网聚知识提醒您本文地址:

本文所论述的游戏引擎是用于控制所有游戏功能的主程序,而手机3D游戏引擎又具有小型化、多模块、简单化这几个特点,针对这几个特点本文将引擎设计的内容分为以下几个模块:用户界面、渲染、流程控制、碰撞检测以及摄像机这五个模块。最后协同配合大连泰康科技有限公司的同仁,在“3D高尔夫”的项目工作中,设计了完整的游戏流程及一个小型的手机3D游戏引擎,并完成了引擎中最主要的五个功能类的实现。

5.学位论文 王洁 Flash无客户端网络游戏的设计与实现 2008

游戏是将人们的视觉、听觉、触觉等多种体验方式融合在一起的一种娱乐方式。它综合运用了计算机图形学技术、人工智能技术、多媒体技术、网络与通信技术,是现代大众娱乐方式中的一个重要组成部分。

游戏的发展历经了单机游戏、网络游戏和虚拟现实游戏和无客户端网络游戏四种不同的设计思想。传统的单机游戏从最初简单的文字游戏开始,经过了电子游戏、益智游戏、电脑单机游戏的发展过程。随着网络技术的快速发展,网络游戏迅速取代了传统游戏成为游戏市场的主流方向,推动了游戏产业的快速发展。虚拟现实的出现则是把游戏从视听感受升华为身体的体验。可是随着游戏表现力的不断提升,游戏运行平台的要求也越来越苛刻。游戏运行所需下载的客户端不断庞大,游戏下载的速度也越来越慢,成为游戏发展的重要瓶颈。

近几年来网络技术得到了飞速发展,网络的传输速度越来越快,在游戏进行的同时再动态加载游戏运行所需资源的想法成为了可能,无客户端网络游戏设计思想也应运而生。无客户端网络游戏又分为网页游戏和Flash网络游戏2个阶段。

Flash网络游戏是2008年初才出现的无客户端网络游戏设计思路,它巧妙的把Flash的图像处理技术与传统网络游戏设计技术结合在一起,利用动态脚本语言实时加载和处理游戏资源,无需下载游戏客户端就可以获得接近传统网络游戏的画面品质的游戏体验,是当今网络游戏开发与设计领域的技术热点。

本文以软件工程思想为主线,从需求分析、框架设计、模块设计,开发环境配置等方面,详细介绍了上述系统的设计和实现过程。论文针对Flash图像处理以及Flash动态脚本语言的技术特点,研究了基于Flash技术的无客户端网络游戏设计与实现方法。论文的主要贡献表现在以下几个方面:

1.采用B/S设计思想和无客户端网络游戏设计理念,设计并实现了基于Flash技术的多人在线网络游戏;

2.根据Flash无客户端网络游戏特点,设计并实现了游戏地图资源的组织和显示方式;

3.参考通用游戏的引擎框架,设计了Flash无客户端网络游戏的游戏引擎。

6.学位论文 李殊 观赏性游戏的研究与原型设计 2008

在中国,飞速增长的网络游戏市场引起了全世界的关注。作为电子游戏的一个分支,网络游戏已经成为国内主流的网络娱乐方式。尽管网络游戏吸引了众多活跃的游戏玩家,然而,当他们被视为网络游戏市场价值的核心创造者时,我们却无法忽视另一个同样庞大的群体:游戏观众。

近几年来,电子游戏竞技活动不断凭借着自身庞大的人文经济内涵和国家荣誉概念,在全世界掀起了观赏游戏的新高潮,到场观摩以及通过各种媒体收看直播的人数逐年增加;同时许多传统电视台、数字电视运营商以及网络媒体都开办了专门的游戏节目和全日制游戏频道,以满足人们观赏游戏的需要。另一方面,从游戏观赏活动的本质上看,网络游戏由于具备高强对抗性和遵循一定的体育规则,本身就继承了观赏性体育的优良品质。

对战类游戏 大型多人在线角色扮演类网络游戏角色战斗系统的设计与实现

目前国外游戏开发界上已经有了一些对观赏性游戏的探索,其中以CounterStrike1.1版本的SpectatorMode为代表性作品。[www.loach.net.cn)但由于使用门槛较高,仅仅面向于安装了游戏客户端的玩家群体,将非玩家群体拒之门外;再加上互动功能非常有限,使得游戏观赏概念还没有被广大潜在用户认知,更没有被作为一种新的游戏类型予以研究。根据参考文献和市场调研,作者发现图内暂时还没有这方面的研究实践成果,只有一些网络视频软件通过转播游戏赛事来提供类似功能。

作者的创作思路来源于实习项目的需要,旨在通过本文尝试对观赏性游戏的概念和特征进行介绍,同时对其市场可行性、项目投资效益和设计方案进行初步探讨。本文首先指出开发观赏性游戏的必要性和重要性。然后,作者在总结前人工作成果的基础上根据自己的理解,提出了观赏性游戏的相关概念。接下来深入分析了其市场可行性和项目投资收益与风险。随后是软件工程过程的需求分析阶段,作者通过用户调研和相关软件功能比较,对观赏性游戏的功能进行总结。最后作者根据需求分析结果提出了观赏性游戏的一种原型设计方案,并介绍了若干核心模块的详细设计过程。

7.学位论文 鲍有源 Web富客户端互动游戏开发与应用 2006

随着计算机科学的飞速发展,传统网络程序的开发已渐渐不能满足新的需求。服务器端数据传递的模式,把网络程序的表示层建立于HTML页面之上。而HTML是适合于文本的,传统的基于页面的系统已经渐渐不能满足网络浏览者的更高的、全方位的体验要求,针对这一问题,Macromedia公司开发了丰富互联网应用程序(PaA)技术。

近年来已经出现许多不同的Web交互程序应用了RIA技术。本文的目标是尝试将RIA技术的应用提升到一个新的阶段一开发复杂的Web实时互动网络游戏,在线游戏是世界各地的人们在Web中寻找乐趣的首屈一指的活动,这种强烈的用户焦点能够被转化为有助于用户巩固某个品牌或观念。花在

Intemet上的这种与众不同的时间长度特性提供了许多能够与用户交流的方式,无论是通过游戏概念本身,或是通过游戏间隙的广告以及销售。其中所蕴涵的商机无疑是巨大的。

本文以如何开发复杂而高效的Web富客户端互动游戏为目标,对Flash的脚本语言体系ActionScript2.O,游戏软件工程开发过程,物理和三维模拟算法等各方面进行了较全面而深入的研究,并编写了一个综合性较强的即时策略游戏实例《真理之剑》来进一步体现研究的结果。最后,本文对用RIA技术实现实时多人在线游戏进行了一定的探索和尝试。

8.期刊论文 方莎 网络虚拟财产的法律意义浅析 -中国商界2008,""(11)

网聚知识提醒您本文地址:

作为网络经济新的增长点之一,网络游戏的发展令人瞩目.网络游戏虚拟财产作为网络游戏的产物,已经脱离网络游戏而进入现实社会生活之中,围绕它产生了越来越多的现实纠纷,探讨虚拟财产的法律保护,必须界定虚拟财产.网络财产是法律意义上的财产,网络财产应当受到法律保护.

9.学位论文 邓从健 网络游戏服务平台消息模型与调度策略的设计与实现 2005

消费市场、终端技术、网络技术的成熟,手机网络游戏这个“新生”事物顺理成章地走近人们。背靠着9000万的互联网用户,盛大用网络游戏成就了一个神话。“移动+网络游戏”无疑给人们提供了更加丰富的想象空间。在过去的一年中,移动运营商,手机制造商,游戏开发商、渠道商以及手机游戏运营商,已经为这个让人激情澎湃的概念投入了诸多的热情。为了更好地向手机玩家提供舒适贴心的服务,游戏运营商都在逐步打造一种新型的网络游戏平台。这是一种全新概念的移动网络游戏系统,它为玩家提供了一个多人联机游戏对战的平台,能够让游戏玩家很轻松地通过互联网,进行种类繁多的多人联机对战游戏。

网络游戏服务平台项目通过研究分析目前无线移动网络和移动终端的特点,提出一种适合实际使用的网络游戏服务平台。网络游戏服务平台

(MMOGP)结合了网络游戏技术和无线移动网络技术,为玩家提供了一个可以随时随地登陆的多人联机游戏对战的平台,游戏玩家很轻松地通过无线网络,进行种类繁多的多人联机对战游戏。

网络游戏服务平台(MMOGP)是采用Java语言开发的,可以支持多种操作系统和数据库系统,松耦合模块化的设计,支持分布式应用。

本论文着重介绍了网络游戏服务平台里消息模型和调度策略的部分的设计与实现。无线移动网络游戏与internet网络游戏最大的不同在于网络带宽小,网络时延大,终端性能不高。网络游戏服务平台(MMOGP)放弃了通用的HTTP协议,直接使用Socket通信,尽量使客户端的处理简单化,通过纯文本的消息协议,消息增量同步技术,消息锁步协议技术等一系列的相关技术,最大限度地克服了无线移动网络的主要缺点。而且网络游戏服务平台(MMOGP)从系统设计上就支持分步式的应用。通过网络游戏服务平台(MMOGP),移动增值运营商可以轻松灵活地搭建一套稳定高性能的无线网络游戏平台。

10.学位论文 郑波 网络游戏平台业务规则管理子系统的研究与实现 2005

我国网络游戏产业市场飞速发展,至2004年,网络游戏市场规模已达到36亿元,网络游戏用户数达到3300万。与市场的飞速发展状况所不协调的情况是,我国网络游戏的自主开发实力薄弱。目前市场上受欢迎的网络游戏中,国内厂商自主开发的游戏占了不到15%。因此,国家与国内游戏厂商都越来越重视网络游戏平台的开发。

作为一项应用性很强的工作,网络游戏引擎的研发需要长期的经验积累。总体而言,国内网络游戏自主研发的环境正一步步向着更好的方向发展,技术壁垒的破除、人才资本的不断积累、研发经验的不断积累正在托起中国的网络游戏自主研发实力。据悉,我国已将网络游戏技术研发这类文化产业纳入国家科技计划,也就是863计划。863计划本身是进行高新技术的追踪。将网络游戏纳入课题是从两方面考虑,从技术角度,希望将863现有的技术能够应用到一些量大面广的信息技术领域,而且网络游戏方面的技术还是自成体系的,通过自己的技术使国产游戏能在未来市场中占据一片天地。863计划把该课题的名称命为是“网络游戏通用引擎研究及示范产品开发”,隶属于“中文处理与人机交互技术综合示范应用”专题,也是“十五”期间,863项目在信息技术领域、计算机软硬件技术主题下面的课题之一。

本文主要的内容是网络游戏平台中服务端游戏规则服务管理子系统的研究与实现。规则管理系统是一个理论性很强的部分。因此,本文从业务规则、规则管理系统、规则引擎和Rete算法等基础理论知识入手,逐步实现了网络游戏规则服务子系统的系统架构。同时,对于游戏规则服务管理子系统中的游戏世界管理模块和规则模块,本文也以较大的篇幅介绍了具体的设计与实现。同时,本文还会以一个黑白棋游戏的实现作为原型,通过实际的例子论证了理论的可靠性。

本文链接:

三 : 浅析QQ空间能够在网络营销中扮演什么样的角色

 

  网络营销已经成了互联网司空见惯的事情,同时也影响到我们生活的点点滴滴,比如我们打开网易等门户网站的时候,总是不经意间就被弹出的广告声音吓一大跳,有的人因此都有了神经过敏的症状,可见这些网络营销的深入程度,笔者发现,在众多的网络营销方案中,QQ空间的推广效应似乎没有受到众多商家的重视,下面笔者就来和大家谈谈,其实QQ空间的营销,往往能够成为网络营销的奇兵,很容易让商家获得意想不到的回报!下面笔者就来介绍操作QQ空间营销的几个方法!

  一:QQ空间的设计要显得很精心

  QQ空间可以选择的模板比较多,还可以通过付费的方式,定制个性十足的QQ空间,实际上一个QQ空间,就相当于一个个人博客,而博客要呈献给用户的时候,自然能够让他们觉得很惊艳才能够进一步吸引用户继续浏览下去的愿望!实际上QQ空间的设计,就类似于网站的页面设计,给人的感觉一定要大气,简洁,突出重点内容!

  二:QQ空间和软文营销的完美结合

  现在互联网最火的营销模式之一就是软文营销,而软文营销可以渗透到各种媒体,其中QQ空间更是软文营销另一个非常重要的阵地,特别是百度对于某些软文进行屏蔽的时候,通过QQ空间来进行软文营销的作用就显得更大了,QQ空间其方便的转载,以及QQ用户的巨量,无疑成为软文病毒式营销最佳的平台!而且在QQ空间进行软文营销的同时,还能够利用QQ空间来补充网站的内容,比如尽可能的多上图!让用户能够更加直观的了解商品!

  三:QQ空间的相册功能就是良好的产品展示

  很多人都喜欢把自己的照片上传到QQ空间的相册上,这实际上营销的是自己,当我们把这些照片换成产品图片的时候,那就是在营销商品了,可是在通过QQ空间的相册功能营销产品的时候,需要注意在这些产品图片上添加标签,添加说明,做好相册分类!这样才能够让用户能够方便的浏览,也才能够真正发挥QQ空间相册的营销能力!

  四:QQ空间和腾讯微博的及时营销的融合

  对于微博而言,现在最火的莫过于新浪和腾讯的微博,刚刚荣获欧洲足球先生的梅西还通过微博向广大的球迷致谢,可见腾讯微博已经吸引了全世界的用户的关注,这个巨大的市场,自然也能够被QQ空间的利用,毕竟QQ空间和腾讯微博是能够很好的融合的,因为这是基于同一个平台,很容易将QQ空间的内容分享到微博上,这无疑能够形成一加一大于二的营销效果!

  通过上面的分析,QQ空间在网络营销中,不仅仅能够扮演着独当一面的作用,同时还具备和多种不同的营销方式相互融合,从而产生更大的营销效果,比如软文营销,比如微博营销,都能够和QQ空间形成良好的融合关系,从而让QQ空间在网络营销上变得举足轻重!来源:手机卫星定位 http://www.sjdwb.com/ A5首发,转载请注明,谢谢!

下页更精彩: 1 2 3 4 5 下一页
上一篇: 太阳能水位传感器原理-太阳能热水器水位传感器哪种好?原理是什么? 下一篇: 一厢情愿什么意思-一厢情愿是什么意思?

优秀文章