【发布时间】:2014-04-05 01:24:29
【问题描述】:
我正在开发一款纸牌游戏 AI。
玩家只知道自己的牌,需要将看不见的牌随机分配给对手。
一些对手将有 0% 的机会拥有一些牌(这是必须的)。
对手比其他人更有可能拥有一些牌(这很好,但我的主要问题是解决之前提出的情况)。
现在的问题是这种卡片分配必须在很短的时间内发生很多次,所以随机分配它直到 0% 机会的卡片不在有 0% 机会拥有它们的对手手中不可行。
如果我想解决这个问题,你会建议什么方法:
-
确保没有对手有一张他有 0% 几率拥有的牌,同时确保其他牌均匀分布(并且另一个对手将拥有这张牌)
-
(在某些玩家有 10%、40% 等的机会拿到牌的情况下)
确保卡片根据其重量分布。 例如:玩家必须选择 3 张牌,他有 2% 的机会拥有 A、K 或 Q,所以他不能只有这 3 张牌可供选择(他最终可能会得到 n 个不同花色的高牌)
如果您能帮我解决第 1 种情况(用任何语言,或者指点我一个算法),我会非常感激。
谢谢!
编辑:我应该澄清一下,虽然一些对手可能有 0% 的机会拥有一张牌,但其他对手可能有正常的机会拥有它们(而且肯定有人必须拥有它)。
EDIT2:这意味着如果我们继续随意分发卡片,我们最终可能只会得到最后一个玩家拿走的禁止卡片(这不可能发生)。
【问题讨论】:
-
如果有 0% 的机会拥有一张特定的卡片,请从分发中删除该卡片。您仍然可以在用户界面中声明一副牌中有 52 张牌。但是,如果说其中有 5 张牌永远无法使用,那么你实际上只有 47 张牌在牌组中。至少,当您分发时,您只能从 52 张卡片中选择要分发的卡片。 (类似于
cards.Where(c => c.Probability > 0)) -
@David:我编辑澄清。这种情况是在我们知道一个对手没有给定花色而其他人 100% 肯定有花色时分配牌。
-
顺便说一句,您是使用现有的手部评估器还是自己编写的?
-
@AShelly:我没有使用手部评估器,我使用 ISMCTS 来模拟游戏并在达到残局时查看最终得分。
-
你仍然是一个评估者,要牵手弄清楚谁赢了,不是吗?
标签: c# performance random probability