游戏开发论坛

 找回密码
 立即注册
搜索
查看: 25122|回复: 33

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

  [复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2015-8-27 14:48:38 | 显示全部楼层 |阅读模式
本帖最后由 小篱 于 2015-8-28 15:41 编辑

32b1OOOPICa7.jpg

  GameRes游资网授权发布 文 / 幕落流年ミ

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

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

  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

  二、简单总结

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

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

1.png

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

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

2.jpg

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

  简单举个例题说明吧:

  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

3.jpg

  此系数直接用来量化方程的其他不稳定因素,例如,射程,移动速度,士兵气血差距,攻击速度等,兵力消耗或者补给消耗都默认为自然损耗状态。(克制系数可等价抵消: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

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

4.jpg

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

5.png

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

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

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

6.jpg

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

  B弓兵剩余1237

  B步兵剩余495

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

  写这个只是为了验证上面思路的可行性,那些吐槽方程本身的可以退散了,吐槽slg不能用这个方程,纸上谈兵的也请闭嘴。

phpk5ilf2.1440744049.png

  首先确定下属性吧:

  攻击,防御,生命,攻击距离,

  速度,负重,粮食消耗,战斗力。

  一般来说,可以先默认参加战斗的属性有:攻击,防御,生命,攻击距离。速度此处暂时不加,因为玩过的大概都知道,速度极大的影响地图中的行军速度,此外战斗是否影响就不得而知了,所以为了简化属性,暂时将他剔除出去。

  用上面属性确立计算应该是这样的,伤害公式暂定为使用乘除法,因为不破防情况下,少量数据并不能推算出他的加减法保底公式(加减法我现在游戏就在用,一般来说是两套公式,或者做保底伤害处理,反推起来很头疼)

  现在,我先用10个民兵与11个民兵对决,为了将干涉因素降到最小,选择野外遭遇战,双方均无人物属性加成。

  先不看结果,如果通过上一篇文章设想,使用模型计算,结果应该是:

  多的一方能剩下四个左右。少的一方全灭。

  伤害*生命=单位战斗力

  (同样部队可以忽视防御等一切参数)

  SQRT(A部队战斗力^2-B部队战斗力^2)=sqrt(11^2-10^2)=4.5≈5

  游戏中向上取整比较合适,因为兵残血不算死。

  这是同部队情况,下面看看游戏里面的结果如何(条件有限,没办法将参数完全去掉,将就着看看吧,自己可以尝试着换算一下参数)

phphayOwU.1440744068.jpg

  参数可以自己试着算下,如果是乘法公式,用模型转换,大约能增强2倍实力,也就是模型数量乘以2
下面,来一个30VS10的。

phpEjCm3i.1440744080.png

  变成属性平等的30-20,

  结果将会约等于22.3。

  ok,后续的多种部队战斗现在条件不足,没法带来结果,以后有机会补上——其实我是懒。

via:GAD

36

主题

1378

帖子

4955

积分

论坛元老

Rank: 8Rank: 8

积分
4955
发表于 2015-8-27 15:20:08 | 显示全部楼层
才发现 兰彻斯特方程?
顺便再去百科看看 《纳什均衡》 以及《非合作动态博弈》
你要补的知识还挺多

点评

新人写的东西就别强求了。  发表于 2015-8-27 15:25

0

主题

60

帖子

263

积分

中级会员

Rank: 3Rank: 3

积分
263
发表于 2015-8-27 15:42:12 | 显示全部楼层
里面错误点很多 都不忍吐槽了

0

主题

77

帖子

429

积分

中级会员

Rank: 3Rank: 3

积分
429
发表于 2015-8-27 15:44:52 | 显示全部楼层
1.新人可看的游戏设计类:《游戏设计100个原理》《游戏设计快乐之道》。
2.进阶书,适合有一定游戏设计经验的策划:《全景探秘游戏设计艺术》,有两个译本,推荐出版社的那个。这本书几乎涵盖了所有类型游戏设计的原理和方法。
3.要了解国内游戏设计的一些思路,可以去找各大公司的策划培训文档,当然多是偏向于网游的设计,比如成长、目标、社区交互等等。

点评

黑的好  发表于 2015-8-27 16:13

0

主题

17

帖子

131

积分

注册会员

Rank: 2

积分
131
发表于 2015-8-27 15:45:32 | 显示全部楼层
看了这篇,我已经很惭愧了,再看3位的评论,我觉得我还是改行不做游戏了。
做什么好呢?!

点评

做运营  发表于 2015-8-27 16:12

8

主题

34

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2015-8-27 17:26:59 | 显示全部楼层
哈哈,然而并没有什么软用!

0

主题

26

帖子

364

积分

中级会员

Rank: 3Rank: 3

积分
364
发表于 2015-8-27 17:48:39 | 显示全部楼层
弓兵 3000 VS 步兵 1500
sqrt(a*X^2-b*Y^2)=sqrt(3000^2-0.8*1500^2)=2683
弱弱的问一下 这里的0.8是不是应该是1.2啊

0

主题

26

帖子

364

积分

中级会员

Rank: 3Rank: 3

积分
364
发表于 2015-8-27 17:51:48 | 显示全部楼层
雨夜飘零 发表于 2015-8-27 17:48
弓兵 3000 VS 步兵 1500
sqrt(a*X^2-b*Y^2)=sqrt(3000^2-0.8*1500^2)=2683
弱弱的问一下 这里的0.8是不是 ...

(克制系数可等价抵消:1步兵=0.8弓兵=1.2骑兵)  问题好像出在这里...

0

主题

60

帖子

263

积分

中级会员

Rank: 3Rank: 3

积分
263
发表于 2015-8-27 18:16:44 | 显示全部楼层
雨夜飘零 发表于 2015-8-27 17:51
(克制系数可等价抵消:1步兵=0.8弓兵=1.2骑兵)  问题好像出在这里...

他没有对克制系数做规则,怎么实现。正确定义应该是3个兵种单位基础战斗力都为1,与其他单位战斗时,战斗力变为0.8,1,1.2。然后才能根据具体情况将单体带入公式,而不是一刀切。

2

主题

38

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
发表于 2015-8-28 10:07:36 | 显示全部楼层
luyushun 发表于 2015-8-27 15:20
才发现 兰彻斯特方程?
顺便再去百科看看 《纳什均衡》 以及《非合作动态博弈》
你要补的知识还挺多 ...

这位兄台知识渊博,敢问仁兄用以上知识做出什么知名作品领吾辈瞻仰一番?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-4-29 14:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表