欢迎光临散文网 会员登陆 & 注册

新版拦截计算器

2023-08-25 04:59 作者:Crescebdo  | 我要投稿

[v2.0.3] 下载链接(2023/8/24更新):

https://pan.baidu.com/s/15BzqA_xWvLlDSEXC7qdJFw?pwd=1437



使用Rust重写原先的Python版拦截计算器,大量提升运行速度(至多5000倍),并修复各种问题。


速度对比

常规计算(快~150倍):

python旧版
rust新版


较复杂计算(快~5000倍):

python旧版
rust新版


可以看到python版花了超过1s,其实是影响使用体验的。



逻辑优化


之所以速度有显著提升,除了rust本身比python快以外,新版也大量优化了计算逻辑。


原先版本中,如果要计算可拦区间:

  1. 每次计算要遍历所有rnd,也就是0~100,共101种可能

  2. 与此同时,小鬼高栈/低栈的情况分开计算,共2种可能

  3. 与此同时,需分别计算巨人x最小/最大值,共2种可能

  4. 最后,在需要计算的delay范围内(一般为106~206),先从小到大每cs计算一次,获得最小可拦;再从大到小每cs计算一次,获得最大可拦

  5. 对于延迟 x cs能否拦截,计算方法是从105开始模拟至x cs,然后返回结果

在无法拦截的最差情况下,总共需计算(1+2+3+4....+100)*101*2*2*2 = 4080400cs。


这里有很多是无用功。比如,rnd对小鬼的影响其实是单调的,因此只需考虑最小值与最大值。再比如,小鬼高栈和低栈基本是一回事,数据完全相同,只是时间上差了1cs。再比如,每次都从105开始模拟很浪费,如果要计算106~206,只模拟一遍就够了,无需每次都从105重来。


在新版逻辑下,若执行同样的计算:

  1. 只遍历rnd=0与rnd=100,2种可能

  2. 高栈与低栈放在一起计算,并进行边界情况的换算

  3. 仍旧分别计算巨人x最小/最大值,2种可能

  4. 在delay范围内,只完整模拟一次(从小鬼出生到落地),期间记录最小、最大的可拦截延迟

总计算量为(100)*2*2 = 400cs,是先前的万分之一。

由于1路小鬼飞行轨迹有轻微不同(受负浮点数取整影响),故新版计算了两次(2炮拦123,以及4炮拦345),所以实际计算量约为5000分之一,和快至多5000倍的数据相符。


另外由于python版实在过慢,其实是用了一些智能推测,猜测用户想要前场拦截还是尾炸,从而略去某些计算。尽管大部分情况下这是合理的,但有些情况下不符合预期,而新版总是执行从小鬼出生到落地可冰的完整计算,数据更加可靠。



功能优化


除了计算效率上,新版也增加了更多人性化设置,如:

  1. 现在支持计算有伤拦截了,默认显示所有可拦区间,如果期间有伤,会额外显示有伤区间:


2. 如图所示,现在默认也会输出最早啃食、最早可冰时机,不必再用单独的冰杀小鬼函数

3. 此外,还会显示计算设定,再也不用猜计算器在算两行还是三行啦

4. 增加“doom”指令,计算核武更便捷:

“>”及之后部分为指定巨人坐标。

如果不指定,就会默认使用当前wave设置,进行便捷计算:

ND5

5. wave支持多个冰时机,无需再用pos函数。

6. 修正旧版里屋顶炮距的两处数据错误(感谢Reisen指出,他已经在v1.2.0版本里修正)

7. 使用更科学的时机(由默认植物激活→炮拦截改为默认炮激活→炮拦截,使用核武时自动修正为炮激活→植物拦截,以及修正冰时机等)



软件说明


本程序源码以MIT许可证发布:

https://github.com/Rottenham/pvz-interception-calculator-rust


MIT 许可证


版权 (c) 2023 Crescendo


特此免费授予任何获得本软件副本和相关文档文件(下称“软件”)的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、转授许可和/或出售该软件副本,以及再授权被配发了本软件的人如上的权利,惟须遵守条件如下:


上述版权声明和本许可声明应包含在该软件的所有副本或实质成分中。


本软件是“如此”提供的,没有任何形式的明示或暗示的保证,包括但不限于对适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人都不对任何索赔、损害或其他责任负责,无论这些追责来自合同、侵权或其它行为中,还是产生于、源于或有关于本软件以及本软件的使用或其它处置。

请注意,拦截计算器无法确保100%的计算精度,其原因包括:

1. 所用的巨人位移数据并非100%精确;

2. 所用的仅取坐标极值的拦截区间计算方式并非100%精确。


在极端情况下,计算结果与实际情况可能存在1~2cs左右的偏差,敬请谅解。


除上述在技术上难以解决的问题外,拦截计算器约定在能力所及的范围内尽可能接近游戏情况。






新版拦截计算器的评论 (共 条)

分享到微博请遵守国家法律