2017-05-24 64 views
4

我正在写一个相当基本的(现在)数字捣战模拟器在JavaScript中。其目的是测试即将到来的比赛的公式,所以我们可以平衡球员的统计数据。双玩家号码作战模拟器青睐第二玩家

目前,SIM降低基于以下公式

player1.hp -= (Math.floor(Math.random() * 5) + 1) * player2[Math.floor(Math.random() * player2.length)].str; 

HP上100开始选手的健康,和STR为2

player2[Math.floor(Math.random() * player2.length)].str 

上面的代码挑选的3“份1- “的球员(头部,身体,腿),因为每一块都有自己的统计数据。

因此,对于任何特定的回合,从玩家1开始,他们头部的HP会根据第一个公式减少一定数量(玩家2挑选的随机部分,这是str stat乘以1和5之间的随机数)

然后玩家2的部分受到攻击,玩家1的随机部分被挑选出来用于str状态。

(是的,玩家2次的攻击总是首先目前,然后播放器1 - 这可能是问题?)

当我运行一个单一的“战斗”,结果好坏不一。但是当我进行100场或1000场战斗时,玩家2通常排在首位,平均赢率为60%。

JS文件here(下载,并通过节点运行)

+0

如果玩家1第一次受到攻击,它会在60%的时间里排在前面吗?谁先攻击谁可能有某种优势,这可能反映了现实。也许你可以随便谁开始,因此晚上在战斗开始时占上风。 –

+0

对不起,在我的代码中,玩家2实际上是先消耗玩家1的健康(首先是头部,然后是身体,最后是腿部)。是的,我的目标是随机排列顺序:)奇怪的是,一次运行模拟(rounds = 1),很多次,大致为50/50分割。运行很多次,几次(rounds = 1000)显示了差异。 –

回答

1

球员谁开始总是有优势,因为他是第一个能够,如果你认为的每个球员都有100马力和1的情况下做的最后一击命中= 10点伤害,那么开始的玩家将进行第10次击球并完成战斗,而玩家2将只完成9次命中。随机化伤害依然具有优势,因为第一个玩家有1点击优势

+0

这是我目前的结论。我现在要添加顺序的随机化,然后看看。但看到我上面的评论关于有1场比赛和上千场比赛。奇怪的结果! –

+0

所以我只是切换顺序,所以现在玩家1先攻击玩家2,我得到相同的结果,玩家2赢得更多:/但只是在一个大样本集中。多次运行一个样本大概是50/50 ...很困惑! –

1

这是基于回合制的军事作战模拟模型中的一个众所周知的问题。有几个常用的解决方案。一种是随机分配先走的人。第二种是在应用那些三角洲前计算这两个玩家的增量。第二种方法具有有趣的(和现实的)结果,在某些情况下,两个玩家都可能被杀死。

-1

有趣的解决方案可能会增加诸如“激怒”变量之类的东西 - 基本上他的健康越低,他就会越强壮,并试图通过不同的缩放来平衡它。