【发布时间】:2017-10-24 13:56:08
【问题描述】:
我正在用 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(通过Node下载运行)
【问题讨论】:
-
如果玩家 1 先攻击,它会出现在前 60% 的时间吗?谁先出手,想必有某种优势,这大概反映了现实。也许你可以随机谁开始,这样晚上战斗开始时谁占上风。
-
抱歉,在我的代码中,玩家 2 实际上首先攻击,通过消耗玩家 1 的生命值(首先是头部,然后是身体,最后是腿)。是的,我的目标是随机化顺序 :) 奇怪的是,运行一次模拟(轮数 = 1),很多次,得到大约 50/50 的分割。运行很多次,几次(轮数 = 1000)显示差异。
标签: javascript simulation montecarlo