两名球员号码战斗模拟器有利于第二名球员

时间:2017-05-24 09:42:53

标签: javascript simulation montecarlo

我正在用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 stat。

(是的,玩家2当前首先攻击,然后是玩家1 - 这可能是问题?)

当我进行单一"战斗"时,结果相当复杂。但是当我进行100或1000次战斗时,玩家2通常会名列前茅,平均赢率为60%。

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

3 个答案:

答案 0 :(得分:1)

开始的球员总是有优势,因为如果你想到每个球员有100马力和1命中= 10伤害的情况,他是第一个能够完成打击,然后开始的球员将进行第10次命中和完成虽然玩家2只进行了9次点击,但战斗仍在进行。随机伤害仍然有利,因为第一名球员有1次击球优势

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

有趣的解决方案可能是添加类似“激怒”变量的东西 - 基本上是因为健康越低,他就越强大并且试图通过不同的缩放来平衡它。