zoukankan      html  css  js  c++  java
  • mmorpg手游中的战斗系统

      目前的项目是一款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、日志系统。

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

  • 相关阅读:
    Sicily shortest path in unweighted graph
    Sicily connect components in undirected graph
    Sicily 1931. 卡片游戏
    Sicily 1021. Couples
    c++ 高效文本读写
    Sicily 1129. ISBN
    Sicily 1133. SPAM
    Sicily 1282. Computer Game
    小工具?不,这是小工具的集合!
    .Net Core建站(4):FTP发布项目及连接服务器数据库
  • 原文地址:https://www.cnblogs.com/zilongblog/p/5930353.html
Copyright © 2011-2022 走看看