找回密码
 点一下
查看: 2112|回复: 21

【作废】数学小白请教算法,X秒内恢复损失生命值的Y%,最高不超过Z。

[复制链接]
发表于 2010-8-17 19:27:06 | 显示全部楼层 |阅读模式
数学苦手……
当然只要解决问题就可以,不一定非要用数学计算。

一个生命药水,预计做到3秒内恢复50%损失的生命值,最高不超过1000。
为了要一个平滑效果,所以打算用0.02秒循环一次,一共150次的循环来做。

但是这样算法就不对了,因为在平滑恢复的时候,生命值已经产生了改变,后面的生命恢复会相应的减少一些。
如果预先记录应该恢复的生命值,又担心多瓶生命药水同时使用后会产生变态的恢复效果,所以想求一个算法,150次循环却可以做到一次循环的量。

呃……
实际上只要解决掉“需要一个平滑效果”和“多瓶药水叠加使用老变态”这两个问题就好。

果然还是方便一些,直接写“每0.2秒恢复0.333%损失的生命值”算了……
不过不甘心啊~
发表于 2010-8-17 19:50:24 | 显示全部楼层
大言不惭的说:"俺没看懂..."
回复

使用道具 举报

 楼主| 发表于 2010-8-17 19:54:40 | 显示全部楼层
我是女人吗……

一个单位生命最大值100HP,损失40,还剩60。
一瓶生命药水恢复50%损失的生命值,也就是20点HP。
药水每0.02秒恢复一次生命值,一共持续3秒,恢复150次,也就是每0.02秒恢复0.1333333333333333点生命值。

如何做到正确的让每0.02秒恢复0.1333333333333333点生命值?
干扰条件
每0.02秒,生命值都会增加,所以用实时计算不可以。
生命恢复的途中,如果单位再一次受到伤害,减少生命值,那么同上。
还有同时使用两瓶药水的情况,这样的话记录(100-60)*0.5/150值不可靠。
回复

使用道具 举报

发表于 2010-8-17 19:55:56 | 显示全部楼层
"多瓶生命药水同时使用后会产生变态的恢复效果"

为什么会变态呢?
回复

使用道具 举报

 楼主| 发表于 2010-8-17 19:57:55 | 显示全部楼层
老数据,100HP损失40还剩60。
那么50%恢复药水只能恢复20点HP。
我同时实用3瓶就可以完全恢复满。

嗯,听起来好像“1点护甲降低6%受到的伤害,17点护甲就减免100%伤害了”
回复

使用道具 举报

发表于 2010-8-17 19:58:25 | 显示全部楼层
最好是一开始就记录损失的生命值百分比,因为不光治疗会改变生命,连伤害也会改变生命。。。
回复

使用道具 举报

 楼主| 发表于 2010-8-17 20:02:13 | 显示全部楼层
呃……
实际上变数太多,我完全计算不过来了。

当前生命值肯定是不停变化的,无论是使用药水还是被怪物打。
最大生命值也是不断变化的,因为人们可以手动把增加生命最大值的装备扔地上。
同时还要顾及多瓶生命药水同时使用,以及恢复技能的参与。

然后脑袋就短路了……
回复

使用道具 举报

 楼主| 发表于 2010-8-17 20:05:58 | 显示全部楼层
还剩搞个CD好了。
解决一切问题。

只不过这样就有种输了的感觉。
回复

使用道具 举报

发表于 2010-8-17 20:21:14 | 显示全部楼层
自己做了个,不知道行不行~
可以多人多瓶药水使用(如果BUFF可以叠加的话,不过多人没问题,如果不需要BUFF的话多瓶药水也没问题。。。),反正使用循环整数来单独计算~
被无视了么。。。。。

补血.w3x

21 KB, 下载次数: 10

回复

使用道具 举报

发表于 2010-8-17 20:23:02 | 显示全部楼层
除了一开始记录外,还有两种简单的算法:
一:单位时间回复的生命百分比相同
    此0.02秒回复的生命=(失去的生命)*0.7*(时间间隔/总共时间)
二:单位时间回复的生命值相同
    此0.02秒回复的生命=(失去的生命)*0.5*(时间间隔/总共时间)/(1-0.5*(逝去时间/总共时间))
回复

使用道具 举报

 楼主| 发表于 2010-8-17 20:58:43 | 显示全部楼层
引用第8楼a595859893于2010-08-17 20:21发表的  :
自己做了个,不知道行不行~
可以多人多瓶药水使用(如果BUFF可以叠加的话,不过多人没问题,如果不需要BUFF的话多瓶药水也没问题。。。),反正使用循环整数来单独计算~
被无视了么。。。。。
呃………………
我主要考虑的问题是算法。

比如说4秒内恢复损失的生命值100%
我100HP掉40还剩60,应该在4秒内恢复40。
0.01秒回复一次,一次恢复0.1。

实际上计算起来,第一次恢复(100-60)/400=0.1
第二次是(100-60.1)/400=0.09975
然后越来越少越来越少,和说明上写的100%完全不一样。

记录的话,40/400=0.1,然后每0.1秒恢复0.1生命值这个可以,但是一次性使用多瓶就咯屁了。
仍然是100HP,掉40,剩60。
药水恢复100%损失生命值,也就是40。
但是我同时使用三瓶,由于是使用时记录,所以三瓶都是恢复40。
然后就是尴尬的0.1秒恢复0.3HP
引用第9楼希瓦于2010-08-17 20:23发表的  :
除了一开始记录外,还有两种算法:
一:单位时间回复的生命百分比相同
    此0.02秒回复的生命=(失去的生命)*0.7*(时间间隔/总共时间)
二:单位时间回复的生命值相同
    此0.02秒回复的生命=(失去的生命)*0.5*(时间间隔/总共时间)/(1-0.5*(逝去时间/总共时间))
大言不惭的说:"俺没看懂..."
明天白天照葫芦画瓢,试一下。

晚上是游戏时间~
回复

使用道具 举报

发表于 2010-8-17 21:21:45 | 显示全部楼层
......纯属路过(其实是编辑掉了某个东东)
回复

使用道具 举报

发表于 2010-8-17 22:22:23 | 显示全部楼层
实际上我还是没看明白...
比如单位100生命 还剩20点生命
药水0CD,连嗑2瓶,每瓶在3秒内回复(100-20)/2点
如果没有外力,3秒后就是20+40+40 满血了
这样子不好么?
回复

使用道具 举报

发表于 2010-8-17 22:26:40 | 显示全部楼层
问下裤裤,你想要在嗑第二瓶时有什么效果?
回复

使用道具 举报

发表于 2010-8-17 22:27:03 | 显示全部楼层
多瓶药水叠加使用老变态

这个参考“重击”的叠加就可以了,药剂使用得越多就减少回复的百分比

我也没看懂...

有什么算法比一开始记录好还要准确呢..
回复

使用道具 举报

 楼主| 发表于 2010-8-17 23:47:19 | 显示全部楼层
主要问题是如果用固定值,多药水叠加会成线性。
所以我只能用回复的时候临时计算该回复多少HP。

比如说4秒内恢复损失的生命值100%
我100HP掉40还剩60。

实际上计算起来,第一次恢复(100-60)/400=0.1
第二次是(100-60.1)/400=0.09975
然后越来越少越来越少,和说明上写的100%完全不一样。

用什么样的写法,也就是计算公式可以让玩家很快的计算出来自己会恢复多少HP。
比如说War3里,一瓶大生命药水恢复500HP,玩家只要在自己当前生命的基础上+500就可以了。
如果用我这个药水,他还要心算上百次。

这就好像棋盘里的麦粒,第一次放1颗,第二次放2^1=2颗,第三次放2^2=4颗,第四次放2^3=8,然后是16,32,64,128,256,512,1024,2048,越来越高。
第一次:1
第二次:1*2=2
第三次:2*2=4
第四次:4*2=8
第五次:8*2=16
第六次:16*2=32
第七次:32*2=64
那么第100次应该放多少麦粒?大家都会算,但是想要在很短的时间内算出来,做不到。



不对……
这好像无法计算出来……
干脆就用公式+最大值限制算了……

喝药的时候显示一次计算值,药效结束显示一次实际值,让玩家自行判断。
完毕,谢谢大家的帮忙,这好像是不可能的解题,既然如此麻烦跳过就好了。
回复

使用道具 举报

 楼主| 发表于 2010-8-17 23:51:57 | 显示全部楼层
哎,数学苦手。
我宁愿去思考女人到底是怎么想的,也不愿意去思考数学。
回复

使用道具 举报

发表于 2010-8-18 00:06:16 | 显示全部楼层
其实我之前做了个演示,不过一看没符合要求,没拿出来...
移植、修改都很简单 回复公式在a2里改,裤子看下?

test.w3x

19 KB, 下载次数: 11

回复

使用道具 举报

发表于 2010-8-18 01:21:55 | 显示全部楼层
数学0蛋路过(有选择题例外)
回复

使用道具 举报

 楼主| 发表于 2010-8-18 08:03:05 | 显示全部楼层
引用第17楼Conflux于2010-08-18 00:06发表的  :
其实我之前做了个演示,不过一看没符合要求,没拿出来...
移植、修改都很简单 回复公式在a2里改,裤子看下?
多瓶药水同时使用很糟糕。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-9-28 13:21 , Processed in 0.057037 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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