SLG游戏引入兰切斯特方程的设想

发表于2015-08-26
评论13 2.3k浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏策划行业精英群

361498939
前言:兰切斯特方程一直是大型沙盘战场推演所用,能较为准确的推算出战争伤亡,损失。可以想象一下,将这个用在无战斗表现的战略游戏,让战略游戏不再是简单的属性冲撞,会不会带来更加真实直观的感受~
PS:请不要吐槽我不专业的贴图,我知道光有字没有图,你们不会看的。。。就引了几张全面战争的图进来,希望大家能拍点砖,点几个赞!

一、介绍兰切斯特方程(摘自维基百科,百度百科)
1914年英国工程师兰切斯特(F.W.Lanchester)在研究空战单位最佳编制的“战斗中的飞机”一文中率先提出了其著名的兰切斯特方程
开始是用于分析交战过程中的双方伤亡比率,后用途逐渐推广。
兰切斯特把战斗简化为两种基本情况:远距离交火和近距离集中火力杀伤。远距离交火时,一方损失率既和对方兵力成正比,也和己方兵力成正比,以微分方程表示即为
dy/dt=-a*x*y
dx/dt=-b*x*y
其中x和y分别为红军和蓝军的战斗单位数量,a和b分别为红军和蓝军的平均单位战斗力,因此双方实力相等的条件为
a*x=b*y
即任一方的实力和本身战斗单位的数量成线性关系,也称兰切斯特线性律。这就是说,如果蓝军平均单位战斗力(包括武器、训练等因素)是红军四倍的话, 100 名蓝军和400名红军的战斗力相同,100名蓝军和400名红军交战的结果是同归于尽。集中优势兵力只是拼消耗,并不占便宜。但近距离集中火力杀伤时,一方损失率仅和对方战斗单位数量成正比,而和己方战斗单位数量无关,即
dy/dt=-a*x
dx/dt=-b*y
双方实力相等的条件变为
a*x^2=b*y^2
二、简单总结此处没用百度百科,因为个人感觉有问题
近距离交战时,任何一方参战单位数量与参战单位战斗效率成正比,概称之为兰切斯特线性定律;
(对于古代战争,拿长矛的重步兵方阵,其中一个士兵只能同时攻击到另一个士兵。每个士兵只能要么干掉对面的,要么被对面的干掉,那么战后损失将是两支部队之间的数量差,在武器(战斗力)无差异的情况下。)

远距离交战时,任何一方参战单位数量与参战单位战斗效率的平方成正比,概称之为兰切斯特平方定律。

(对于射击性武器在远距离瞄准射击的情况下,他们可以射击敌方阵线中的任何敌人,也会被地方阵线中的任何敌人攻击到。这时军队消耗得比率将之于双方的火力数量有关(假设无战斗力差异)。兰切斯特认为这样的军队的实力不只与军队的数量,而是与数量的平方有关。)

在双方战斗力可以量化的情况下,强大的一方每增长一点,优势是以几何递增。
简单举个例题说明吧

2000辆德军坦克围攻1000辆苏军坦克,假设双方坦克的性能一模一样,双方都没有指挥官,问:德军将损失多少辆坦克才能全歼苏军坦克?

答案是损失268。
计算方式如下:
sqrt(a*X^2-b*Y^2)=sqrt(2000^2-1000^2)=1732
2000-1732=267.9=268
三、关于带入SLG游戏的应用设想
     跟朋友讨论某当红slg手游(此处不说名字了,免得说我打广告,只是谈谈如果由我来实现使用的方法,写的不全请轻拍)由于没有战斗表现,依旧玩的乐此不疲,所以数值尤为重要,觉得有些东西可以拉出来谈谈,关于此方程与游戏的关系,并且能给游戏带来什么样不同的感受,还有就是方程的扩展性。
首先建立一个简单的模型吧。
规则
克制系数关系
弓克骑
骑克步
步克弓
随手拍的,克制系数为1.2

10.81.2
1.210.8
0.81.21
此系数直接用来量化方程的其他不稳定因素,例如,射程,移动速度,士兵气血差距,攻击速度等,兵力消耗或者补给消耗都默认为自然损耗状态。(克制系数可等价抵消:1步兵=0.8弓兵=1.2骑兵)
首先,战斗前判断双方兵力占比最大的兵种为初始模型(求别忽视这句话就开始拍)
使用数量多的一方模型为准,方便带入计算。
战后,损失兵种按照损失兵力与原有兵力最大比例分配。
(此处可以再复杂一些,例如,步兵伤亡小于百分之30,弓兵不损失,或者有骑兵情况下,步兵伤亡百分之20,则会开始损失弓兵等设定,以带来更加真实的体验为目的)
结合以上条件,可以确定一个思路,将模型尽量统一化,用克制系数来然后用方程去计算战斗结果,由于是游戏并非实战,我们可以很主观的定义,游戏中每个单位,在每场战斗中,至始至终都能发挥出本身能发挥的作用,所以此处用平方率,不涉及线性定律。
步兵   10   VS    步兵  10
在统一前提条件下,毫无疑问会是势均力敌。
下面来为一方增加一点优势
步兵   10   VS   步兵   11
sqrt(11^2-10^2)=4
增加1个的兵力,就能多保住三个步兵。
弓兵    3000   VS    步兵   1500
sqrt(a*X^2-b*Y^2)=sqrt(3000^2-0.8*1500^2)=2683
为了更加易懂,a代表弓兵质量,x代表弓兵数量,b代表步兵质量,y代表步兵数量
3000-2683=317
接着,可以看看复杂一点的部队战斗

混战如果严谨的使用兰切斯特方程,式子大概是这样
但是游戏归游戏,公式再复杂,带来的体验不一定会很好。这里面Xi(t)为X方i类的作战兵力,Aij为y方第j类武器对x方第i类目标的损伤系数,下面可以类推,接着就是分配矩阵系数(不写了,免得有人喷我,有兴趣的可以接着推算下去~)
单纯用模型转换可以更加简单的推算出结果

A方    弓兵 1000   步兵  1500  VS   B方   弓兵  2000  步兵  1000

AB
数量28002200
剩余数1732

函数=sqrt(a*X^2-b*Y^2)=1732
B弓兵剩余1237
B步兵剩余495
到了这里,大概计算应该都没有什么问题了,现在,我们可以加入游戏通用的养成元素,SLG常用的,例如,士气,主角属性带入,天气影响,地势系数等等,可见基于此计算方式上面的游戏,扩展性不比数值碰撞,公式加减乘除来的少。
写这个只是为了验证上面思路的可行性,那些吐槽方程本身的可以退散了,吐槽slg不能用这个方程,纸上谈兵的也请闭嘴。

首先确定下属性吧
攻击,防御,生命,攻击距离,
速度,负重,粮食消耗,战斗力。
一般来说,可以先默认参加战斗的属性有:攻击,防御,生命,攻击距离。速度此处暂时不加,因为玩过的大概都知道,速度极大的影响地图中的行军速度,此外战斗是否影响就不得而知了,所以为了简化属性,暂时将他剔除出去。
用上面属性确立计算应该是这样的,伤害公式暂定为使用乘除法,因为不破防情况下,少量数据并不能推算出他的加减法保底公式(加减法我现在游戏就在用,一般来说是两套公式,或者做保底伤害处理,反推起来很头疼)
现在,我先用10个民兵与11个民兵对决,为了将干涉因素降到最小,选择野外遭遇战,双方均无人物属性加成。
先不看结果,如果通过上一篇文章设想,使用模型计算,结果应该是
多的一方能剩下四个左右。少的一方全灭。
伤害*生命=单位战斗力
(同样部队可以忽视防御等一切参数)
SQRT(A部队战斗力^2-B部队战斗力^2)=sqrt(11^2-10^2)=4.5≈5
游戏中向上取整比较合适,因为兵残血不算死
这是同部队情况,下面看看游戏里面的结果如何(条件有限,没办法将参数完全去掉,将就着看看吧,自己可以尝试着换算一下参数
参数可以自己试着算下,如果是乘法公式,用模型转换,大约能增强2倍实力,也就是模型数量乘以2
下面,来一个30VS10的

变成属性平等的30-20
结果将会约等于22.3
ok,后续的多种部队战斗现在条件不足,没法带来结果,以后有机会补上——其实我是懒




如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

游戏学院公众号二维码
腾讯游戏学院
微信公众号

提供更专业的游戏知识学习平台