目前的项目是一款mmorpg手游, 非常不幸的是,当前战斗系统的实现非常脆弱, 也毫无技巧可言。具体存在如下问题:

1、战斗层逻辑与自动战斗AI逻辑混在一起, 互相纠缠。

2、战斗层自身逻辑混乱不堪, 接口功能重复,且逻辑不一致。

3、技能释放流程混乱,经常造成一些非常难定位的bug。

4、主角自身的技能处理没有与其他角色的技能处理和谐统一。

5、角色状态的处理与当前的行为没有很好的统一。

6、整个战斗系统的实现,没有基于一个抽象好的模型,因此模块间的逻辑性和功能内聚不强, 毫无美感可言。

7、自动战斗AI、跟随战斗AI、副本AI、任务AI纠缠在一起, 而没有一个明确的分层概念。

  基于以上的问题, 我将思考一下问题:

1、游戏中战斗系统的抽象模型与实现。

2、游戏中的AI。

3、大规模软件开发的架构设计与模块间的协作。

[关于大规模软件开发的架构设计与模块间的协作的思考]

1、keep it simple。 这个无论做什么,其实都可以作为一个基本原则。 人作为一个有限智力和精力的个体, 只能处理有限复杂度的问题, 并且通常是越简单越不容易出错。对于软件开发, 要实施保持简单的原则, 一个很重要的技巧是, 让软件由不同的高度内聚的模块组成, 而模块再由高度内聚的组件组成, 每一个组件都只在有限的工作环境下工作,这样组件开发人员只用在有限、相对简单的逻辑下工作。

  例如,游戏的AI系统我是这样设计的。整个AI系统由两部分组成:AI控制器和AI操作指令两部分组成。

  AI控制器,负责AI系统的开关,运行,AI操作指令的产生和销毁。

  AI操作指令, 根据不同的需求, 可以定制不同的操作指令, 原则上指令之间相互独立, 互不影响。 当然也可以定义一些基本的元指令, 在此基础上定义一些复合指令。但是有一个原则, 即在任意时刻只有一条指令在执行, 并自己负责判断是否完成。

  这样的AI设计, 使得系统非常简单稳健, 并且非常容易扩展满足新的需求。 开发人员只需要根据需求编写新的指令即可。

[程序员的自我修养]

1、建模。

2、专业领域的知识。

3、在现有模型下, 运用专业领域的知识让整个系统稳健高效的运行。

[个人感想]

1、程序员一定要节制。具体来讲就是:

  模块对外的接口一定要简洁。模块调用外部的接口要一致统一。也即整个模型应该是收敛的, 易于控制的。 而不会因为贪图方便或者其他原因导致的无节制行为, 造成逻辑重复, 调用混乱而最终让模块走向不可控制的深渊。

[代码分析]

    if self._curOperation then
if not self._curOperation:isDone() then
self._curOperation:step()
end if self._curOperation:isDone() then
self:onOperationDone()
end
end
    local op = self._curOperation
if op then
if not op:isDone() then
op:step()
end if op:isDone() then
self:onOperationDone()
end
end

[逻辑疑难问题]

1、游戏逻辑中总是存在把表现和数据放在一起处理的接口, 由于表现上的处理, 会导致数据不正确。

  例:角色身上的buff特效表现和buff状态数据。

[技术疑难问题]

1、人物头顶的UI排序。

2、日志系统。

  由于战斗系统的复杂性, 经常需要在线查看当前游戏的数据信息。 所以如果在线实时调出自己关心的数据信息非常重要。

mmorpg手游中的战斗系统的更多相关文章

  1. HMS Core Discovery第13期回顾长文——构建手游中的真实世界

    HMS Core Discovery第13期直播<来吧!构建手游中的真实世界>,已于2月24日圆满结束,本期直播我们同三七游戏的专家一同向小伙伴们分享了HMS Core图形引擎服务(Sce ...

  2. 揭秘重度MMORPG手游后台性能优化方案

    本文节选自<2018腾讯移动游戏技术评审标准与实践案例>手册,由腾讯互娱工程师王杰分享<仙剑奇侠传online>项目中游戏后台的优化经验,深度解析寻路算法.视野管理.内存优化. ...

  3. UWA发布 | 2017 Unity手游体检蓝皮书 — ARPG篇

    报告目录: 一.ARPG手游总体性能开销分析 二.ARPG手游CPU模块性能开销分析 三.ARPG手游内存模块性能开销分析 四.ARPG手游资源管理分析 五.UWA对于ARPG手游研发团队的建议 一. ...

  4. Unity手游引擎安全解析及实践

    近日,由Unity主办的"Unity技术开放日"在广州成功举办,网易移动安全技术专家卓辉作为特邀嘉宾同现场400名游戏开发者分享了网易在手游安全所积累的经验.当下,很多手游背后都存 ...

  5. Cocos2d-x 手游聊天系统需求分析

    手游聊天系统需求分析 转载请注明:IT_xiao小巫 移动开发狂热者群:299402133 策划需求图 參考系统:刀塔传奇 点击这个.然后弹出以下的对话框 游戏类型:卡牌 分析:刀塔传奇聊天系统分为3 ...

  6. 为测试赋能,腾讯WeTest探索手游AI自动化测试之路

    作者:周大军/孙大伟, 腾讯后台开发 高级工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处.  WeTest导读 做好自动化测试从来不件容易的事情,更何况是手游的自动化测试,相比传 ...

  7. 年度游戏圈2018白皮书解析手游折扣app哪个好及靠谱程度分析

    2018年,随着全国暂停游戏版本的审核和发布<综合防控儿童青少年近视实施方案>(控制新的在线游戏数量),游戏行业受到的影响不小. 在游戏产业中,游戏行业2018年的收入同比增长5.2%,远 ...

  8. 从《乱世王者》看腾讯SLG手游如何搭建完整安全服务

    WeTest 导读 <乱世王者>是由腾讯旗下天美工作室群自主研发的一款战争策略手游,在经历了2015年-2017年的SLG品类手游的爆发之势下,于2017年11月21日正式公测. < ...

  9. 开源工具 | 手游自动化框架GAutomator,新增iOS系统和UE4引擎支

    WeTest 导读 GAutomator是腾讯WeTest推出的手游自动化测试框架,已用于腾讯多个手游项目组的自动化测试. 1.GAutomator诞生背后 研究过手游自动化测试的同学都知道,虽然市场 ...

随机推荐

  1. [原创] Gradle DSL method not found: 'android()' 和 buildToolsVersion is not specified 的解决办法。

    今天在用Android Studio 2.0 打开别人的较早版本生成的工程时, 提示: Gradle DSL method not found: 'android()'. 解决办法为,打开根目录下面的 ...

  2. hibernate配置文件详细解析

    在javaweb开发中,hibernate框架的是常用的,能帮我们节省大量的时间,以下是hibernate的配置文件解析. hibernate配置文件的默认名为:hibernate.cfg.xml 默 ...

  3. 就最近学习MVC4.0的页面用法学到的东西

    最近进了一家新公司,学习的东西还是蛮多的,首先了解的是@using(new Ajax.beginForm("",null,new AjaxOptions() { OnSuccess ...

  4. 在SQL Server 2005中连接Oracle,完成查询、插入操作

    建立指向Oracle的连接假设Oracle数据库的用户名为test,密码为test,在SQL Server数据库所在服务器上建立的指向Oracle数据库的服务命名为hisorcl.1. 在SQL Se ...

  5. 批量下载网站图片的Python实用小工具

    定位 本文适合于熟悉Python编程且对互联网高清图片饶有兴趣的筒鞋.读完本文后,将学会如何使用Python库批量并发地抓取网页和下载图片资源.只要懂得如何安装Python库以及运行Python程序, ...

  6. Android 6.0 权限请求

    在申请权限之前一定要在清单配置文件中添加该权限private static final int MY_PERMISSIONS_REQUEST_RECORD_AUDIO = 1; //随便定义 publ ...

  7. 前端基础之 url src href

    在实际使用中有时候会犯糊涂,因此来认真了解下这三者的具体用法. url 是资源定位器,是一种数据类型,和长度,颜色等属性并列.在写img的路径的时,如<img src="http:// ...

  8. Bootstrap学习(1)

    文档顶部写上H5的DOCTYPE声明 head部分: <meta> (1)编码方式 (2)在IE运行最新的渲染模式  <meta http-equiv="x-ua-comp ...

  9. XCode与Git的完美融合,不再依赖其它Git客户端

    Git源代码管理工具的出现,使得我们开发人员对于源码的管理更加方便快捷.至于Git的优点以及与其他源代码管理工具有何区别,不是本文的重点,如果想深入了解可以搜索一下这方面的文章.下面直接进入主题,如何 ...

  10. ABAP SPLIT

    注意: 假定'\'为分隔符 * '1'会分成1部分,值为1 * 分隔符之前的即使是空白或没有,也算一部分. 最后一个分隔符之后的,若有值会算一部分.若没有值,则不会算 比如'\1\'会分成2部分 '\ ...