游戏开发论坛

 找回密码
 立即注册
搜索
查看: 17245|回复: 28

[讨论] 一道简单的BUFF题,资深游戏策划都容易答错

  [复制链接]

8717

主题

8783

帖子

1万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
11952
发表于 2018-6-21 13:36:34 | 显示全部楼层 |阅读模式
文/梦幻华策
好久不见,这次又带来一道简单的数值题。因为上次被揍(点这里看看上次是什么题),emmm,这次就不皮了。

微信图片_20180621132742.png

直接看题目

设定某角色攻速为0.7,即每0.7秒攻击一次。

此时,为该角色装备一个BUFF或者武器,效果为每次攻击有5%的几率触发效果1。

效果1:提升5%输出,持续10秒,最高叠加5次,每次叠加后刷新持续时间。

问题:该BUFF能提升角色多少伤害?

大家可以尝试自己解答一遍,得出一个答案后再来看解答过程。

由于本人比较傲娇,所以喜欢直接给出结果:8.8%。但是没关系,现在收手,不要向下滑动屏幕,你依然有机会得出答案的计算过程。因为答案是错的。

微信图片_20180621132745.jpg

皮这一下我很开心。

解答:

(你看,我的解答总是来得如此突然,毫不修饰。)

先不考虑断刀或其他情况。

BUFF持续10秒,攻速0.7,也就是BUFF持续时间内有14次攻击机会。

这14次攻击机会触发BUFF的几率为

微信图片_20180621132749.png

那么,我们可以得到每一层BUFF的触发几率和对应的伤害比例为:

微信图片_20180621132751.png

这时候,我们将对应的概率和伤害比例之积求和,就得到结果1.088

即,BUFF能够提升8.8%的伤害。

一部分人倒在这里

但是…

微信图片_20180621132752.png

我们只求得了每一层BUFF的触发概率,并没有考虑到每一层BUFF存在的平均伤害次数。

因为每一层BUFF最多可以砍出14刀,所以,我们只需要列出前14刀的概率和BUFF触发分布,如下:

微信图片_20180621132754.png

我们对刀数N和前14刀的触发分布概率之积求和,得到触发BUFF的期望刀数6.674刀。

从而得到每一层的平均刀数:

毫无疑义,0层为20刀;

1-4层为

微信图片_20180621132756.png

5层为

微信图片_20180621132758.png

(注意:这里用如果使用积分求出来的是近似值,想要精确些建议数列)

得出结果:

微信图片_20180621132759.png

但为了便于理解,我们不采取逐层求解的方式。

所以上面的结果并没有什么用。

微信图片_20180621132801.jpg

你懂哒~

我们将所有的战斗过程分为5种:

BUFF叠加到1层消失
BUFF叠加到2层消失
BUFF叠加到3层消失
BUFF叠加到4层消失
BUFF叠加到5层消失

每一种过程对应的平均攻击次数为该过程每一层的平均攻击次数之和。

列表:

微信图片_20180621132807.png

每一种过程对应的平均伤害为该过程造成的总伤害比上该过程的平均攻击次数。

这里需要注意,以过程一为例,第20刀触发了BUFF,已经具有BUFF效果(当然,这是人为规定),也即,19刀无BUFF伤害和15刀BUFF一层效果的伤害。

列表:

微信图片_20180621132809.png

每一种过程出现的概率为…简单的概率…

列表:

微信图片_20180621132811.png

所有过程的平均攻击次数为各过程平均攻击次数与出现概率的乘积之和。

列表:

微信图片_20180621132813.png

所以,我们计算得出最终的比例约为:

Sum(各过程出现的平均攻击次数×该过程对应的平均伤害×该过程的平均攻击次数/所有过程的平均攻击次数)

列表:

微信图片_20180621132815.png

即,该BUFF提升了角色约5.25%的伤害。

这个计算过程并非最简的计算方式,但却是最好理解的计算方式,有兴趣的大佬可以考虑用更简便的方式计算,不过式子最终还是一样的啦~

当然,让我们脱离单纯的数学方法,我们也可以使用程序进行模拟,这里我选择了VBA。

算了,太难写了,不写了。

微信图片_20180621132817.png

先列下简单的数据:

微信图片_20180621132819.png

代码如下:

微信图片_20180621132821.jpg

很简单的代码(别问我为什么没缩进,懒)

为了让数据更精确,我们取运行次数为10000000(取这么大绝对不是为了秀SSD、8Gddr4和i5-7500,反正电脑是公司的...)

运行后,结果为:

微信图片_20180621132822.png

得出比例大约在1.053左右。

什么?10000000次太少了?

微信图片_20180621132824.png

与我们计算得出的结论相近,而非1.088。

至于这0.05%的误差来源,我认为是EXCEL保存数据精度的问题。

当然也可能是计算问题,代码或解题过程有误....因为自己解题习惯不好喜欢到处乱写...让我们假装没看见。

一部分...

微信图片_20180621132826.png

咳咳,但是...我们一开始设立的前提是无限输出,没有追赶断刀技能等阻碍。

那这个怎么解决呢?

当然是直接给一个10秒内能触发的次数啊!

微信图片_20180621132828.jpg

微信图片_20180621132830.png

经过本题,我终于意识到了公式写得再好,也不如程序来得快。

利用以上方法,足够解决目前绝大多数游戏内的概率相关问题。

我是梦幻华策,就是有人给我点赞,也绝对不会皮了。

真好玩。

via:Gad


2

主题

19

帖子

182

积分

注册会员

Rank: 2

积分
182
发表于 2018-6-21 16:08:58 | 显示全部楼层
“设定某角色攻速为0.7,即每0.7秒攻击一次。”

我想问一下,按照你这种说法,当角色的攻速是 1的时候,是每几秒攻击一次?
如果答案是1秒攻击一次,那么,0.7的攻速高,还是1.0的攻速高。

文章我还没看,但是我已经没法看了

6

主题

47

帖子

250

积分

中级会员

Rank: 3Rank: 3

积分
250
发表于 2018-6-21 21:08:12 | 显示全部楼层
作为多年的老策划,表示头大。整这玩意除了**累死自己,没多大用处。游戏中还需要考虑走位消耗时间会不会打断BUFF,敌人的限制技能会不会导致0.7延长,或者直接晕眩。小怪和大怪面前,这个BUFF不应该用同一种计算公司,等等。。做出这BUFF的,基本算是庸人自扰之。

0

主题

2

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2018-6-25 09:55:29 | 显示全部楼层
把Rnd()和pro都*10000,误差就会小很多~

0

主题

191

帖子

752

积分

高级会员

Rank: 4

积分
752
发表于 2018-6-21 17:39:49 | 显示全部楼层
首先这不是一个相对“稳定”的BUFF。因此我认为只需要计算最低可能性的收益即可,这也是最好算的。
触发几率是5%,也就是20下出一下呗。状态持续10秒。且攻速为0.7,也就是10秒也就最多攻击14下。不满足再次触发刷新的最低可能性,那么结论很简单,这个BUFF在玩家攻击34下的周期下,后14下每次增伤5%,平均下来玩家增伤约为1.02%。当然可能性其实有很多,周期这么算也不够严谨,但是这道题本身也根本就不严谨,我觉得非常没有探讨的意义。因此直接按照一个最低可能性和最短周期来计算了下。
只想说明一般情况下策划应该有的设计思路。触发几率需要稳定,如果可以叠加,那起码持续时间和触发概率对应游戏触发手段要能达到最低概率。另外这个周期是否符合游戏实际情况,什么10000000次容我爆个粗口,tmd是不是傻。

2

主题

130

帖子

1756

积分

金牌会员

Rank: 6Rank: 6

积分
1756
发表于 2018-6-22 14:57:39 | 显示全部楼层
楼上几位兄弟已经说出了我的心声

0

主题

2

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2018-6-23 10:21:29 | 显示全部楼层
一道不严谨的题目,一个不严谨的结论

14

主题

785

帖子

1669

积分

金牌会员

Rank: 6Rank: 6

积分
1669
QQ
发表于 2018-6-23 10:46:44 | 显示全部楼层
数值是理性的?不,她是感性哒!

数值是给出方法看表现?不,她是给出表现求方法哒!

意义不大的炫技,满分10分,3分的设计你把数学技巧秀到天上去也突破不了3分。

2

主题

63

帖子

831

积分

高级会员

Rank: 4

积分
831
发表于 2018-6-23 13:58:50 | 显示全部楼层
前几天几乎在和你做一模一样的事情,后来有个后果就是,理论实力值,和游戏中真实值误差过大。
理论A职业打得过B职业,可游戏中就是打不过,影响因素太多了,走位/风筝/选择时机放技能。
哎,自扰了很久,现在看开了,

设计技能数值这个顺序就是:
理论定值-实测-感觉调
真的也没别的更好的办法。

0

主题

4

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2018-6-25 15:57:32 | 显示全部楼层
lyricc 发表于 2018-6-21 16:08
“设定某角色攻速为0.7,即每0.7秒攻击一次。”

我想问一下,按照你这种说法,当角色的攻速是 1的时候,是 ...

应该是每秒攻击0.7次[捂脸]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-8 17:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表