问题标签 [poker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
31710 浏览

algorithm - 7 张牌扑克手评估器

有谁知道评估 7 张牌扑克手的快速算法?这比简单地强力检查一组 7 中每 21 张 5 张牌的组合更有效。

干杯,

皮特

0 投票
4 回答
110 浏览

c++ - 需要关于 C++ 中 Table 类的两个成员函数的反馈

希望对德州扑克模拟的 Table 类的这两个成员函数有一些反馈。任何信息语法、效率甚至常见做法都将不胜感激。

0 投票
1 回答
460 浏览

user-interface - 从文本框中获取信息 - Full Tilt Poker

Full Tilt Poker 的 GUI 有一个文本框,用于报告当前手牌的状态。我希望能够解析该文本,但不知道如何访问它,所以如果有人能指出我正确的方向,我将不胜感激。

带有 GUI 和文本框的图像:http: //img143.imageshack.us/img143/6660/ftpbox.jpg

0 投票
11 回答
1234 浏览

c - 哪个更快 - 排序或相乘一小部分元素?

通过Cactus Kev 的 Poker Hand Evaluator阅读,我注意到以下陈述:

起初,我认为我总是可以先对手进行分类,然后再将其传递给评估者;但是排序需要时间,我不想浪费任何 CPU 周期来排序。我需要一种不关心五张卡片的顺序的方法。
……
经过深思熟虑,我有了一个使用素数的头脑风暴。我会为十三张牌中的每张牌分配一个素数值……这个系统的美妙之处在于,如果你将手中每张牌的素数相乘,你就会得到一个独特的产品,不管顺序如何五张牌中。
...
由于乘法是计算机可以进行的最快计算之一,如果我们在评估之前被迫对每只手进行排序,我们的时间已经减少了数百毫秒。

我很难相信这一点。

Cactus Kev 将每张牌表示为一个 4 字节整数,并通过调用 来评估手牌eval_5cards( int c1, int c2, int c3, int c4, int c5 )。我们可以将卡片表示为一个字节,而将扑克牌表示为一个 5 字节的数组。对这个 5 字节数组进行排序以获得独特的手必须非常快。它比他的方法更快吗?

如果我们保留他的表示形式(卡片为 4 字节整数)怎么办?对 5 个整数的数组进行排序是否比将它们相乘更快?如果不是,可以进行哪些低级优化来加快对少量元素的排序?

谢谢!

大家好回答;我正在对排序与乘法的性能进行基准测试,以获得一些硬性能统计数据。

0 投票
2 回答
1999 浏览

c# - IComparable 和 OrderBy。尝试用 C# 对扑克牌进行排序

我正在尝试创建一个分析扑克手的简单程序。给定 n 手/玩家和公共牌(德州扑克),我想确定获胜者。但是,当我有两个确切的结果时,我的测试失败了——它只返回一个获胜者。即手牌结果包含 JJ 9 9 K,对于两个玩家,但我的获胜者列表包含一个。

我在这里发帖有几个原因。显然,第一个是这里有什么明显的错误吗?这是实现排序的好方法(我看不出分开排序的理由),是否有更好的方法,为什么?

我有一个DetermineWinners 方法,它正在对玩家的HandResult 执行订单:

这是我的手结果类:

GetCardResult 方法简单地返回卡片的整数表示,即 1 到 14。这是 HandRanking 枚举:

这是 HandRanking 枚举上的 GetGrouping 扩展。它用于在比较值时帮助遍历卡片:

非常感谢您的帮助。

编辑:我对 CompareTo_Equal、CompareTo_LessThan 和 CompareTo_GreaterThan(使用我的运算符重载)的测试成功,结果分别为:0、-1 和 1。我相信这是我的 Linq.OrderByDescending 实现的问题。我想这只是使用 CompareTo 实现,我错了吗?

0 投票
2 回答
2514 浏览

regex - 正则表达式计算直接扑克手?

是否有正则表达式来计算直接扑克手?

我正在使用字符串来表示已排序的卡片,例如:

在 Java 中,我使用这些正则表达式:

如何使用正则表达式计算直接(序列)值?

编辑

我打开另一个问题来解决同样的问题,但使用 char 的 ascii 值来使正则表达式变短。详情在这里

谢谢!

0 投票
4 回答
1082 浏览

regex - 正则表达式计算直接扑克手 - 使用 ASCII 代码

在另一个问题中,我学习了如何使用正则表达式计算顺手牌(这里)。

现在,出于好奇,问题是:我可以使用正则表达式来计算相同的东西,使用 ASCII 代码吗?

就像是:

正则表达式:[C][C+1][C+2][C+3][C+4],是 C 的 ASCII 代码(或像这样)

匹配:45678,23456

不匹配:4567923459(不按顺序)

0 投票
3 回答
2636 浏览

c# - 更好的 C# Poker 框架设计?

我正在用 C# 编写一个扑克框架,但我不喜欢我目前的设计。我的目标是拥有一个游戏引擎,可以非常快速地在批处理模式下让多个 AI 代理相互对抗,并且可以与多个 AI 代理对战(可能通过 Silverlight 客户端)。我想保持高效率但保持灵活性——例如,它应该能够玩有限德州扑克、无限德州扑克、有限 7 张牌梭哈等游戏。

我目前的设计相当笨拙且不灵活:

  • HandHistory:包含有关当前手牌的所有信息(玩家、下注等)
  • IPlayer:每个玩家定义一个 GetAction(HandHistory history) 方法。
  • GameEngine:定义一个返回 HandHistory 对象的 Play(HandInfo info) 方法。
  • PotManager:管理底池并确定每个玩家必须跟注多少以及他们可以赢多少(例如,如果他们的筹码不相等并且全押)。
  • BetManager:管理投注并确定投注回合何时结束。

HandInfo 类包含有关如何设置手的所有信息。Play 方法看起来像这样:

问题的出现是因为有太多的小事情需要考虑,比如收集盲注等等。底池和投注经理课程变成了一场噩梦,并且总是充满了错误。此外,我的引擎设计只支持一种游戏类型(Hold'em)而不是其他游戏类型。

我的主要排名是效率第一,因为该引擎主要用作数十亿手的 AI 模拟器。但是,我想认为有一种更优雅的方式可以做到这一点。

0 投票
3 回答
977 浏览

php - preg_replace 1 行上的多个实例?

我有来自扑克软件的这样的文字(我已经突出显示了我需要替换的部分)。

--- FLOP --- [Jh 9h Ah]
driversati 过
牌 darrington 还有 15 秒的时间采取行动
darrington 下注 100
InvisibleEnigma 跟注 100
driversati 弃牌
--- TURN --- [Jh 9h Ah] [3c]
darrington 下注 200
InvisibleEnigma 跟注 200
--- 河流 --- [Jh 9h Ah 3c] [Td]

Jh = 红桃
9h = 红桃 9
Ah = 红桃 A
3c = 梅花 3

我想用IMAGES替换方括号内的卡片。

所以这一行: --- TURN --- [Jh 9h Ah] [3c]
需要变成: --- TURN --- jh.gif 9h.gif ah.gif 3c.gif

我无法弄清楚 preg_replace :( 我可以找出括号内的一张卡(如 [3c]),但我坚持替换 1 行上的多个实例和一些有 3 张卡的括号和一些有 2 或 1 卡的括号。

这就是我的单卡:

任何帮助,将不胜感激。

0 投票
11 回答
3587 浏览

artificial-intelligence - 检测在线扑克作弊

最近在一个大型扑克网站上发现,一些玩家可能通过利用一个被发现的安全漏洞在玩牌时看到所有对手的牌。

一个天真的作弊者会以极快的速度获胜,而且这些作弊通常很快就会被抓住,如果不迅速被抓住,他们很容易通过快速扫描他们的手牌历史来发现。

更难的问题出现在作弊者表现出智慧,在他们必然会被跟注的场合诈唬,用最差的牌跟注河牌圈下注,基本前提是他们故意输底池以掩饰他们看到其他玩家牌的能力,他们以合理的现实速度获胜。

鉴于:

  • 数百万个经过验证且完整的信息手历史数据集
  • 理论上无限计算能力
  • 假设游戏是无限注德州扑克,尽管关于奥马哈或限注扑克的建议可能是有益的

我们如何合理准确地对这些作弊者进行分类?最初的 2+2 线程呼吁想法,我认为 SO 社区可能会有一些有用的建议。

这也是一个有趣的问题,因为它是最新的,如果有人找到创造性的解决方案,它在改善世界方面具有真正的应用,因为当发现被识别的作弊者时,真正的玩家很有可能会退还给他们的资金。