【问题标题】:Two player number battling simulator favours second player两个玩家号码战斗模拟器有利于第二个玩家
【发布时间】: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


【解决方案1】:

先发球员总是有优势,因为他是第一个能够完成最后一击的人玩家 2 的战斗将只完成 9 次点击。随机伤害仍然有优势,因为第一名玩家有 1 次命中优势

【讨论】:

  • 这是我目前的结论。我现在要添加顺序的随机化,看看。但是请参阅我上面关于 1 对 1000 的战斗的评论。奇怪的结果!
  • 所以我只是切换顺序,所以现在玩家 1 先攻击玩家 2,我得到相同的结果,玩家 2 获胜更多:/ 但同样仅在大样本集中。多次运行一个样本大约是 50/50...好困惑!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-05
    • 2022-08-07
    • 1970-01-01
    • 2013-05-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多