计算两军交战的输出


20

我正在使用Flash编写战略游戏。该游戏的工作原理与著名的游戏“ Travian”非常相似。

我的问题如下:我试图计算由于两支军队之间的战斗而损失的部队。两国军队的单位类型不同。他们中的一些对其他某些单位更强,而对其他类型则较弱。

如何将这种差异的影响体现在战斗方程式中?

如果它们仅具有at和def点,这似乎很容易,但是当涉及到单元类型依赖项时,我会迷路。


6
您的战斗结果应该纯粹是确定性的,还是要使用某种随机性?
sum1stolemyname 2010年

4
我不认为它应该被标记为多人游戏,因为这不是OP给出的-它可能是人类还是AI。通过“类型依赖”,我们在说经典的摇滚->剪刀->纸->摇滚类型的事情吗?
共产党鸭子2010年

Answers:


10

除了支持阿米特(Amit)关于查看Lanchester方程的建议外,我只想补充一点,这是游戏设计的决定,而不是我们可以提供给您的经验性事实。如果要考虑单位类型,则必须确定其含义。这意味着选择一个方程式,其中包括您希望游戏包含的所有因素。如果您希望步兵比骑兵更好,那么您必须决定这意味着什么-例如。您需要多少个骑兵才能相当于100个步兵?谁攻击谁有关系吗?您似乎暗示仅给步兵和骑兵提供不同的攻击和防御值是不够的-为什么呢?您还想代表什么,这些价值观不能仅仅捕捉到这些?

您必须决定要在游戏中建模的因素,因为它们会影响玩家的处理方式。这些可能包括单位大小/数量,单位类型,单位经验(例如退伍军人身份),地形和环境影响,进攻与防守之间的差异(如果有),是否为破坏和损耗建模,是否为时间推移建模战斗,撤退或逃跑的能力(可能包括士气建模),等式中需要多少随机性,等等。

一旦了解了所有这些,就可以采用几种基本的数学方法。您可以像许多RPG一样,一轮又一轮地“碰运气”系统。d20战斗系统。您可以像原始《文明》游戏一样进行一轮“攻击与防御”加权抛硬币系统。您可以通过将属性添加到随机数来让每一方生成一个得分,而获得最高价值的人将获胜。而且,您可以对这些系统进行置换,以使其能够全面运行,或者扣除生命值或士气值,或者进行其他操作。任何系统都可以使用,但是您必须按照其播放方式进行平衡。最终,如何对战斗进行建模是游戏设计的关键部分,而不是其他人能给您的。


您是完全正确的Kylotan。在开始游戏设计之前,我对战斗有一些想法。但是,我发布了这个问题,询问是否有更好的方法来设计它,并找出实现它的最佳方法。我猜这两个目的都是我赢了:)我的朋友,能否请您告诉我在哪里可以找到有关这些数学方法的更多信息?另外,如果我回答了您有关选择系统的所有问题,您能否建议我哪种方法最适合我的情况?非常感谢您的时间:)
Ali Albahrani 2010年

我无法告诉您哪种方法最好,但是您可能应该从简单开始,并在需要时对此进行改进。Travian似乎拥有一个简单的进攻与防御系统,拥有2种单位类型(步兵和骑兵),因此每单位2个防御得分。如《文明1》中所述,解决战斗的一种简单方法是将攻击者的攻击得分除以该得分再加上防御者的防御得分。这给了你一个百分比。现在选择一个介于0和100%之间的随机数。如果它低于攻击者的攻击得分,则攻击者获胜。否则,后卫将获胜。
Kylotan 2010

15

对于Solar Realms Elite,我受到了Lanchester的战争建模方程式的启发。在每一轮战斗中,我同时进行了几次打架。

在第一次战斗中,每个人都袭击了士兵。在SRE中,士兵最好对抗士兵(不是剪刀石头布,而是步兵,空袭和深空)。我建立了一支进攻和防御力量,其中士兵的进攻最为出色:

attack_strength = 3*soldiers + 1*fighters + 2*cruisers
defense_strength = 10*soldiers

在第二场战斗中,每个人都袭击了防御站。在SRE中,战斗机(空中)最适合防御站(例如防空):

attack_strength = 1*soldiers + 4*fighters + 2*cruisers
defense_strength = 25*defense_stations

在第三次战斗中,所有人攻击了重型巡洋舰。在SRE中,重型巡洋舰在太空中,最好与其他重型巡洋舰相对:

attack_strength = 1*soldiers + 1*fighters + 10*cruisers
defense_strength = 15*cruisers

(我不记得我使用了什么常量;这些只是示例。)在每一轮战斗中,攻击者将失去部分防御力量,而防御者将失去部分攻击力量。我相信这符合兰切斯特平方律(此处的等式)。我增加了随机性,但我不记得确切在哪里。在每轮战斗之后,军队将变小。我对回合数设置了最大限制。之后,失败者将撤退。

将步兵从地面发射到深空是不现实的,但是出于游戏玩法的考虑,让所有单位能够与其他单位战斗(效果降低)效果更好。


12

我倾向于说“如果找不到明确的解决方案,请寻求隐性的解决方案”。您可以在内部模拟战斗,直到一支部队被歼灭或撤退为止(取决于游戏的可能结果)。

我会用这样的东西:

对于战斗的每一次迭代,所有部队都是投机取巧的,因此他们会尽力造成最大的伤害。每个单位根据已知的优缺点选择要在本轮攻击的敌方单位。

然后,执行所有子战斗。一个例子:

让矛兵对骑兵有效,而卡瓦拉雷对弓箭手有效,而弓箭手对矛兵有效。

在由这两种基本单位组成的两支军队之间的战斗中,所有长矛手将攻击骑兵,所有长矛手部队将攻击弓箭手,所有弓箭手将攻击矛兵。例如,如果一侧没有弓箭手,则另一侧骑兵会选择次要的最佳目标类型(即敌方骑兵部队)

每个单元攻击单元事件都是单独解决的,丢失的单元被损坏或标记为已破坏。

在解决所有个人争斗之后,移走所有被严重损坏或破坏的单位。

下一次迭代开始使用现在减少的军队。


真的同意这个帖子。最好在战斗中进行迭代,而不是将其简化为一个方程式。而且我肯定会添加一些随机性。应该有这样微小的机会,使弱小的防守者高高举起并得分为关键。迭代的另一个优点是您可以创建事件的旁白以向播放器显示。“剑士袭击并很快使步兵丧生,但随后the夫来到了……”
Tim Holt 2010年

我非常喜欢您的回答,我想我会随机执行:)
Ali Albahrani 2010年

3

我正在对游戏进行Beta测试,该游戏当前是Solar Realms的简单版本(《星际帝国》),并且我首先使用了与Amit方程式相似的方法(如上所述)。特别是,我喜欢将战斗分为三个阶段的想法,您必须在三个阶段中赢得两个。但是我也想在战斗中引入随机性,因此我受到了一些桌面游戏的影响。

如果要缩放游戏,处理是一个问题,所以我不想遵循上述sum1stolemyname建议的方法,尽管如果您的游戏使用客户端而不是服务器来处理结果,那么这似乎是一个问题。好方法。

我决定将战斗分为两个阶段(类似于阿米特模型中的三个阶段):空中和地面。我计算进攻和防守强度,并将进攻强度降低一小部分(以使防守者有优势)。届时,如果攻击力和防御力相等,则攻击者有50%的获胜机会。从那里,我根据攻击者与防御者相比有多少(或更少)力量来调整上下获胜的百分比。以下是一些简化的空气方程式:

air_attack_strength = 1 * soldiers + 10 * fighters
air_defence_strength = 2 * soldiers + 25 * stations

differential = (air_attack_strength - air_defence_strength) * constant

chance_of_victory = 50 - differential

我指定“ victor_of_victory”的值永远不能大于80或小于5。从那里开始,我只生成100中的一个随机数,然后将其结果用于陆战。

我尚未解决的一件事就是伤亡率。但是我认为解决这个问题的一个好方法是将“ victor_of_victory”与生成的随机数进行比较,并使用它来将一小部分进攻防御力量当作伤亡。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.