游戏开发论坛

 找回密码
 立即注册
搜索
楼主: guirenya

[讨论] 求解一道数值题

[复制链接]

1

主题

265

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2007-9-30 17:11:00 | 显示全部楼层

Re: 求解一道数值题

虽然我是新人,但我还是忍不住要说楼上的各位,思维都是固定在正向,为什么不反过来考虑一下哦。我自己算了下,最大值是肯定存在的,而且是一个一元二次方程最大正根取整后的值(姑且这样说吧)。

有人说A《B时则玩家一个怪也杀不死,这样考虑当然没错,不过你还是想的太简单化了,还要结合A,B,C的取值来决定才是完善的,比如A = 2*B,不论C多大,玩家肯定最终能杀死一个怪,当然最后同归于尽了。意思就是说明N跟A,B,C有关系的。

由于本人懒了点,就不想把我的解答过程详细打出来了。就粗略说说我的思路吧。
1) 假设符合要求的值为N,则有:
    玩家杀死N个怪需要时间:A*N;
    A*N时间内怪物对玩家造成的伤害累积时间:N*A+(N-1)*A+...+A = A*(N+1)*N/2, 易知伤害累积时间=B时则表示玩家理论死亡一次;
    玩家在A*N时间内可使用加血技能次数:[A*N/C] ;  ([]符号表示向下取整)
    则玩家在A*N时间内拥有的可抵消怪物给于的伤害累积时间:B+[A*N/C]*B
    则得到一个不等式:玩家可抵消的时间>=怪物伤害累积时间,即
    A*(N+1)*N/2 <= B+[A*N/C]*B
    由于[A*N/C]取整所以用一个X代替,得到:
    C^2*X^2/2*A+C*X/2 <= B+B*X
    这是一个一元二次不等式,求出最大的X即可得到最大的N(X = [A*N/C])
    不管A,B,C值如何,这个方程的曲线总是开口朝上的,即不等式在有根的情况下总可以得到最大的X。
    以上。有说的不对的还请多指教。

1

主题

265

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2007-9-30 17:15:00 | 显示全部楼层

Re:求解一道数值题

补一句,有要招策划的(系统和数值的最好),考虑一下我撒,也许我会给你们公司惊喜哦。

2

主题

245

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2007-10-15 12:07:00 | 显示全部楼层

Re:求解一道数值题

真复杂啊……

14

主题

145

帖子

191

积分

注册会员

Rank: 2

积分
191
发表于 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之间的关系;
篇幅关系,这些特例就不一一列举了
sf_2007102121319.jpg

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-10-30 17:56:00 | 显示全部楼层

Re:求解一道数值题

俺啥都不懂,第一次跑进来看了下~~  我也想发发言:
是不是当C<A时 B/N>C
C>A时 B/(N-C/A)>C 当然C/A取整数,如1.8=1,  2.7=2   出来两年什么函数都忘了,只能举例~~ 大家莫笑!
希望大家批判下我的思路!!

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-10-30 18:06:00 | 显示全部楼层

Re:求解一道数值题

哈哈,我搞错!  一想明白了点~~    还是再想清楚了再说,省得又来出丑!

0

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2010-5-3 18:33:00 | 显示全部楼层

Re:求解一道数值题

暂时没整理好,先说下自己的想法,设角色生命为1,一个怪每秒造成的伤害为1/B,假设能承受的怪为X,那么角色要承受的总伤害为(1+X)X/2B(注:总伤害暂时还不确定最后要用不,只是思路),角色每撑过C秒就可恢复到1生命,第一次没有CD,所以需要考虑的是第二次开始,第二次CD时间等于怪的总伤害等于1时的时间。今晚整理下再说出我的答案,吃饭先,先把思路写上来,怕忘。=.=

0

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2010-5-3 21:44:00 | 显示全部楼层

Re:求解一道数值题

吃饭,朋友用了下电脑,现在回来说下我的思路和答案,望指教。
上面总伤害少一个A在分母,补上才对,总伤害为下述第二种的算法。
由于题目没有说清,特分特殊情况和一般情况两种算法。
1.特殊情况,即怪在同一时间清除,一般游戏应该不采取这种,不过想到就写下,这种也相对容易算,还是上述的设法,设角色生命为1, 怪的数量为X,怪打死角色时间为Y。
解:(1)如果怪打死角色时间Y大于等于技能恢复时间C的话,技能可以连续释放,角色不死,即Y>=C时,Y*X/B=1,即X=B/Y,当Y取最小值是,X最大,即X=B/C。
(2)如果怪打死角色时间Y小于技能恢复时间C的话,技能只能释放一次,并且角色要在第二次给怪打到前杀死所有怪,即Y<C时,Y*X/B=2, X=Y/A,联合两式得X^2=2B/A,Y^2=2AB<C^2

0

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2010-5-3 22:01:00 | 显示全部楼层

Re:求解一道数值题

2.一般情况,先设角色生命为1,怪的数量为X,第一次让角色没血的时间为Y。一般情况为一开始X个怪的伤害为每秒X/B,每过去A时间后怪物减少一个,伤害减1/B,在伤害递减阶段,第一次恢复血不用算CD,第二次要算,所以第二次为临界值,只要第二次让角色没血的时间等于技能冷却时间C即可达到最大怪物值。
解:令Z=Y/A取整,公式(1),则以第一次角色没血:(X+1-Z)(Y-ZA)/B+(X+X+2-Z)(Z-1)A/2B=1,公式(2)。再考虑第一到第二次没血,令U=Y+C/A取整,公式(3),则(X+1-U)(Y+C-UA)/B+(X+X+2-U)(U-1)A/2B=2,公式(4),结合公式(1)-(4),四个未知数可解,由于没有具体值或大概值,存在取整无法算出最后步骤。
以上为个人答案,如果哪里看不懂可以提出,望指点

0

主题

19

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2010-5-12 09:54:00 | 显示全部楼层

Re:求解一道数值题

我感觉这个就是在C时间内,被N个怪物把你的血耗掉,这个N就是你要的值了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-15 15:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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