|
连日来忙于设计自己的游戏,最近一段日子正在规划游戏中的整个数学模型和游戏公式,虽然本人自诩对数字颇有“觉悟”,但对于一款数据设计量相对庞大的即时策略游戏而言,本人的工作进度也已只能放得相当慢了。
但是最近一段日子的琢磨使在下收获颇丰,逐渐开始对公式的设计有所感悟,遂整理一些头绪,写下这篇随笔,也为自己理清思路。
在进行说明之前,先做几个简单的定义,为了方便解释。
需求数据:通过一些已知数据和一定的运算所要得到的数据。
游戏公式:为了得到需求数据所设计的运算过程。
相关数据:为得到需求数据所需要的已知的游戏数据。
比例型曲线:正反比例曲线。
数据曲线类型:需求数据对于某个相关数据作为自变量所获得的函数曲线的类型。
首先,作为游戏的策划,要对游戏拥有全局的把握,这对设计公式尤为重要。在设计某个方面的公式之前,必须了解所需通过公式获知的数据既需求数据会受那些其他数据的影响,将这些相关数据逐一记录。了解这些相关数据和需求数据的大致取值范围,这点尤为重要,因为只有当对整个游戏有一个全局的把握时,才可以基本确定所有数据的大致取值范围。当了解所有相关数据和需求数据的取值范围后,就需要根据游戏需要判断需求数据的大致数据曲线类型。
判断数据曲线类型有很多种方法,最常见最简单的属于比例型曲线。也就是需求数据和相关数 据的对应关系呈正比例或反比例。这种曲线比较直观,可以很容易地推算出来,大多数游戏中的体力与生命值的关系就用了正比例关系,再有诸如魔法和能量、基础伤害的上下限和力量、防御和敏捷、部队数量和粮草消耗等等,游戏中有很大一部分的公式采用这些形式。这类公式直观简单,便于计算,但是却不能很好地模拟较为复杂的数学模型。
而对于多个相关数据作用的情况,可能会导致公式变得相当复杂。举例来说,星际争霸中的伤害属于算术计算,也就是一方的攻击减去另一方的防御得到具体的伤害值(对于伤害类型这里不讨论)。而在魔兽争霸中,则将防御力设计为伤害的抵消率,当然防御力和抵消伤害的比率用了一个相对复杂的公式。而对于英雄无敌中,攻击、防御与伤害采用的是设定基础伤害,将攻击防御作为加权值对基础伤害进行计算后获得实际伤害。以上公式都满足了一定的游戏需求,都各有利处。但是在一个较为庞大的游戏中,如果数据的关联性都普遍较大时,每个数据所需求的公式就会相对复杂,以暗黑2作为例子,敏捷可以影响防御率、格挡率、攻击率、部分职业的攻击力,象这样一个数据作用于多个数据的情况使得暗黑2中的公式显得要比其他游戏复杂许多,线性、算术型、比例型的公式不再适用。那么对于比较复杂的情况,有没有较为系统的方式来设计公式呢?根据在下这几日的研究总结出了以下的方法,可以通过一定的程序进行推算得到符合游戏需求的公式。
对于复杂公式,最重要的是需要确定函数曲线,对于较为直观的曲线,可以直接确定曲线类型,通过调整系数写出公式。而如果遇到不能直接给出曲线类型的情况,可以设计一系列的需求数据与相关数据的对应值,来获取函数的一些具体点的坐标,通过这样的方式来构架一个函数,从而获得游戏公式。如果遇到情况相对复杂的时候,可能需要设计较多的对应值,然后可以通过比对一些现有函数的曲线,大致确定函数的类型,再通过待定系数法获得系数来得到整个公式。
对于待定系数法,当模拟的曲线在有限的系数情况下可能得到的最终公式与需求曲线有较大偏差,这种情况下可以通过增加系数来逼近需求的曲线。多数情况下,我们可以设定自变量为一个一次函数(根据情况需要),将这个一次函数中的自变量和已知属性对应,这样,便可以多获得两个系数,但是方程的求解会复杂很多。举例来说,本来设定的公式是:y=ax2+bx+c,这时只有3个系数,可能我们从要模拟的曲线上找了5个点,那么显然系数不够。现在使x=f(m),这里我们使x=dm+e,这样得到:y=ad2m2+(2ade+bd)m+ae2+be+c,再将点代入,求解一个五元三次方程组,可以得到系数。
对于很多公式,方程系数可能较难求,那么我们可以利用估算法,求出一个近似值逼近实际系数。在实际情况中,我们要巧妙合理地安排自变量设定出的函数,以求得到尽量简单的方程。
但是通过上述方式得到的公式只能是游戏的一个原始公式,因为在多数情况下,得到的这类公式都相对复杂,对应于程序会有相对大的运算量,所以,我们必须对公式做一定的简化,简化公式有很多途径,可以设计近似曲线,再利用待定系数法获取新的近似公式。也可以利用一些现成的数学公式,比如一些概率的计算如果个体数据较大的话会有比较大的数据运算,在这样的情况下,我们可以利用大数定律进行模拟计算。通过对公式的相关数据在一些值比较大的范围或比较小的范围内取极限,也可以获得近似的公式。最后一些公式可以通过泰勒展开式求取部分范围近似值的方式获得简化公式,这些都要依靠平时对于数学公式的积累,本人不再累述。但是要注意的一点是,所有的游戏公式的简化都要服从游戏模型的需要,不能一味为了简化公式脱离游戏模型的要求太远,那样会严重伤害游戏平衡,就显得得不偿失了。
小结:对于复杂游戏公式的获取一般都需要以下几个步骤:
1、 确定函数曲线
2、 待定系数法求得函数系数
3、 通过一定的方式简化数学公式,达到运算量与模型效果的模拟都较好的平衡点。
以上只能算是小弟的一些拙见,虽然对于大多数游戏,可能公式比较简单,不足以使用较复杂的函数,但是也会有属性较多的游戏可能会需要新的公式类型以获得游戏平衡,那么在下提出的公式设定方法,或许可以一试。
恳请各位大虾不啬赐教。 |
|