我正在使用Flash编写战略游戏。该游戏的工作原理与著名的游戏“ Travian”非常相似。
我的问题如下:我试图计算由于两支军队之间的战斗而损失的部队。两国军队的单位类型不同。他们中的一些对其他某些单位更强,而对其他类型则较弱。
如何将这种差异的影响体现在战斗方程式中?
如果它们仅具有at和def点,这似乎很容易,但是当涉及到单元类型依赖项时,我会迷路。
我正在使用Flash编写战略游戏。该游戏的工作原理与著名的游戏“ Travian”非常相似。
我的问题如下:我试图计算由于两支军队之间的战斗而损失的部队。两国军队的单位类型不同。他们中的一些对其他某些单位更强,而对其他类型则较弱。
如何将这种差异的影响体现在战斗方程式中?
如果它们仅具有at和def点,这似乎很容易,但是当涉及到单元类型依赖项时,我会迷路。
Answers:
除了支持阿米特(Amit)关于查看Lanchester方程的建议外,我只想补充一点,这是游戏设计的决定,而不是我们可以提供给您的经验性事实。如果要考虑单位类型,则必须确定其含义。这意味着选择一个方程式,其中包括您希望游戏包含的所有因素。如果您希望步兵比骑兵更好,那么您必须决定这意味着什么-例如。您需要多少个骑兵才能相当于100个步兵?谁攻击谁有关系吗?您似乎暗示仅给步兵和骑兵提供不同的攻击和防御值是不够的-为什么呢?您还想代表什么,这些价值观不能仅仅捕捉到这些?
您必须决定要在游戏中建模的因素,因为它们会影响玩家的处理方式。这些可能包括单位大小/数量,单位类型,单位经验(例如退伍军人身份),地形和环境影响,进攻与防守之间的差异(如果有),是否为破坏和损耗建模,是否为时间推移建模战斗,撤退或逃跑的能力(可能包括士气建模),等式中需要多少随机性,等等。
一旦了解了所有这些,就可以采用几种基本的数学方法。您可以像许多RPG一样,一轮又一轮地“碰运气”系统。d20战斗系统。您可以像原始《文明》游戏一样进行一轮“攻击与防御”加权抛硬币系统。您可以通过将属性添加到随机数来让每一方生成一个得分,而获得最高价值的人将获胜。而且,您可以对这些系统进行置换,以使其能够全面运行,或者扣除生命值或士气值,或者进行其他操作。任何系统都可以使用,但是您必须按照其播放方式进行平衡。最终,如何对战斗进行建模是游戏设计的关键部分,而不是其他人能给您的。
对于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
(我不记得我使用了什么常量;这些只是示例。)在每一轮战斗中,攻击者将失去部分防御力量,而防御者将失去部分攻击力量。我相信这符合兰切斯特平方律(此处的等式)。我增加了随机性,但我不记得确切在哪里。在每轮战斗之后,军队将变小。我对回合数设置了最大限制。之后,失败者将撤退。
将步兵从地面发射到深空是不现实的,但是出于游戏玩法的考虑,让所有单位能够与其他单位战斗(效果降低)效果更好。
我倾向于说“如果找不到明确的解决方案,请寻求隐性的解决方案”。您可以在内部模拟战斗,直到一支部队被歼灭或撤退为止(取决于游戏的可能结果)。
我会用这样的东西:
对于战斗的每一次迭代,所有部队都是投机取巧的,因此他们会尽力造成最大的伤害。每个单位根据已知的优缺点选择要在本轮攻击的敌方单位。
然后,执行所有子战斗。一个例子:
让矛兵对骑兵有效,而卡瓦拉雷对弓箭手有效,而弓箭手对矛兵有效。
在由这两种基本单位组成的两支军队之间的战斗中,所有长矛手将攻击骑兵,所有长矛手部队将攻击弓箭手,所有弓箭手将攻击矛兵。例如,如果一侧没有弓箭手,则另一侧骑兵会选择次要的最佳目标类型(即敌方骑兵部队)
每个单元攻击单元事件都是单独解决的,丢失的单元被损坏或标记为已破坏。
在解决所有个人争斗之后,移走所有被严重损坏或破坏的单位。
下一次迭代开始使用现在减少的军队。
我正在对游戏进行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”与生成的随机数进行比较,并使用它来将一小部分进攻防御力量当作伤亡。