algorithm - 在扑克中分配边底池
问题描述
嗨,我正在开发一个扑克应用程序,但在分配边池时遇到了一些麻烦。
主要问题是我不知道如何分配弃牌玩家的筹码(死筹码)。
现在我的代码执行以下操作:
- 获得全押玩家的最低赌注。
- 将其乘以下注超过该金额的玩家数量。
- 将底池交给下注超过金额的玩家之间的赢家。
- 将全押减去以下边池。
- 重复第 1 点,直到没有更多的花盆可供分配。
当所有玩家全押时,这是有效的,但如果有人弃牌,事情就会变得棘手。
例如:
A bet(200).
B all-in (80).
C all-in (400).
A folds.
B wins the hand.
所以第一个底池将是 B(80) + C(80),剩下的将给 C。
答:+0。
乙:+80。
C:+520。
显然这里做错了什么,因为 B 有权争取 A 下注的 80 个筹码。
解决方案
考虑每个玩家下注的第 n 个筹码。有资格获得该筹码的玩家是那些没有弃牌并且至少下注 n 的玩家。将筹码分配给持有最佳手牌的合格玩家。
在您的示例中:
A 200 fold
B 80 call [best hand]
C 400 call
- A 的筹码 1-80 有 2 名符合条件的玩家(B 和 C),B 拥有最好的牌。所以 B 取 80。
- 来自 A 的筹码 81-200 有 1 名符合条件的玩家 (C)。C 需要 120。
- B 的筹码 1-80 有 2 名符合条件的玩家(B 和 C),B 拥有最好的牌。所以 B 取 80。
- C 的筹码 1-80 有 2 名符合条件的玩家(B 和 C),B 拥有最好的牌。所以 B 取 80。
- 来自 C 的筹码 81-400 有 1 名符合条件的玩家 (C)。C 需要 320。
总体而言,B 需要 240,C 需要 440。
我把描述写成一个个工作的筹码,但是你可以优化(就像我在工作示例中所做的那样),考虑所有没有弃牌的玩家的下注大小(即:在你的 80 和 400例子)。
推荐阅读
- c++ - C4355 'this' 在基本成员初始化列表中使用
- python - 二进制格式的pdf
- mysql - MySQL Installer msi 的问题 - 看不到应该安装的产品
- javascript - 如何使用 rxjs(如 forkJoin 和 combineLatest)运行一系列请求,但无需等待 ALL 完成才能看到结果?
- html - 文本不适合 div
- java - 每次我请求位置时都显示 Toast,如何更改
- java - 将 bean 逻辑创建放到一个简单的 Spring Boot 应用程序中的哪里?
- jaxb - 如何在 JAXB Unmarshal 中持久化 Element 的 UserData?
- c# - 如何在实体框架中将 db datetime 转换为 datetime
- javascript - 使用 input[range] 选择器在图像之间切换/淡入淡出