首页 文章

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

提问于
浏览
1

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

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

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

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

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

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

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

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

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

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

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

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

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
    

相关问题