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

移动开发
兰切斯特方程一直是大型沙盘战场推演所用,能较为准确的推算出战争伤亡,损失。可以想象一下,将这个用在战略游戏,让战略游戏不再是简单的属性冲撞,会不会带来更加真实直观的感受~

[[147326]]

兰切斯特方程一直是大型沙盘战场推演所用,能较为准确的推算出战争伤亡,损失。可以想象一下,将这个用在战略游戏,让战略游戏不再是简单的属性冲撞,会不会带来更加真实直观的感受~

一、介绍兰切斯特方程(摘自维基百科,百度百科)

1914年英国工程师兰切斯特(F.W.Lanchester)在研究空战单位最佳编制的“战斗中的飞机”一文中率先提出了其著名的兰切斯特方程。

开始是用于分析交战过程中的双方伤亡比率,后用途逐渐推广。

兰切斯特把战斗简化为两种基本情况:远距离交火和近距离集中火力杀伤。远距离交火时,一方损失率既和对方兵力成正比,也和己方兵力成正比,以微分方程表示即为:

dy/dt=-a*x*y

dx/dt=-b*x*y

其中x和y分别为红军和蓝军的战斗单位数量,a和b分别为红军和蓝军的平均单位战斗力,因此双方实力相等的条件为:

a*x=b*y

二、简单总结

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

(对于古代战争,拿长矛的重步兵方阵,其中一个士兵只能同时攻击到另一个士兵。每个士兵只能要么干掉对面的,要么被对面的干掉,那么战后损失将是两支部队之间的数量差,在武器(战斗力)无差异的情况下。)

[[147327]]

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

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

[[147328]]

在双方战斗力可以量化的情况下,强大的一方每增长一点,优势是以几何递增。

简单举个例题说明吧:

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

144640p72po41jz3rkcprp.jpg

此系数直接用来量化方程的其他不稳定因素,例如,射程,移动速度,士兵气血差距,攻击速度等,兵力消耗或者补给消耗都默认为自然损耗状态。(克制系数可等价抵消:1步兵=0.8弓兵=1.2骑兵)

结合以上条件,可以确定一个思路,将模型尽量统一化,用克制系数来然后用方程去计算战斗结果,由于是游戏并非实战,我们可以很主观的定义,游戏中每个单位,在每场战斗中,至始至终都能发挥出本身能发挥的作用,所以此处用平方率,不涉及线性定律。

首先最简单的:

步兵 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

接着,可以看看复杂一点的部队战斗。

混战如果严谨的使用兰切斯特方程,式子大概是这样:

14464149uxnd1l0ru04lt0.png

但是游戏归游戏,公式再复杂,带来的体验不一定会很好。这里面Xi(t)为X方i类的作战兵力,Aij为y方第j类武器对x方第i类目标的损伤系数,下面可以类推,接着就是分配矩阵系数(不写了,免得有人喷我,有兴趣的可以接着推算下去~)

单纯用模型转换可以更加简单的推算出结果:

首先,定义为双方兵力占比最大的兵种为初始模型;

损失兵种按照损失兵力与原有兵力最大比例分配。

(此处可以再复杂一些,例如,步兵伤亡小于百分之30,弓兵不损失,或者有骑兵情况下,步兵伤亡百分之20,则会开始损失弓兵等设定,以带来更加真实的体验为目的)

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

144641xcfnk2xird12idxj.jpg

函数=sqrt(a*X^2-b*Y^2)=1732

B弓兵剩余1237

B步兵剩余495

到了这里,大概计算应该都没有什么问题了,现在,我们可以加入游戏通用的养成元素,SLG常用的,例如,士气,主角属性带入,天气影响,地势系数等等,可见基于此计算方式上面的游戏,扩展性不比数值碰撞,公式加减乘除来的少。

题外话~

做这个之前,网上看到有人测试,魔兽争霸里面,在不干涉情况下,10个步兵打10个人族步兵,11个打10个,12个打十个~结果与兰切斯特方程计算出来的结果几乎一样。虽然魔兽争霸注重操作,一个老手能很轻松的将消耗降到最低,但是在大型战役中,双方如果势均力敌,结果最后毫无疑问将会与参战人数,质量等数据挂钩,此时方程将会发挥出巨大的作用,可以推演出战损以及耗费资源等,以此来布局排布,在slg游戏中,如果忽略其战斗表现,最终结果将给玩家更加真实的感受。

责任编辑:倪明 来源: 腾讯游戏
相关推荐

2015-09-17 09:50:43

2020-09-11 10:55:10

useState组件前端

2021-02-28 09:47:54

软件架构软件开发软件设计

2021-02-19 23:08:27

软件测试软件开发

2018-11-23 11:17:24

负载均衡分布式系统架构

2018-01-16 20:20:04

思科物联网

2021-05-28 07:12:59

Python闭包函数

2020-10-14 08:04:28

JavaScrip

2011-08-15 10:20:24

ZeptoLab切绳子

2023-05-31 15:42:06

游戏开发关系型数据库

2021-12-27 15:10:55

鸿蒙HarmonyOS应用

2022-08-21 17:35:31

原子多线程

2023-04-20 10:15:57

React组件Render

2021-01-18 05:35:09

模拟数字信号

2018-01-17 09:15:52

负载均衡算法

2023-04-12 14:04:48

光纤网络

2022-08-17 06:25:19

伪共享多线程

2018-01-05 14:23:36

计算机负载均衡存储

2023-02-10 08:44:05

KafkaLinkedIn模式
点赞
收藏

51CTO技术栈公众号