游戏测试 类似云顶之弈的游戏战斗内的战斗公式如何测试,请大佬指点。

MAKA · 2023年12月19日 · 最后由 陈随想 回复于 2023年12月27日 · 5862 次阅读

类似云顶之弈的游戏战斗内的战斗公式如何测试,包括伤害公式,属性计算等,
列如公式
伤害=攻击伤害 - 防御等这样的公式。
现阶段需要测试这些功能,望大佬指点一二

共收到 11 条回复 时间 点赞

个人需要知道的:
1、梳理公式 List:梳理清楚所有的公式 List,最好是找策划要,配置表或者战斗的 Lua 计算都可以,视情况而定;
2、梳理公式计算优先级:常见的就是公式中常见的属性稀释了;
以上都知道后,开始着手去针对性的排练组合了;
测试手段的话,使用自动化的方式排列组合公式;
因为你是自走棋,所以是分阶段的,按照阶段性的配置,去使用脚本进行所有的组合进行伤害计算;
特:因为自走棋中会存在一些概率性的一些内容,也按特殊的配值关注表现即可,如:0%,50%,100%;看起来如果没有问题的话基本没什么问题,另外如果不放心想多跑,也可以自动化的方式进行。

插眼,也想了解一下行内人士怎么测。

单纯只是测试战斗公式的话,逐步对公式内的参数进行组合模拟,然后验证比实际伤害值与预期是否一致其实就行了吧。

好几年没搞游戏了,出局人献丑两句。测试这些东西,我个人思想就一点,由点及线,由线及面。
如果你让我测试战斗公式:
1、每个英雄基础属性都是配表决定的,那么你要有一个高效的导表方式去更改游戏中的数值(最好要有一键导表之类的工具)。比如让 A 英雄攻击力和防御力变为 0,B 英雄攻击力和防御力为 100,导表重启服务,看看是否生效。
2、验证初步的公式计算,比如你这个非常简单的:伤害=攻击 - 防御。首先需要确定如何看伤害:可能有 debug 方式可以界面显示,也可能服务器日志能打印(打印伤害值还是打印英雄血量?另外配置也可以更改攻速方便测试)。然后快速指令进入战斗,看 A 攻击 B。你需要设计不同的数值来验证。比如 100-0=100?100-101 那么不扣血?比如法抗随便改,防御不变,伤害没变说明法抗不起作用是对的?比如有小数点怎么算伤害?
3、验证前后端是否一致:前端显示的伤害数、血量显示变化等,或者前端如果有日志更好;以及后端的伤害日志;
至此完成点的测试。
至于线的测试,不好意思上班中,没想出来,最好有点实际业务场景以及策划文档看,一般我都是喜欢看着文档看着实际场景才会想的出来。。。通常说,你多测几个点,差不多就形成了线了。

(看到 1L 的概率)多说一句:类似概率暴击这种,也是在第二步中测试的。通常来说怎么测试,取决于你们的战斗公式,取决于具体业务设置。假设有个很简单的概率暴击。那么第一,你需要把概率改成 0,测试。第二,你改成 50%,测试看看伤害;第三,你改成 100,改成 200 等看看;第四,你需要由点及面,需要验证很多次的情况下概率正确与否。两个验证方式:1、让战斗多次打,打的很快都行。反正 A 英雄你可以设置很多血。B 设置攻速很快,然后看日志去算。2、把开发的概率那段代码看一下,单独拉出来在你本地执行单元测试,设置一些固定变量去跑代码。至此,点的测试完成。复杂线以及面,比如多并发下代码是否会出问题,讲道理这个阶段你可能并不需要把重点放在这。这块要看具体场景来搞了。

让开发团队直接写个战斗公式工具会不会更快,他们应有现成的公式

Mark 一下,看看游戏大佬怎么测试

这种一般都会写一个公式的测试脚本,输入各种参数,一直在那里跑的。

核心是跑公式,但现实中随着机制增加可能不会这么简单,拿米游社的各种攻略做例子,对加算、乘算跟减抗、减防、无视防御、易伤等名词计算公式,都能写个好几万字,仿佛上了一学期高数

还有类似原神开服莫娜事件:玩家理解的易伤是乘算(大众游戏 + 自家崩坏三也是乘算),后面原神被扒出来加算,导致玩家投入资源白给,然后被疯狂被 diss 的问题;这意味着可能还要看与竞品的是否相似/一致,否则换成某些小工作室的游戏搞出这种事就等着凉凉了,想想就挺头疼的

个人理解的对于属性和技能伤害的方面的一些参考:

  • 英雄属性 (属性大概由攻,防,血,和一些其他 (命中、暴击,闪避等) 组成)
    • 基础属性,一般按英雄定位 (dps,tank, ...) 和稀有度等因素设计
    • 成长类属性,由玩家本身或英雄养成属性,可能会分局内和局外,具体会是等级,阶段,段位等
    • 额外类属性,由装备或其他额外带来的属性
    • 属性公式,战斗时如何计算上述属性,一般来说成长类属性是放大基础属性,额外类就是修正基础属性
  • 技能类型 (按技能类型分伤害类, 治疗类)
    • 伤害类公式 (一般就是攻/防/增伤/减伤等属性)
      • 技能本身的伤害系数,技能伤害类型 (物理,魔法,影响取具体的攻击/防御属性)
      • 攻击方属性
        • 攻击 (由英雄属性计算获得)
        • 伤害加成 (属性类 buff 里面)
      • 受击方属性
        • 防御
        • 伤害减免
      • 其他影响因素
        • 是否暴击, 取暴击值
        • 是否存在伤害浮动 (测试时,为了追求数值准确,最好能关闭该数值,实际上线前也需要检测该数值是否开启)
        • 战斗类型 (PVP/PVE,可能会影响数值计算)
        • 是否存在数值限制 (当双方数值差距过大时, 是否限制最高或最低伤害)
        • 如果攻击小于防御时的处理方式
      • 参考 (乘法公式),技能系数 *(攻击 - 防御)*(1+(伤害加成 - 伤害减免))*(是否暴击?(1+ 暴击 - 抗暴):1)*(伤害浮动)
    • 治疗类公式,类似伤害公式,可能取的属性不一样,还要考虑治疗加成,治疗衰减,治疗增益,治疗限制等因素
  • 对属性
    • 基础属性一般没有问题
    • 需要防止战斗中属性与面板属性不一致(如果存在差异还要考虑告知玩家)
    • 也要防止一些属性未带入战斗,或重复带入战斗
  • 对技能伤害
    • 实际伤害还受到其他因素的影响,也需要考虑
    • 主要看伤害是否合理,与数值设计是否一致
    • 对于技能来说,与其关注数值,更需要关注机制逻辑方面的问题,很多时候数值错误主要来自属性类 buff(攻/防/增伤/减伤等) 多加了或没加上
    • 也可以分析战斗模块的代码,或者 dump 出战斗日志,看看属性变化 (局内成长), 伤害数值是否符合预期
    • 还要考虑, 特殊场景,特殊玩法生效时对英雄属性和战斗数值的影响 (一般也是通过 buff 实现)
MAKA #10 · 2023年12月26日 Author
陈随想 回复

其实,策略都有,但简单的说,这些都是基于黑盒测试的逻辑来处理的,方法虽好但,针对于实时战斗来说有点不好处理,因为需要关注实时战斗中的数值变化,可能需要的是相关白盒测试的经验或者可实施的方法

MAKA 回复

步子迈大了容易扯着蛋。做事要踏实从黑盒做起,名词说太多没啥用的。别学阿里那一套。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册