|
发表于 2007-10-21 21:31:00
|
显示全部楼层
Re: 求解一道数值题
毫无疑问,这是一道看似简单,实则复杂的高难度数值设计题。在这里我先向楼主表达12分的敬意,好久没做过这么爽的题目了。
不过,题虽好,楼主仍有一个细节条件没有给出。这里我就先将这个条件做一个简单假设。
关于怪物攻击力和攻击频率问题。虽然楼主说,可以假设玩家在生命值为1的时候再使用技能,但如果不给定怪物攻击频率与攻击力的话,角色生命值几乎不会有成为1的机会,也就是说角色使用技能的那个临界点是一个十分模糊的点,这样也就无法得到精确的解答了。所以,我将它假设成一个理想的攻击过程——既角色遭攻击时,生命是一个随时间不断下降的过程,此外,怪物的攻击也将是一个不间断、持续进行的过程。
再假设一下通常的情况,即B>C,B>A
OK,有了这个前提,我们可以展开思路了。
1。首先,我们要求什么?求的是一个怪物数量,如果怪物数量大于求出的数量,那么角色就会死亡。故而我们最终的答案应该是一个怪物数量(暂定为K)临界值(整数),该值与题目给定的几个参数相关,可写成K=F(A,B,C),如果怪物数量超过该临界值,角色将被打死。
2。我们需要审视整个战斗过程吗?答案是不需要,因为玩家拥有一个带有恒定冷却时间、瞬发、且可以无限次使用的加满血技能,而怪物却是因受到玩家攻击而不断减少的,这也就意味着,玩家只要熬过一个死亡可能峰值,之后将不会被杀死。关键是,这个峰值在哪呢?在第一次使用技能之前?很明显,不是。因为我们知道,第一次加血是不需要冷却时间的,按照我所假设的条件,角色的血量如果是持续减少的话,那么不管第一次加血前怪物的攻击有多猛烈,角色都能恢复满血。所以,死亡可能峰值必然落在第一和第二次加血过程之间。于是,我们只需考虑两次加血前的情况,就能得到答案了。
3。接下来,我们可以想象一下玩家死亡的原因。题目提供了A,B,C三个已知值,从这三个值入手分析一下。A是玩家杀怪时间,这个值能起决定影响吗?不能,不管A值过大还是过小,只要角色能使用技能,角色都不会死亡;B值也是同样道理;而C值,才是起决定性影响的值。当玩家使用了第一次技能后,因为C值的存在,角色不能马上使用技能, 故而可能在战斗中因承受过多伤害而死亡。所以,我们可以确定,整个设计过程的关键会落到C值上,我们已经可以得到一个最终解开该题的方程模型了
C=F(A,B,K)
--既以第二次与第一次使用技能之间的时间间隔作为临界点来建立方程,从中求出K与A,B,C的数值关系——一个包括A,B,C的多项式,当K大于该值时,角色即会死亡。
4。我们应该注意些什么呢?如下图所示:
时间!
第一次使用技能在什么时间?是在刚好杀死一个怪的时候吗?这种情况只是一种特例,更多的是会在杀某只怪的过程中。
第二次使用技能也是同样道理。
所以,要模拟这个过程其实并不困难,关键就是要求出A1,A2以及A3这三个时间。
求解过程:
我们先假设人物的生命为H(该H实际上只是个便于理解的中间参数,在方程中它是可以被约去的)
那么,每个怪每个时间单位的攻击力=H/B
根据角色第一段生命列方程,可求出X
(K+(K-1)+(K-2)+…+(K-X+1))*H/B=H
为X取整
X=INT(X)
接下来,利用整数X写方程,求出A1
H-(K+(K-1)+(K-2)+…+(K-X+1))*H/B=(K-X)*A1/A*H/B
接下来,再求出A2
A1+A2=A
根据角色第二段生命列方程,带入整数X以及A2,可求出Y
((K-X-1)+(K-X-2)+(K-X-3)+…+(K-X-Y+1))*H/B=H-(A2/A*(K-X)*H/B)
为Y取整
Y=INT(Y)
接下来,利用整数Y写方程,带入整数X、A2,求出A3
H-((K-X-1)+(K-X-2)+(K-X-3)+…+(K-X-Y+1))*H/B=(K-X)*A2/A*H/B+(K-X-Y)*A3/A*H/B
以冷却时间C写方程,将所有时间因素整合
C=A2+A3+(Y-1)
因为A2,A3,Y都是关于A、B、K的多项式,所以最终形式可以变为
K=F(A,B,K)
最终目标达成(解方程过程略)
提出几个特例:
如果:B<C
即一个怪也能把角色给灭了,需要额外考虑;
如果:B>A
即角色杀怪时间比怪杀角色时间长,需考虑B和C之间的关系;
篇幅关系,这些特例就不一一列举了 |
-
|