我正在尝试在R中运行骰子滚动模拟。在我的项目中,我使用的是Dungeons and Dragon's D20,这是20面骰子,用于诸如的桌上游戏。
游戏的功能之一是当玩家攻击或施放咒语时,他们掷出D20,掷出的结果决定成功。玩家可以使用正面或负面的修饰语来增加总分。我正在尝试创建一个根据其修饰符来滚动特定结果的玩家。这是我到目前为止的内容:
D20_prob = function(d, nreps) {
roll = matrix(sample(20, size = d * nreps, replace = T), ncol = nreps)
result_tot = (roll + 1) # Adds modifier
return(prop.table(table(result_tot)))
}
D20_prob(1, 100)
结果如下:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0.02 0.04 0.04 0.02 0.10 0.08 0.05 0.05 0.05 0.03 0.04 0.04 0.03 0.06 0.05 0.05 0.08 0.04 0.06 0.07
在D&D游戏中,修改器的范围可以从-5到+5。谁能帮我修改代码,以便我创建一个范围为-5到+5的表?
答案 0 :(得分:1)
我认为您想要的功能是
sample.int(10, n= 20, replace = TRUE)
这实际上取决于您要模拟的内容。 如果您想查看结果的可能性,在一定的掷骰数下(即如果我使用该修饰符,考虑到我接下来二十个小时的游戏伤害,它是否比另一个修饰符更好),在这里您可以使用上述功能并模拟尽可能多的卷(即1000或更多)。 第二个选项是您希望大致看到结果的可能性(即,如果我需要高于18,那么我获得该结果的机会是多少)。在这种情况下,因为您有D20,所以滚动数字的概率为1/20。
我曾经做过类似的事情:我的模拟器是随机滚动完成的,目的是观察组合成功的可能性,以使玩家了解其修饰符从长远来看将如何工作。 但是在那种情况下,请注意,随机数永远不会真正是随机的(有好有坏的软件包)。
编辑:
要遍历损失,可以使用for循环:
for (modifier in -5:5){
result_tot = prop.table(table(roll + modifier))
}
问题是我从未使用过data.tables,而且似乎无法合并所有生成的不同表。在上面的示例中,每个循环都覆盖表result_tot。因此,您需要先打印它,或者找到一种合并结果表的方法。