酱油壕赠言:慢慢看,看懂数值你就入门了^_^战斗过程的基本原理第一章标准战斗过程网易公司理论研究组宋悦Ver1.11内容简介对于大多数游戏来说,战斗过程是最重要和最基本的数学模型,在游戏中我们可以见到各种各样的战斗,方式林林总总,数值名目繁多,过程千变万化。在这让人眼花缭乱的过程背后,有没有基本的规律呢?是不是可以找到一种定量的方法,让我们对战斗过程的设计更加丰富,对平衡性的把握更加准确呢?本文要做的,就是力图在这个方向上迈出第一步。作为战斗过程分析的第一章,本文提出了战斗过程最基本的一个结论:任何一场战斗的双方战斗力差值不变。给出了战斗力的基本算法,战斗力是输出对承受的积分,特别地,在输出与承受无关的情况下,战斗力=输出*承受。并且针对单、多单位各种战斗情况进行了分析,均证明了这一结论。本文分为5个小节。其中引言部分,从心理学层面解释为什么战斗过程在游戏中如此频繁,也说明战斗过程的设计对游戏非常重要。第一节分析了单个单位之间的战斗过程,提出了最基本的战斗力计算方法以及结论,分析了常见的单体战斗力计算公式类型,举出了《暗黑破坏神》、《英雄无敌》、《魔兽世界》与《魔兽争霸》的基本伤害公式,并进行了简单的分析。第二节分析了多对多情况下由数量带来的战斗力平方增长效应,即兰彻斯特定律,进而得到了在多单位战斗情况下战斗力的计算方法。第三节分析了单对多情况下的战斗力对比图,验证了上述定律,并对一种特殊情况:AOE过程进行了分析。第四节提出了在各种战斗过程下的总的规律和结论。第五节对其它的因素进行了一些考量。包括战斗时间、随机化、离散化对战斗造成的影响。版本介绍时间版本内容06.9.111.0完成了基本内容:战斗力计算方式与守恒定律06.9.181.01加入了事例分析、加入了AOE分析,加入魔法伤害简单评价,更名为《战斗过程的基本数学原理》内容简介..........................................................................................................................................1战斗过程分析..................................................................................................................................2引言..............................................................................................................................................2第一章标准战斗过程...........................................................................................................4第一节单个单位的战斗过程...........................................................................................4第二节多个战斗单位的战斗过程.................................................................................13第三节单个单位与多个单位的战斗过程.....................................................................19第四节结论.....................................................................................................................24第五节其它影响战斗过程的因素.................................................................................252战斗过程分析引言战斗是网络游戏玩家进行游戏,尤其是练级的最主要方式。这主要是因为以下原因导致的:1.毁灭都是人天生的欲望之一。在进化心理学中,K.Lorentz认为正是有了攻击行为,种群的后代才能有最强壮的父母,物种才能代代相传。攻击行为是人类生活不可避免的组成部分。里查德.劳尔也认为,攻击性起源于人类的进化过程,并且因为其生存适应价值一直保存了下来。弗洛伊德的精神分析观点认为,人类存在一种死本能,死本能“极力把个体推向毁灭,减少个体的生命力,直至其回到原来的无生命状态”。当它指向人外部的时候,就表现为对他人的攻击与暴力行为。死本能指出了人有被驱动去攻击、侵略的行为本性。在一般的网络游戏中,新人的第一个动作经常就是关掉了所有对话,然后跑出去打怪,这里面既有人们进行网络游戏的游戏习惯,也说明了人类对于战斗的本能需求。2.游戏是对现实的一种模拟,而在现实中,战斗几乎贯穿了人类历史的始终,对于战斗的模拟和研究理论,也是非常成熟的。从中国的《孙子兵法》到克劳塞维茨的《战争论》,这些都对游戏中战斗的设计提供了非常好的理论依据。从可实现性上来说,游戏是对现实进行数字化的模拟,对人的行为做出相对应的数学理论模型,并且在其中做出玩家可控的部分。战斗中的攻防和伤害,包括加入了神话、奇幻之后的魔法、诅咒,都能够进行很好的量化和数学模拟,如D&D之类的桌面游戏就是量化的方法之一,这些手段使得用计算机来建立模型,构建游戏成为非常容易实现的过程。(吃饭也可以满足上面2个条件,为什么不能是游戏的主要玩法?)3.战斗过程中存在着矛盾和斗争,情形相对复杂,而且在战斗过程中可以做出丰富的音乐美术效果,满足人在视听方面的需求,存在着大量的信息量,在其中也可以加入非常多的元素供玩家进行控制,如装备的选择、技能的使用。用信息论的角度来看,一个战斗过程,带给玩家的信息要比其它的动作多的多,因此战斗成为网络游戏中玩家最经常体验的过程。正因为如此,战斗过程,可以说是网络游戏中玩家经历的最多,最为经常的游戏体验。对于战斗过程的设计,包括和战斗过程相关的数值设计,也常常成为一个网络游戏设计非常重要的地方。《魔兽世界》能够受到广大玩家的喜欢,最大亮点之一就是战斗过程的设计,一个好的战斗过程,能够让玩家的游戏过程中充满乐趣,进而影响到玩家的代入感,在玩家看来,与此相关的装备、技能,包括经济系统都是有意义的,玩家也就愿意更投身到游戏中3去,体验与此相关的各个系统设计。本文所提到的战斗过程,主要指狭义上的战斗,而非广义上的对抗,如泡泡糖的炸弹人、赛车、棋牌等,均不计算入本文所讨论的战斗范围。4第一章标准战斗过程第一节单个单位的战斗过程最简单的战斗示例(出于数学分析方便,我们采用连续的函数,离散过程以后再进行讨论)让我们首先来看一个最基本的战斗过程:事例1:一个100血的战士出城,看到了一只血为90野猪,战士上去砍野猪,野猪同时开始反击。战士每秒的伤害是20,野猪每秒的伤害为10。当战斗进行了4.5秒,野猪被杀死。在此期间野猪一共对战士进行了总量为45的伤害,战士还剩下55点血。(出于数学分析方便,我们采用连续的函数,离散过程以后再进行讨论)整个战斗过程的图如下(不同颜色的线对应野猪的不同伤害值,从右至左分别为10,15,18,20,22.22):从这个图,我们可以看到一些规律:战士和野猪的初始血量是整个曲线的起始点,整个战斗过程就是从起始点回到某个坐标轴的过程。整个战斗过程沿着直线移动,这条直线的斜率,就是战士和野猪的输出速度之比。在这个过程中,我们可以看到,作为互相斗争的双方,都至少存在两个因素,一个是生5命,用以保证自己的生存。这个值在有些战斗情况下是人数/耐久等等,在这里统一定义为承受。另一个是伤害,用以破坏对方的生存,在这里同样定义为输出。双方所比较的,其实是时间,看谁能在最短的时间内破坏对方的生存条件。我们可以得到一个最简单的结论:战斗的结果,取决于一个值:XYYXdpthpdpthp。注:上述公式中,下标X、Y分别指在一场战斗中对立的双方,在这里,X指玩家,Y则指野猪。其中Xhp,Yhp为玩家和怪物的生命,单位为点。Xdpt、Ydpt为玩家和怪物的单位时间输出伤害,单位为点/单位时间。这个单位时间一般是秒,但在很多游戏里,不一定以秒为单位时间,比如《暗黑破坏神II》,常常采用的单位是桢(每秒为24桢)。题外话:《暗黑破坏神II》(1.09版)也因此遇到过Bug,其中德鲁伊可以用一个技能:狂暴(Fury)。这个技能的效果除了伤害加成以外,在20技能等级的情况下会连续攻击5次。有的玩家采用了相对较快的武器以后,平均每不到5桢就可以使用狂暴,这样系统就无法判定每一次伤害发生在哪一桢了,最终结果是这个终极技能无法产生伤害。最后玩家被迫使用相对较慢的装备来发动Fury,这也直接导致了游戏里物理系德鲁伊没有多少人玩。从式子看,前面一个数是玩家能够坚持的时间,后面一个数值则是玩家杀死怪物的时间。就像两个水池,各自插了一个水管放水,比较哪个水池先被放空就可以了。玩家要战胜怪物,只需要这个值大于0即可。也就是XYYXdpthdpth0做一点简单的变换,也就是需要XX*dpthYY*dpth我们可以将玩家的dpth*定义成玩家的战斗力,记为FC(FightingCapacity)那么我们就有了一个标准用以衡量角色的战斗能力。在上述的战斗过程中,双方的战斗力之差是一个恒定的值。战斗过程,其实就是一个FC相减的过程,要预估战斗的结果,只需要用FCX—FCY即可,我们不仅仅可以判定战斗的胜利者,还可以,我们还可以计算双方的战斗力比例和胜者所能保留的战斗力。在事例1中,我们可以计算出,战士的战斗力为2000,而野猪为900。因此如果一只一只的攻击,一个战士可以在无恢复的情况下战胜两只野猪。同样还可以计算出,在战胜第一只后,战士的战斗力还剩下1100,由于每秒输出是20,所以剩下55点血。在战胜了第二只野猪后,战斗力还剩下200,也就是10点血。这个战士就必须进行打坐、吃面包、绷带、喝药、治疗等等补给措施了,因为他的实力已经不足够再战胜下一头野猪。玩家在战斗中常用的判断标6准就是自己的生命是不是过半,这是有道理的,因为伤害输出和生命的多少无关,生命过半就意味着还有一半以上的战斗力。在几乎所有的网络游戏中,玩家都会关注自己的生命值,一般能够加生命上限的装备和道具,总是比较受玩家欢迎的。因为尽管输出方式千差万别,各种参数一时难以评估,但是生命值,总是能够比较直接的影响到一个角色的战斗力。如果以单位的承受作为横坐标,输出作为纵坐标,那么输出与承受所组成的图形面积,就是一个单位的战斗力。如下图:在实际策划中,如果我们要设计多个不同的战斗单位,他们的攻击力和血量都不相同,那么,只要比较他们的战斗力,也就是生命和输出速度的乘积就可以得到他们的战斗力大小。在图形上,我们可以画出多条HP*dpt=C的双曲线,观测其落点在那条双曲线即可,处于同一条双曲线的,即可认为战斗力相等。如下图7战斗能力的等值曲线基于以上推理,我们可以看到在战斗中的基本规则,如果我们定义一个战斗单位的输出与承受的乘积为战斗力,(在以后的分析中,我们会将其推广到战斗力是输出对承受的积分,特别地,在输出与承受无关的情况下,战斗力=输出*承受)那么:在任何一场战斗中,战斗双方的战斗力差值不变。这一规则,贯穿了所有标准战斗类型的过程。在实际的战斗中,伤害总是按照次数和频率来进行的,我们可以用单次伤害值*伤害频率来得到单位时间的伤害,也就是说,我们可以用dmg*f来代替,为简化方便,我们将DMG写成d,那么,在一些情况下,我们可以将玩家的战斗力