javascript - 如何从 4 名玩家之间的 9 张牌中找出最高的一手牌?

标签 javascript python pseudocode poker

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

基本上,我要问的是:如何从 4 名玩家之间的 9 张牌中找到最高的一手牌?

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

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

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

这是一款 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

关于javascript - 如何从 4 名玩家之间的 9 张牌中找出最高的一手牌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16561464/

相关文章:

python - 字符串操作,然后对其应用虚拟变量

java - 如何检查一个 arrayList 是否包含另一个 arrayList 的部分?

javascript - Cordova:从外部链接返回时页面为空

javascript - fs 调用与副作用排序?

python - 子进程:无法将 '_io.BufferedReader' 对象隐式转换为 str

algorithm - 奇数正整数求和的递归算法

algorithm - 修改后的二十一点让电脑赢多于输

javascript - 谷歌可视化 : How to call and draw sequential query with table?

javascript - 使用 JavaScript 插入 HTML 元素

python - 将列表中的字符串转换为 float