游戏里数值设定单元格数值是否有一定的规律性?

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
游戏数值策划资料
下载积分:400
内容提示:游戏数值策划资料
文档格式:PDF|
浏览次数:229|
上传日期: 12:20:43|
文档星级:
全文阅读已结束,如果下载本文需要使用
 400 积分
下载此文档
该用户还上传了这些文档
游戏数值策划资料
官方公共微信腾讯游戏数值策划
山寨数值策划之
Caicai, 素有小王子&神算子之称,曾经参与ST、FFO、梦三国的相关数值,现在在宠物熊熊和SNS做有爱的数值设计,深入研究和反推过好多款游戏的数值设计。
05年刚进入公司的时候,懵懂的从前辈们口中得知游戏策划大致分什么文案策划、系统策划、数值策划,自以为学过点程序、数学也不赖,而且“数值策划”这几个字感觉忒有技术含量,偶就选择了在数值策划这道上Farm去了。&&&&&
几年数值设计经验下来自己最大的体会就是如图
(EXCEL真看多了,看什么东西都有格子了…)
有幸组织让偶写篇自己对数值策划的了解,作为一个强调要有爱的游戏策划,明显要爆一些实用带又略些八卦到可称作数值宝典的料。
之所以标题叫《山寨数值策划之我有我可以》,首先要提的是,“我有我可以”:任何人都能做好数值。
其实…我的数值启蒙恩师noice 自称高考数学才考了 60 分(150分满),另外国的(国外称数值策划为数据平衡师)如 Tom cadwell(WAR系列
和WOW中专门做数据平衡)
等专家也不是什么数学高材生,并没有太高的技术门槛,反倒有些人有心理门槛(不过有些人就是看到表格和数字就烦)。
花点时间去了解所设计数值的意图,然后就是细心点多演算各种可能出现的状况,数值设计并非难事。那么即便数学成绩并不好,也没有什么关系。
曾有几个前辈很正经跟我说,学数值,研究《D&D玩家手册》外加《D&D 城主守则》
才是王道,我都看了一半没看完。并不是说此宝典不NB,其实花时间看这个《D&D》,还倒不如花时间去多玩几款主流市面游戏。顶多就是看完D&D之后,惊叹到:噢!原来RPG游戏那么多的设计都是出自于这宝典...有P用啊!因为,在国内想找人一起玩D&D 可难了(据说公司里就SLAM 曾经买过来玩过),那花时间去研究一个自己无法体验,然后又难以获得玩家反馈,还倒不如去山寨一张WAR3 地图,或者用什么RPG制作大师山寨一款同人游戏出来,反而体验到更多的数值设计经验。(有意者可看看偶分享PPT《学W.E!学关卡!做地图》)
恩,提及了另一个KEY POINT:山寨,我想说的是,任何人都能做好数值,那怎么做呢?山寨之!
数值设计,没有什么比得上用山寨这种手段学习和引用更有效和妥当了。系统包装可以创新,剧情可以创新,画面表现可以创新,想在数值设计上创新,风险可是大大D。因为数值设计是如下图(还是就拿D&D的范例模型),数值是内在的脉络,没有很好很强大,只有很顺很清晰。
我想了想,把这几年的数值策划日常山寨项拿来分享,还是更有血有泪些:
1.整个游戏数值设计的第一步:升级时间和经验曲线,也叫游戏周期。
根据山寨经验拍一个,Lv上限(50~120,NB的可数幻灵游侠还快1000级还可以99转..),正常体验满级时间,还有各个等级段的大致时间,然后就用公式作出一条大致平滑的曲线。
公式通常为:
每级升级所需时间=(等级的3次方) *K+B&& (y=ax^3+b,三次方函数)
再根据山寨经验拍一个升级效率:RPG游戏通常为杀怪效率,也即战斗节奏(玩家砍一只同等级怪平均用时,算上跑路和回复时间),现在正在做的养成游戏熊熊则为挂机经验效率(挂机是获得经验的主要行为)。
一些山寨经验(即时游戏):
一次攻击时间:1~2秒
平砍一只怪:& 3~8次
然后大致拍一个合理数值规模,在这里RPG游戏主要是琢磨一只怪物各等级的经验值,最常用的公式 怪物经验值=lv*k+b
(y=ax+b),熊熊的挂机效率是固定,挂一分钟获得k点经验。
然后就得出经验曲线= 升级打怪数量*单怪物经验,实际上仍是y=ax^3+b,数值策划通常都会美化一下数值,加上个floor(x,100) or Round(x,-2)函数进行取整。
接下来要做两个事情
一.就是推导各种影响升级效率的因素,因为这个是标杆状况,还多很多因素影响这曲线,包括组队效率,BOSS、任务等其他获得经验的方式,同时也要预留付费提升的空间。
二.就是在这升级时间曲线上,去进行游戏体验分布,同时也理清游戏的框架,这是数值设计的奠基石,这可不是单单靠数值策划完成的,要整个团队去完成,当然,数值策划需要主力去驱动。
2.有了游戏框架的理念后,第二个山寨项目就是定义规划玩家的属性
包括:一、二级属性,自然属性,其他属性(生活、帮派等等),还有基本的战斗公式。
上图是梦幻的一二级属性的关系图。
这个部分主要跟程序打交道了,一二级属性如何换算,升级加点规则,还有这些属性如何调用至战斗或者相关计算中,最麻烦的莫过于,战斗伤害的技术了。主要是战斗过程中,还需要考虑各种参数的计算顺序和关系。
举一个例子,较有深度的WOW的数值理论:圆桌理论
对于进战攻击,有如下战斗可出现情况列表:
a.未命中[命中率相关]
b.闪躲[目标闪躲率相关]
c.招架[背后没有]
d.偏斜[仅出现在玩家和玩家宝宝对怪物时]
e.格挡[背后没有,有盾才有]
f.致命一击[暴击/韧性/暴击伤害相关]
g.碾压[碾压只会出现在比玩家高LV3或更高的怪身上]
h.普通攻击
以上所有项的和最终一定为100%,即有且仅会触发一种。“圆桌的大小有限,在上面的东西多了就可以把桌子下面的东西顶掉下桌,桌子上永远都是100%。”
上面这个优先列表的顺序是按照计算的优先级排序的,排在优先列表前面的项目多了就可以把优先列表后面的项目顶掉下列表,也就是说,如果上面的某项过大,那么它下面的项会被挤掉,如目标闪避和招架也很高,那么就算攻击方有再高的暴击,也不会暴击出来。(即写着50%暴击,实际并没有50%那么高,大部分攻击都被闪避OR招架了)
举个例:70级战士,面板躲闪20%,招架15%,格挡25%,他的圆桌则为如图,可看到这三个面板数值(左边)与实际数值的差距(右边):
其实不要看WOW的圆桌理论很是复杂的样子,其实原理也比较简单,这个圆桌理论其实大部分MMO都用到,如我以前在战斗设计的时候只用到战斗列表中的
b.致命一击
c.普通攻击
由于只用到这3个,我用一句话就可以跟程序沟通清楚。闪避之后就不会出现致命一击和普通攻击,如果没闪避,就按照暴击率计算是否暴击,如果都没有则为普通攻击。
想说的是,WOW数值之所以做得那么丰富,不是因为他有很深奥的理论,仅仅是他把我们用到的元素细分出更多元素,然后通过足够时间进行检查,把丰富的元素都派上用场,而把不平衡的点OR错误减少到最少。
即便是“暴雪”经验丰富的设计师在周密的开发和测试过程中,依然在WOW公测后遗留下一个关于双手武器伤害计算的错误计算公式(后续版本修正了)。
原来做ST的时候,一直秉承山寨精神,反推梦幻的数值,甚至就直接问他们的策划是咋算的。但是也遇到了尴尬的问题,就是半即时嘛,是回合但又有即时的要素,山寨了梦幻一部分,而后又山寨类WOW的设计,结果嘛,就是米做好。
得出的感悟是:要山寨就山寨到底! &&
如果是有战斗的游戏,则需要开始定义基本的攻防公式了。
A.减法公式:
NB山寨之《天龙八部》公式:
外攻型:伤害 = 外功攻击 / 20 - 外功防御 /
(外攻门派,外攻宝宝)
内攻型:伤害 = 内功攻击 / 15 - 内功防御 /
(内攻门派,内攻宝宝)
这个外功内功是我见到最有国人特色的攻防公式了。
更NB 的是,还有这个:
平攻型:伤害 = (内功攻击 + 外功攻击)
/ 20 - (外功防御 +
内功防御) / 50(天龙派,平攻宝宝),
双剑合璧!
这种减法公式在单机游戏经常碰到,特别是回合游戏,但现在即时MMORPG已经用得不多。
B.除法公式
WAR3的默认的公式:
普通攻击伤害=(单位基础伤害+骰子数量*random(1,骰子面数))*
攻防类型相克系数*(1- 护甲抵抗百分比)
其中体现除法的是:护甲抵抗百分比= &k*护甲/(1+k*护甲)
类似的,FO 和WOW 则为:护甲抵抗百分比= 护甲/(护甲+k*lv+B) 这里考虑了等级修正
所谓的除法公式不是:攻击/防御,实际来说是:攻击*防御折扣%。除法在这里的作用是让随防御力的提高,防御力抵消的百分比越趋向某一值,有点limX公式的效果。
减法中,若A-B &0, 那如果B
(防御)再提升就没用,而且设计成长过程中要考虑A和B的平衡关系。而除法中,防御B 可提升的空间是接近无穷大的,不会出现没有用的临界情况,A和B的关系,则可分开来调,但除法公式不易于玩家理解。
& 简单对比减法和除法
优点:易于理解,计算方便,适用于数值扩展规模较小的体系
缺点:通常还得做最大最小值,不适用数值扩展较大的体系,平衡难度大点
除法则与减法相反。
3.最伤数值策划脑筋的一步,则是设定各种职业和职业对应的技能
首先对于策划来讲当然是希望职业越少越好。职业越少,需要考虑的职业相互之间的平衡性可能就越少。但玩家方面则肯定希望有更多的职业,更多的个性体验,这是两个对立的诉求。对于玩家来说,3个职业和12个职业,仅仅是多了9个不同的选择,而对于策划来说,则增加的工作量却是以N次方递增的。策划需要在玩家需求以及实现难度上进行一个平衡。基本上来说,职业多的游戏一般都有几个被称之为“鸡肋”的职业设定,这就是属于由于职业太多,策划无法把控平衡而出现的问题。
我就曾经主刀砍过两次职业的数量,把ST之前的12职业,砍到6个,把熊熊的9个职业砍到6个职业。
对于职业的分类,最基础的分为:
按玩法:肉盾、DPS、治疗
按攻击距离:近程、远程
按攻击类型:物理、魔法
&按伤害类型:AOE、DD、DOT(范围攻击、单体直接攻击、持续伤害)
按控制状态:BUFF、DEBUFF
按游戏体验:PVE定位、PVP定位&&&&
按特色能力:召唤、隐形、生活技能相关等等
从这些参数中抽取若干项,组成职业设定的特色。
玩家通常都是喜欢当DPS,所以大部分MMO的职业中,DPS 的区分是最细的。
然后围绕这些特色去设置该职业的一二级属性的初始值和成长率
通常每一个职业,还会有细微差别的玩法,通常通过天赋OR加点来形成差别,然而在免费游戏中,由于能力的大部分比例又投到了装备上,其实现在做天赋真的是吃力不讨好,加点还算简单点。
最最最费心思的就去根据职业特色去设置技能了。
技能(ability)通常是玩家能力的释放,就算是没有职业的MMO(石器等),技能也是体验战斗策略和核心。
在技能的设计时,职业特色决定了该职业常用的技能,通常为3-5个,挑选的这些技能还有考虑有一定的连贯性的,使用起有手感。然后就在收集的若干份技能设计表中(诸如WOW的、大菠萝的、我个人现在挺喜欢的DOTA的,回合看大话2
OR魔力的),抽取一些符合思路技能,参考相关的数值,CD、计算方式、BUFF、伤害规模等等。
还得琢磨一下PVE的和PVP在技能使用上的策略性,对于策略性哥哥还有个新想法分享,就是尝试用技能使用频率做衰减,即单一个技能如果在短时间内重复使用过多其作用效果会减弱,让玩家别老只按一两个技能。
大致凑齐了职业的技能后,我们再向常用的技能做升级的设计(能力加强、范围变大、CD变短、消耗变大等),通常采用的设计方式为:
技能升级,相关NPC进行技能升级 (石器、WOW)
天赋,升级等途径获得天赋点,升级天赋,获得对应的技能升级和属性提升
主流方式,大菠萝的经典设计)
心法升级,通过消耗游戏币OR经验值,升级心法,然后获得对应的技能升级和属性提升(梦幻和天龙,这种方式的好处是大量回收游戏币,如上图)
装备和技能书,某些高端技能来自于装备和
高端物品技能书(宠物技能常用方式),玩家会骂职业对应天赋的不平衡,但很少去介意装备和技能书的不平衡,因为后者每个玩家都可以获得,然而前者则天生固定,玩家难以改变。
这里也要考虑技能出现等级的安排,都琢磨完之后,那么第一版的技能设计基本完成,接下来就是要根据游戏的世界观,如果有最好找上做表现的策划去构思,去取一些名字,让技能设计出来玩家不觉得太山寨。接下来就是反复的推敲、推倒、验算,再推敲、推倒、演算。。。。
4.另外一个也是数值策划主要KPI之一,经济系统的设计。
我曾经用过不少经典图例尝试去阐述经济系统,包括水池模型 和
简单粗暴的产出消耗循环模型
水池模型:
1.经济系统的输出部分,要大开闸门,广开门路,多做无底洞的消费
2.输入部分要做的尤为细心,玩家会想法设法用机械重复上升到外挂的程度去冲开闸门
3.若想稳定货币价格,调整输入项效果更明显
4.达到高位水平,则需要考虑活动和新系统去回收资源
5.付费满足了部分个体玩家的各种低位调节
产出消耗循环模型
这个是一个动态的环,而不是把所有ins和outs罗列,可以看下图他的演变。
个性诉求并不是只给高等级玩家独有,每个阶段都应该设计对应的个性诉求消耗
玩家在成长过程中的产出其实还是为了提高下一阶段的效率
做数值不仅仅只是要做平衡,而忽视了让玩家发现和运用数值规律的乐趣。
通过这个环可以扩展到整个游戏的设计。
(以上的理论也被不少同事质疑,^_^)
通用的产出消耗曲线
罗列出各种消耗项和产出项,根据标杆固定的产出行为和消耗行为时间比例做出来的每等级产出和消耗曲线。
前期生存压力小,产出偏多
后期生存压力大,消耗偏多
交叉点就是我们想开始进行收费的时间的点,这个点之后,两条曲线的差也是付费的空间。
5.其他系统的数值支持
其实,除了前面这些看上去对游戏举足轻重的核心数值设计内容外,数值策划,其实还得承担不少数值杂活。因为咋数值策划做一行爱一行,为其他策划在数值上做出权威性的指导,同时也让具体的数值落实到位,而不是仅仅在EXCEL表格里躺着。
其实主要还是要心细,就算不是自己算,也要亲自去检查过目一番。
通常以下这些事情,都是数值设计的活,具体设计规则就择日再详细讨论:
道具系统:装备和道具的数值设定(能力和价格等等),装备强化的数值设定,合成配方的数值设定
宠物系统:宠物成长,宠物技能等
帮派系统:帮派建设,帮派技能等
关卡设定:怪物和BOSS 设计,副本设计等
各种奖励设计:任务奖励,活动奖励,宝箱概率等
还有,最重要的就是,填那无尽的表格。
数值策划应该是策划组中最了解各个系统细节的人了。
6.测试阶段,数值策划不是一个人在战斗!
如果想数值做出来对得起观众,那就得制定数值测试方案,这个必须是有针对性的,测试的项尽量是可量化的,而不是选择,不合适OR合适。
另外,充分调动测试组和策划组同事,玩家研究院,测服玩家,要求数值策划有要一定的魅力。
由于哥哥我有着亲切的形象,找研究院的同学研究的时候,他们就特别卖力,相反之前有个同事玩家私底下都不爽他的沟通方式,结果就可想而知。
最后列一张数值交流群里的转的一个对于不同开发阶段,对于数值验算的工作分布,让大家了解数值策划的工作。
1.我每天晚上睡觉前都要通关一局NDS的激辣数独(9宫图),白天有空也会预测一下0700的走势,保持对数字的敏感度;
2.自己喜欢玩的游戏,我都要反推一下他的数值设计和公式,反推设计者的意图(最近的杰作是美少女梦工厂和DOTA);
3.再好的数值设计思路,都不如拿出来与人分享一下,但数值策划的通病就是只爱改表,懒得用文档给阐述下来,而且要让其他人能看得懂,哥哥我正在努力改正这个缺点。
4.游戏的类型很多,都有不同的数值设计理念,数值设计的学习空间很大,遇到没挑战过的数值设计,哥哥都比较兴奋,谨此文与各位一起分享有爱的数值设计。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。游戏设计中有经典的计算公式 - Bill Yuan - 博客园
正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...
posts - 833, comments - 26, trackbacks - 0, articles - 0
转自:/question/
没做过DOTA类游戏的平衡,LOL也玩得不多,只能说下我自己的办法第一个问题:符文系统和天赋系统存在的必要性和对战局的影响?先引入两个概念:Ehp:effective health point 有效生命Ehp受自身的HP、闪避、防御、护甲、韧性、格挡、招架、免伤、技能系数、等级加成、各种抗性等等数值影响。举例:假如你有1W生命,且有50%减伤(与对方命中无关),那你的ehp就是2W。Edps:effective damage per second有效输出Edps受自身的攻击力、命中值、暴击率、暴击效果、穿刺、急速、等级加成、各种属性攻等等数值影响。举例:假如你的输出间隔是1S,100%命中,攻击力为100,暴击率为100%,暴击效果为150%,则你的edps为150。则在在两个人之间的胜负结果,始终可以用下面的公式来表示:
所谓的符文、天赋、装备等等各种系统,归根结底都是对人物数值的影响,本质上并无任何区别,每新增一个系统,不过是把每个属性的数值成长上限放高而已。所有以上没有哪个系统是必要存在的,今天可以做成符文系统,明天还可以换成后宫加成系统,表现形式不同而已。至于对战局的影响,最优解的问题会谈到。第二个问题:关于数值成长中最优解的存在(开会去。。。晚点填)==============================================================ELO等级分体系(很久之前做过的PPT,东西太多有点乱,粘一部分上来)简介ELO等级分体系是根据它的推广者埃洛(elo) 名字命名,它是一种以数值表示的体系,将等级差别转化 为分数或取胜概率。理论基础粗略看一下很多比赛的成绩表,能够看出某个选手的表现是有起伏的,即有&状态&之分。强手未必恒定表现好于弱手,每人之状态在不同的日子不同的比赛里都会有好坏不同。而总的来说整个生涯里每一点上,一名选手的表现将大致围绕在某个平均水平上下波动,有时会有背离,而出现大背离的情况比出现小背离的情况频率要低。于是,有了ELO体系的第一个假定:可以建立这么一个等级量表,某个体在这个表里的不同表现将正常分布。第二个假定简单地说:在某一个特定的实力范畴里,尽管可能存在实力上的差异,但总的来说可以预期没有谁比谁好或差很多。由此可以定量划分区间。等级量表-区间尺度等级差别是可能性方面的唯一重要因素。指对阵双方谁有多大机会胜/负/和,唯一影响因素在于他们之间的等级差别,这样排除了难以确定的&状态好坏&(第一假定),也排除了具体谁对谁的影响(第二假定)。因此即使出现&爆冷&或 &克星&,也视为偶发情况,因为ELO体系是建立在样本足够大量的统计基础上的。标准分类间隔(附表)即某一个等级里最高与最低之间的差别。在国际象棋里,FIDE(即国际棋联)采用每200分为一个间隔的分类法,并且给每一个间隔取一个名字或排名以更好分辨。
常态分布函数强手未必总是胜过弱手,于是就使用一个&常态分布函数来代表一名选手的波动表现,这是统计学上的概念。从这个函数里可以得出另一个函数叫&常态概率函数& ,这个就定义了根据比赛对抗结果可得出的等级差别,或者根据已知的等级差别可得出的预期比赛对抗结果。它是这样的:
P(D)这个值,就是以等级分差别D为自变量计算出来的预期取胜可能性(预期得分率),它可近似用下面这个公式来计算:
举例一Ra:表示队伍A当前的等级分Rb:表示队伍B当前的等级分Sa表示队伍A的比赛结果,胜利S值为1,平局S值为0.5,失败S值为0Ea:表示A在这场比赛中的胜负值期望Eb:表示B在这场比赛中的胜负值期望其中Ea+Eb=1,也就是胜率和为1举例二一个等级分1950的选手,她的对手等级分1700分,那么她取胜的机会有多大呢?&等级分差别D=0,代入上面那么近似计算公式,就是:
也就是说,她胜利的机会有80.8%,大约是81%。事实上,看下表,即可得知等级分差别在246-256之间的强手预期取胜可能性就是81%。不用计算。上面看不懂?没关系!
当前等级分公式
Rn = Ro + K * (W - We)
Rn是赛事后的新等级分;Ro是赛事前的原等级分;K是单局得分的等级分点值,它是一个系数,取值有约定的;W是实际对局得分(胜得1、和得0.5);We是在原等级分基础上的预期对局得分。&这个公式是用来在连续基础上(也就是每局或每个赛事之后)计算新等级分的。它把最新的表现调整考虑进先前的等级分中。它的逻辑意义是一个选手的表现高于他的预期得分以及低于他的预期失分。系数K决定了事前等级分和本次表现分的相应权数。K值越高,那么越近的赛事表现的分量越大。反之则反之。一般K值范围从10到32。下面是一个K取值参考表:
举例三一个队伍等级分1650,比赛中分别与等级分为和1550的三个队伍对了阵,战胜了低分的两个,逼和了最高分的那个。问新等级分是多少?K值取10;Ro=1650;W(胜2和1) = 1 + 1 + 0.5 = 2.5We = P(1650 - 1270) + P(1650 - 1550) + P(1650 - 2050)=0.910 + 0.638 + (1-0.921)=1.627套入第二个公式,即Rn = Ro + K * (W - We) = 1650 + 10 * (2.5 - 1.627) = 1659也就是她在这次赛事后,等级分升了大约9分,成为1659。举例四某竞技场队伍等级分2350,11场比赛5胜6负,K取32;对阵11场情况如下:
已知原等级分Ro为2350,已知本次比赛实际对局得分W=5,已知K值取32,已知(总)预期对局得分We为5.24, 计算时可省略为5.2,那么根据公式(2),Rn = Ro + K * (W - We),新等级分Rn = 2350 + 32 * (5 - 5.2) = 2343.6 , 大约是2344,比之前下降了。课后小思考①K值如果往上取,会造成什么情况?②K值如果往下取,会造成什么情况?③WOW与DOTA天梯明显的不同在什么地方?④以上的不同为WOW带来了什么漏洞?⑤WOW里队伍积分和个人积分分别有什么用?
1、卡马克快速平方根
它让计算平方根倒数的计算速度提高了4倍,导致了3D游戏的革命。没有这个算法,恐怕到现在3D游戏里的物体仍然没影子(想想看CS的画面)。这个算法在上世纪就出现了,但是在10年前才引起游戏圈的关注,算法的原理很清楚,但是作为算法核心的那个常数,至今没人知道它是怎么得出来的。有传言说是外星人入侵互联网时留下了这个常数。游戏业各位大牛纷纷在源代码后面写上了一句注释:what the fuck?
在3D图形编程中,经常要求平方根或平方根的倒数,例如:求向量的长度或将向量归一化。C数学函数库中的sqrt具有理想的精度,但对于3D游戏程式来说速度太慢。我们希望能够在保证足够的精度的同时,进一步提高速度。
Carmack在QUAKE3中使用了下面的算法,它第一次在公众场合出现的时候,几乎震住了所有的人。据说该算法其实并不是Carmack发明的,它真正的作者是Nvidia的Gary Tarolli(未经证实)。
//// 计算参数x的平方根的倒数//float InvSqrt (float x){float xhalf = 0.5f*x;int i = *(int*)&x;i = 0x5f3759df - (i && 1); // 计算第一个近似根x = *(float*)&i;x = x*(1.5f - xhalf*x*x); // 牛顿迭代法} 该算法的本质其实就是牛顿迭代法(Newton-Raphson Method,简称NR),而NR的基础则是泰勒级数(Taylor Series)。NR是一种求方程的近似根的方法。首先要估计一个与方程的根比较靠近的数值,然后根据公式推算下一个更加近似的数值,不断重复直到可以获 得满意的精度。其公式如下:
函数:y=f(x)
其一阶导数为:y'=f'(x)
则方程:f(x)=0 的第n+1个近似根为
x[n+1] = x[n] - f(x[n]) / f'(x[n])NR最关键的地方在于估计第一个近似根。如果该近似根与真根足够靠近的话,那么只需要少数几次迭代,就可以得到满意的解。
现在回过头来看看如何利用牛顿法来解决我们的问题。求平方根的倒数,实际就是求方程1/(x^2)-a=0的解。将该方程按牛顿迭代法的公式展开为:
x[n+1]=1/2*x[n]*(3-a*x[n]*x[n])将1/2放到括号里面,就得到了上面那个函数的倒数第二行。
接着,我们要设法估计第一个近似根。这也是上面的函数最神奇的地方。它通过某种方法算出了一个与真根非常接近的近似根,因此它只需要使用一次迭代过程就获得了较满意的解。它是怎样做到的呢?所有的奥妙就在于这一行:
i = 0x5f3759df - (i && 1); // 计算第一个近似根超级莫名其妙的语句,不是吗?但仔细想一下的话,还是可以理解的。我们知道,IEEE标准下,float类型的数据在32位系统上是这样 表示的(大体来说就是这样,但省略了很多细节,有兴趣可以GOOGLE):
bits:31 30 ... 031:符号位30-23:共8位,保存指数(E)22-0:共23位,保存尾数(M)所 以,32位的浮点数用十进制实数表示就是:M*2^E。开根然后倒数就是:M^(-1/2)*2^(-E/2)。现在就十分清晰了。语句 i&&1其工作就是将指数除以2,实现2^(E/2)的部分。而前面用一个常数减去它,目的就是得到M^(1/2)同时反转所有指数的符号。
至于那个0x5f3759df,呃,我只能说,的确是一个超级的Magic Number。
那个Magic Number是可以推导出来的,但我并不打算在这里讨论,因为实在太繁琐了。简单来说,其原理如下:因为IEEE的浮点数中,尾数M省略了最前面的1,所 以实际的尾数是1+M。如果你在大学上数学课没有打瞌睡的话,那么当你看到(1+M)^(-1/2)这样的形式时,应该会马上联想的到它的泰勒级数展开, 而该展开式的第一项就是常数。下面给出简单的推导过程:
对于实数R&0,假设其在IEEE的浮点表示中,指数为E,尾数为M,则:
R^(-1/2)= (1+M)^(-1/2) * 2^(-E/2)
将(1+M)^(-1/2)按泰勒级数展开,取第一项,得:
原式= (1-M/2) * 2^(-E/2)= 2^(-E/2) - (M/2) * 2^(-E/2)
如果不考虑指数的符号的话,(M/2)*2^(E/2)正是(R&&1),而在IEEE表示中,指数的符号只需简单地加上一个偏移即可,而式子的前半部分刚好是个常数,所以原式可以转化为:
原式 = C - (M/2)*2^(E/2) = C - (R&&1),其中C为常数
所以只需要解方程:R^(-1/2)= (1+M)^(-1/2) * 2^(-E/2)= C - (R&&1)求出令到相对误差最小的C值就可以了上面的推导过程只是我个人的理解,并未得到证实。而Chris Lomont则在他的论文中详细讨论了最后那个方程的解法,并尝试在实际的机器上寻找最佳的常数C。有兴趣的朋友可以在文末找到他的论文的链接。
所以,所谓的Magic Number,并不是从N元宇宙的某个星系由于时空扭曲而掉到地球上的,而是几百年前就有的数学理论。只要熟悉NR和泰勒级数,你我同样有能力作出类似的优化。
在上有人做过测试,该函数的相对误差约为0.177585%,速度比C标准库的sqrt提高超过20%。如果增加一次迭代过 程,相对误差可以降低到e-004的级数,但速度也会降到和sqrt差不多。据说在DOOM3中,Carmack通过查找表进一步优化了该算法,精度近乎 完美,而且速度也比原版提高了一截(正在努力弄源码,谁有发我一份)。
值得注意的是,在Chris Lomont的演算中,理论上最优秀的常数(精度最高)是0x5f37642f,并且在实际测试中,如果只使用一次迭代的话,其效果也是最好的。但奇怪的 是,经过两次NR后,在该常数下解的精度将降低得非常厉害(天知道是怎么回事!)。经过实际的测试,Chris Lomont认为,最优秀的常数是0x5f375a86。如果换成64位的double版本的话,算法还是一样的,而最优常数则为 0x5fe6ec85e7de30da(又一个令人冒汗的Magic Number - -b)。
这个算法依赖于浮点数的内部表示和字节顺序,所以是不具移植性的。如果放到Mac上跑就会挂掉。如果想具备可移植性,还是乖乖用sqrt好了。但算法思想是通用的。大家可以尝试推算一下相应的平方根算法。
2、简单公式
减法公式:受到伤害=敌人攻击力-防御力除法公式:受到伤害=敌人攻击力*敌人攻击力/(防御力+敌人攻击力)乘法公式:受到伤害=敌人攻击力*(1-免伤率)经典概率算法圆桌概率算法属性池概念
3、双曲线公式:COC中大量粗暴的使用
4、ELO算法:貌似wow和11平台的天梯都有用到
5、超级机器人大战伤害计算公式
{(武器攻击力&(对应能力值+气力)&武器的地形适应&200-装甲值&(防御值+气力)&200)&攻击机体地形适应修正}&100&{100+(武器的最大射程-和敌人的距离)&3&100}*特殊技能修正 1L是正解,我是来解释的。武器攻击力,即攻击时选择武器的列表中标示的攻击力。能力值,如果武器是格斗武器则是机师的格斗值,若是射击武器则是机师的射击值,若是跨系武器则取两者的较高值。武器地形适性是指武器具体属性中对应的&空宇地海&的那个,S为1.2,A为1,B为0.8,C为0.6(B和C不太确定&&)装甲值,机体的装甲数值,这个不用解释吧&&气力是机师的气力,防御值是机师的防御数值&&机体地形适应修正指的是机体能力具体属性中的对应的&空宇地海&的那个,参数与前面相同。&射程&不用解释吧&&特殊技能的修正指的是机师技能对伤害的影响,比如机师独有的某些技能,以及强攻者等等技能的影响。具体举个例子:我方某机体(机体的地形适性空S宇S陆A海A)用一种射程为7、攻击力3000的光束射击武器(光束武器一般都是空A宇A/S陆A海B)从水中射击距离为5的敌方1600装甲值的机体。我方机师气力150,格斗210射击190,有强攻者技能(气力130以上伤害为1.2倍);敌机师气力100,防御200。此时我方攻击造成的伤害是{[3000&(190+150)&0.8&200-1600&(200+100)&200]&1}&100&[100+(7-5)&3&100]&1.2=2017
6、D&D中的各种检定计算
7、卡马克卷轴算法
8、仙境传说:护甲值是def,体力值vit 受到的伤害=对方〔atk*(100-def)/100〕-vit 从两方面减伤,同时强调了护甲值和加点体力的重要性
9、兰切斯特方程式
10、火炎纹章系列乱数表

我要回帖

更多关于 用户积分体系数值设定 的文章

 

随机推荐