我如何从4名牌手之间的9张牌中找到最高的牌手?

我试图在网上查看几个来源,他们都处理5张牌和7张牌。 另外,我并没有真的在寻找代码,我会自己尝试这样做(尽管如果你愿意的话,我希望用Python或JavaScript来实现)。 我只是想让别人向我解释找到这样一只手的步骤(使用伪代码)。

基本上,我问的是:我怎样才能从9名牌手中找到4名选手中最高的牌手?

我是否应该将所有最高的扑克牌手数字分配到排名中,然后解析每个玩家的手牌并查看他们的手牌是否包含该数字? 这似乎有点乏味,我不确定这是做到这一点的正确方法。

另外,我注意到其他手评估者被设置为优化,并且有些人计算每张牌所玩的比特数,这使我困惑。

编辑:这是我正在做的游戏:

这是一个6x6网格的游戏,其中有四名玩家在他们的球员落地的地方拿起牌,他们拿起那张牌。 牌来自标准的52张牌组,但是牌面朝上,并且只使用从牌组随机选择的36张牌。

最终,在比赛结束时,玩家最多可以在他们手中包含9张牌。

赢得比赛的方法是在你周围的四名球员中包含最高的扑克牌。

所以,基本上,如果你有一个皇家同花顺,其他人都有一对或一个直的,他们会失败。

在另外一场比赛中,最高的手是直的,其余的有一对或两对的三个,那么直线的人就会胜出。

所以,最高的扑克牌手相对于其他玩家的手牌是最高的。 这是4名球员中排名最高的牌。

扑克牌手只是普通的手牌,可能是也可能不是最高的。


9张牌手只有126种可能的5张牌组合。 所以你可以迭代它们来找到最高的。 itertools.combinations(9_cards, 5)可以生成它们全部。

为了找到最高的,一个简单的工具可以定义一个功能,给手一个分数。 然后使用这个函数作为关键字: max(all_5_cards_hands, key=hand_score)

您可以使用元组来表示分数。 通过手排名,然后是卡排名。

一个例子:

STRAIGHT_FLUSH = 9
...
TWO_PAIR = 2
ONE_PAIR = 1
HIGH_CARD = 0

hand_score('A7532')  # I omit suits here
# => (HIGH_CARD, 14,7,5,3,2)
hand_score('KK333')
# => (FULL_HOUSE, 3, 13)
hand_score('33444')
# => (FULL_HOUSE, 4, 3)
hand_score('AKQJ0')
# => (STRAIGHT, 14)

# Tuples can be easily compared:
(HIGH_CARD, 14,7,5,3,2) < (STRAIGHT, 14)
# => True
链接地址: http://www.djcxy.com/p/40197.html

上一篇: How can I find the highest poker hand from a 9 card hand between 4 players?

下一篇: What's an algorithm to solve this?