我正在编写一个棋盘游戏,其中有一袋可能的棋子。每一回合,玩家根据一定的规则从袋子中随机取出棋子。
对于我的实现,最初将袋子分成一个或多个玩家的池可能更容易。这些池将是随机选择的,但现在不同的玩家将从不同的袋子中挑选。这有什么不同吗?
如果一个玩家的包用完了,更多的包会从一般储备中随机洗入其中。
我正在编写一个棋盘游戏,其中有一袋可能的棋子。每一回合,玩家根据一定的规则从袋子中随机取出棋子。
对于我的实现,最初将袋子分成一个或多个玩家的池可能更容易。这些池将是随机选择的,但现在不同的玩家将从不同的袋子中挑选。这有什么不同吗?
如果一个玩家的包用完了,更多的包会从一般储备中随机洗入其中。
只要:
这两种方法(“原始”带有一个大的普通袋子,“修改”的每个玩家一个台球袋在概率方面是等效的。
只有在游戏快结束时,当一些玩家的包是空的时,它才会变得有点棘手。从 100% 仍在播放的物品中挑选最公平的方法,因此,他们应该从他们挑选的袋子中挑选,并且 [当然,盲目地] 从所述袋子中挑选一件物品。
这个问题说明了概率的一个有趣特征,即概率与人们对情况的了解程度有关。例如,游戏主机可能很清楚分配给玩家 X 的“池”包不包含任何说字母“A”(考虑拼字游戏),但只要没有玩家知道这一点(并且只要池袋中的分区是完全随机的),游戏仍然公平,玩家“X”仍然必须假设他/她在下一次抽取字母时可能击中“A”,就好像所有剩余的字母一样他/她可以使用。
编辑:
尽管两个程序完全等价的断言在数学上是正确的,但感知是包含机会成分的游戏中的一个重要因素(特别是如果游戏还包含金钱成分)。为了避免不了解这个公平性的玩家的愤怒,你可以坚持原来的程序......
根据游戏规则,@mjv 是对的,初始随机除法不会影响概率。这类似于 n 名玩家从面朝下的牌组中轮流抽牌的游戏:牌组的初始洗牌是随机划分为每个牌手的牌“袋”。
但是,如果您在每次抽奖后更换物品,那么是一袋还是多袋都没有关系。对于一个袋子,任何特定物品最终都会被任何玩家以相同的概率抽到。对于许多袋子,该物品只能由最初放置它的袋子的玩家抽取。
弹出到软件层面,如果游戏需要一个包,我建议直接这样编程:它应该不会比 n 个包更难,而且你不必证明新游戏等同于老的。
我的直觉告诉我,将随机的事物集合划分为更小的随机子集将保持同样随机......无论玩家从大池还是从较小池中挑选(反过来,将自己喂入大池)都无关紧要
对于游戏来说,随机恕我直言就足够了!
根据安全性的重要性,可能没问题(如果涉及金钱(您或他们)不要这样做)。从一个无知的玩家的角度来看,我不完全确定它会不会那么随机。
a)不要指望他们无知,您的程序可能会被破解,然后他们就会知道接下来会出现什么
b)以不引入漏洞的方式填充袋子将非常棘手。例如,让我们采用随机挑选一个并将其放入第一个桶中的朴素算法,将其取出,然后对第二个桶做同样的事情,依此类推。您只需确保如果有 N 个棋子,第一个玩家选择给定棋子的概率为 1/N,第二个玩家有 1/(N-1),第三个玩家有 1/(N-3) 和很快。然后玩家可以分析已经玩过的棋子,以确定其他玩家持有某些棋子的概率。
我认为以下算法可能会更好,但几乎所有人在第一次提出新算法时都会出错。不要使用这个,只要明白它可能涵盖我谈到的安全漏洞:
即使在这一切之后,你可能仍然有一个漏洞,有人通过漏洞利用找出他们存储桶中的内容。坚持使用组合池,随机选择仍然很棘手,但它会让你的生活更轻松。
编辑:我知道语气听起来有点生涩。对于那些可能会断章取义并尝试其中一些算法的人,我主要包括了所有这些大胆的内容。我真的希望你好:-)
编辑2:进一步考虑,我认为按顺序选择的问题可能会减少到让玩家首先轮流。如果这已经在规则中,那可能并不重要。