如何从4名球员之间的9张牌中找到最高的扑克牌?

时间:2013-05-15 09:31:24

标签: javascript python pseudocode poker

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

基本上,我要问的是:如何从4名球员之间的9张牌中找到最高的扑克牌?

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

另外,我注意到其他手动评估器设置为优化,有些计算每张卡的比特数让我感到困惑。

编辑:这是我正在进行的游戏:

这是一款拥有6x6网格的游戏,其中有四名玩家拿起牌,无论他们的玩家在哪里登陆,他们都会拿起那张牌。卡片来自标准的52卡片组,但卡片面朝上,并且仅使用来自卡片的36张随机选择的卡片。

最终,在游戏结束时,玩家手中至多可以包含9张牌。

赢得比赛的方法是在你周围的四名球员中遏制最高牌。

所以,基本上,如果你有皇家同花顺而其他人都有一对或一对,他们输了。

在另一场比赛中,最高牌是直线而其余的牌都是三种或两对,那么直线获胜的人。

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

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

1 个答案:

答案 0 :(得分:1)

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