1

我正在编写一个棋盘游戏,其中有一袋可能的棋子。每一回合,玩家根据一定的规则从袋子中随机取出棋子。

对于我的实现,最初将袋子分成一个或多个玩家的池可能更容易。这些池将是随机选择的,但现在不同的玩家将从不同的袋子中挑选。这有什么不同吗?

如果一个玩家的包用完了,更多的包会从一般储备中随机洗入其中。

4

4 回答 4

5

只要:

  • “池”袋的划分是随机的
  • 将玩家分配到给定的台球袋是随机的
  • 游戏是这样的,玩家抽取的物品被有效地从袋子中取出(在当前游戏期间,永远不会返回袋子或任何其他袋子)
  • 玩家不知道任何袋子的内容

这两种方法(“原始”带有一个大的普通袋子,“修改”的每个玩家一个台球袋在概率方面是等效的。

只有在游戏快结束时,当一些玩家的包是空的时,它才会变得有点棘手。从 100% 仍在播放的物品中挑选最公平的方法,因此,他们应该从他们挑选的袋子中挑选,并且 [当然,盲目地] 从所述袋子中挑选一件物品。

这个问题说明了概率的一个有趣特征,即概率与人们对情况的了解程度有关。例如,游戏主机可能很清楚分配给玩家 X 的“池”包不包含任何说字母“A”(考虑拼字游戏),但只要没有玩家知道这一点(并且只要池袋中的分区是完全随机的),游戏仍然公平,玩家“X”仍然必须假设他/她在下一次抽取字母时可能击中“A”,就好像所有剩余的字母一样他/她可以使用。

编辑:
尽管两个程序完全等价的断言在数学上是正确的,但感知是包含机会成分的游戏中的一个重要因素(特别是如果游戏还包含金钱成分)。为了避免不了解这个公平性的玩家的愤怒,你可以坚持原来的程序......

于 2009-11-29T06:40:04.003 回答
2

根据游戏规则,@mjv 是对的,初始随机除法不会影响概率。这类似于 n 名玩家从面朝下的牌组中轮流抽牌的游戏:牌组的初始洗牌是随机划分为每个牌手的牌“袋”。

但是,如果您在每次抽奖后更换物品,那么是一袋还是多袋都没有关系。对于一个袋子,任何特定物品最终都会被任何玩家以相同的概率抽到。对于许多袋子,该物品只能由最初放置它的袋子的玩家抽取。

弹出到软件层面,如果游戏需要一个包,我建议直接这样编程:它应该不会比 n 个包更难,而且你不必证明新游戏等同于老的。

于 2009-11-29T06:56:31.443 回答
1

我的直觉告诉我,将随机的事物集合划分为更小的随机子集将保持同样随机......无论玩家从大池还是从较小池中挑选(反过来,将自己喂入大池)都无关紧要

对于游戏来说,随机恕我直言就足够了!

于 2009-11-29T06:19:04.420 回答
0

根据安全性的重要性,可能没问题(如果涉及金钱(您或他们)不要这样做)。从一个无知的玩家的角度来看,我不完全确定它会不会那么随机。

a)不要指望他们无知,您的程序可能会被破解,然后他们就会知道接下来会出现什么

b)以不引入漏洞的方式填充袋子将非常棘手。例如,让我们采用随机挑选一个并将其放入第一个桶中的朴素算法,将其取出,然后对第二个桶做同样的事情,依此类推。您只需确保如果有 N 个棋子,第一个玩家选择给定棋子的概率为 1/N,第二个玩家有 1/(N-1),第三个玩家有 1/(N-3) 和很快。然后玩家可以分析已经玩过的棋子,以确定其他玩家持有某些棋子的概率。

认为以下算法可能会更好,但几乎所有人在第一次提出新算法时都会出错。不要使用这个,只要明白它可能涵盖我谈到的安全漏洞:

  1. 创建 N 个有序项目的列表并实例化 P 个玩家
  2. 为每位玩家随机标记 1/P 的物品(有替换)
  3. 重复执行此操作,直到标记所有 N 个项目并且为每个玩家标记相同数量的项目(注意:根据 N 和 P,可能花费的时间比您可能的寿命长得多)
  4. 将适当的物品放入玩家的桶中并随机重新排列(不要使用位置交换算法)

即使在这一切之后,你可能仍然有一个漏洞,有人通过漏洞利用找出他们存储桶中的内容。坚持使用组合池,随机选择仍然很棘手,但它会让你的生活更轻松。

编辑:我知道语气听起来有点生涩。对于那些可能会断章取义并尝试其中一些算法的人,我主要包括了所有这些大胆的内容。我真的希望你好:-)

编辑2:进一步考虑,我认为按顺序选择的问题可能会减少到让玩家首先轮流。如果这已经在规则中,那可能并不重要。

于 2009-11-29T07:03:42.907 回答