1

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

基本上,我要问的是:我怎样才能从 4 位玩家之间的 9 张牌中找到最高的牌?

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

此外,我注意到其他手牌评估员已设置为优化,有些人会计算每张牌的位数,这让我感到困惑。

编辑:这是我正在开发的游戏:

这是一个 6x6 网格的游戏,其中四个玩家拿起卡片,无论他们的玩家棋子落在哪里,他们都会拿起那张卡片。卡片来自标准的 52 张卡片组,但卡片正面朝上,仅使用从卡片组中随机选择的 36 张卡片。

最终,在游戏快结束时,玩家最多可以拥有 9 张牌。

赢得比赛的方法是在您周围的四个玩家中控制最高的扑克手。

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

在另一场游戏中,最高的手是顺子,其余的人有一个三或两对,那么有顺子的人获胜。

因此,最高牌手是相对于其他玩家手牌最高的手牌。它是 4 位玩家中排名最高的手牌。

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

4

1 回答 1

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
于 2013-05-15T10:25:30.707 回答