问题标签 [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 投票
3 回答
646 浏览

algorithm - 评估扑克手范围 A 与扑克手范围 B

我有这个问题:我想知道持有扑克牌组合的玩家击败另一个持有不同扑克牌组合的玩家的频率。

投资组合中的每一手牌都有一个权重(即可能性)。投资组合中的每一手牌都知道自己的“实力”。这实际上意味着所有牌都已发牌。所以请假设不再需要发牌。

这个问题很烦人的原因是重复卡问题。例如,如果我从每个玩家的投资组合中随机选择一个持牌,我必须检查这些持牌是否不共用一张牌——显然这两种牌不能发同一张牌。

我想快速做到这一点,以便每秒可以进行许多不同的 RangeA 与 RangeB 比较。我有一个解决方案,但我不会谈论它,因为我不想污染任何回应。

-- 举个例子 --
给定一张 5 张牌的“Ah 3c 8c Td Jh”:
HandRangeA = {{"As Ac", 2.5%}, {"As Ad", 2.5%}, {"Ac Kc", 5%}....}
HandRangeB = {{"As Ac", 7.5%}, {"As Ad", 7.5%}, {"Ac Kc", 5%}....}
(每个 HandRange 包含所有不使用“董事会卡”的可能持有)

目标 :: 计算 HandRangeA 击败 HandRangeB 的概率

0 投票
3 回答
1722 浏览

algorithm - 寻找街道和同类的算法

这实际上是一个基于麻将的问题,但是基于 Romme 甚至扑克的背景也很容易理解。

在麻将中,14 张牌(牌就像扑克牌中的牌)被排列成 4 组和一对。一条街道(“123”)总是使用恰好 3 个瓷砖,不多也不少。一组相同类型(“111”)也正好由 3 个牌组成。这导致总和为 3 * 4 + 2 = 14 个图块。

有各种例外,例如 Kan 或十三孤儿,在这里不相关。颜色和值范围 (1-9) 对算法也不重要。

我正在尝试确定是否可以按照上述方式安排手。由于某些原因,它不仅应该能够处理 14 个瓷砖,而且应该能够处理任意数量的瓷砖。(下一步是找出需要交换多少张牌才能完成一手牌。)

例子:

11122233344455- 很简单,4 套和一对。
12345555678999- 123, 456, 789, 555, 99
11223378888999- 123, 123, 789, 888, 99
11223344556789- 无效手牌

我目前尚未实施的想法是:对于每个图块,尝试制作 a) 一条街道 b) 一组 c) 一对。如果没有一个有效(或者会有 > 1 对),则返回上一个迭代并尝试下一个选项,或者,如果这是最高级别,则失败。否则,从剩余瓦片列表中删除已使用的瓦片并继续下一次迭代。

我相信这种方法有效并且速度也相当快(性能是一个“不错的奖励”),但我对您对此的看法很感兴趣。你能想到替代解决方案吗?这个或类似的东西已经存在了吗?

(不是作业,我在学打麻将。

0 投票
4 回答
789 浏览

javascript - 在切线圆(或椭圆形)上获得积分并平衡扑克筹码

我尝试展示一些免费扑克游戏(HTML/Javascript 客户端、python 服务器)游戏的筹码。桌子中央有座位。对于每个座位,我知道 cosinus、sinus、半径(距桌子中心的距离)和值/计数芯片数组。

我尝试在座位点的切线上显示每个芯片对齐和平衡

在图像中:(我无法创建图像:http: //i.stack.imgur.com/a4Obw.png

现在,我写了这段代码:

但它不平衡,也不好看。

add : cosinus 和 sinus 可以大于 1 小于 -1 因为表格可能是椭圆形的

0 投票
3 回答
2087 浏览

prolog - Prolog 中的卡片表示

我正在尝试学习 Prolog。这是我使用这种语言的第一步。作为练习,我想编写可以识别一些扑克牌的程序(同花顺,四类,满屋等)。

我在 Prolog 中寻找良好的卡片表示。我需要有可能检查一张卡是否比另一张大,卡是否适合等等。

我从代码开始:

这使 mi 有可能检查等级 A 是否大于例如 J。

但我不确定如何表示单卡。这个表示应该包含牌的等级和花色。Ace 也有一些问题,因为 Ace 有 14 级,但它也可以是 1 顺子。

所以我的问题是,如果我想制定如下规则,如何表示卡片:

或者

我敢肯定,如果您了解语言,这是一个简单的问题,但是从 C 或 python 之类的语言“转换”思维并不容易。:-)

0 投票
1 回答
472 浏览

apache-flex - Flex的在线扑克?

我被分配了为在线扑克设计界面的任务,这很好。但客户也想知道我是否也能够开发游戏。我认识 2 位非常有经验的 Flex/AS3 程序员可以开发游戏,但我只是想知道 Flex 是否适合在线扑克游戏?我需要的是:

  1. 安全性<--非常重要
  2. 性能 - 必须在大多数系统上平稳运行
  3. 能够下载游戏并玩(即不必从浏览器运行)

如果 Flex 不适合,您会推荐哪种其他技术?

0 投票
4 回答
330 浏览

c# - 使用字典尝试搜索值和键(扑克游戏)

我正在尝试使用 c# 创建一个基本的扑克游戏。

到目前为止,我已经使用这三行随机发牌:

现在我想要实现的是只处理那些尚未发牌的牌。现在为此,我创建了两个“字典”集合,一个称为“deck”,一个称为“dealt”。我最初考虑将所有卡片添加到甲板上,然后在桌子上处理时将它们从甲板上删除并使用卡片唯一键添加到处理中。

您认为解决此问题的最佳方法是什么?我基本上不希望重复的牌,例如 Ace Hearts 和 Ace Hearts 组合在同一个牌组中。我怎样才能防止这种情况?

0 投票
7 回答
9701 浏览

java - Java中的扑克牌

有什么简单的方法可以比较两张扑克牌吗?我很天真地处理这个问题,所以如果有人有这样做的经验,它可能会有所帮助。

0 投票
0 回答
232 浏览

xml - 如何修复损坏的 Full-Tilt Poker 玩家笔记 XML 文件

FullTilt Poker最近的一次软件更新导致朋友玩家备注 XML 文件损坏。

FullTilt 为玩家笔记创建两个 XML 文件;一个包含所有玩家笔记的主文件,以及一个带有时间戳的文件,它只记录当前登录会话期间所做的任何笔记。

两个文件都损坏了。

时间戳文件只是缺少一个开始<NOTES>标签,所以我修复了它,但master.xml是另一回事。

这是我们在 FireFox 中看到的:

在此处输入图像描述

Chrome 给了我们这个:

在此处输入图像描述

  1. 该文件不会在任何网络浏览器中打开。
  2. 我无法在 Ubuntu 或 Google Docs 上的 Gedit 中打开它
  3. 确实在 Windows XP 上的 Notepad++ 中打开

在 Notepad++ 中打开文件后,您会认为有人将字体更改为 WingDings,我们只是看到一堆乱七八糟的随机字符、心形、箭头等

我们遵循了几年前有人在 fulltilt 论坛上发布的一些建议,他们建议将文件内容复制+粘贴到 Web 表单中(以修复回车),然后返回记事本,但我没有运气这样做。事实上,似乎只有前 50 个左右的字符是从剪贴板上粘贴的。我怀疑其中一个“坏了

那么有没有人对如何解决这个问题有任何建议,我知道这是可以做到的,只是要找到正确的方法。

0 投票
5 回答
15891 浏览

python - 确定德州扑克手牌获胜者的算法

好的,所以我正在为我的高级项目制作德州扑克 AI。我已经创建了 gui 和投注/交易程序,但我已经到了需要确定谁赢了这手牌的部分,而且我不知道解决这个问题的最佳方法。我正在使用 python 顺便说一句。ATM 我有 2 个列表,一个用于 7 个玩家卡,一个用于 7 个计算机卡。目前所有的牌都以结构体的形式存储在列表中,如 {'Number': XX, 'Suit': x},其中 number 为 2-14,suit 为 1-4。我打算解决这个问题的方法是为每种手型创建一个函数,从最高的开始。例如。self.CheckRoyal(playerCards),并手动浏览列表并评估是否实现了皇家同花顺。必须有一种更好的数字方式来做到这一点。

0 投票
8 回答
1305 浏览

algorithm - 扑克游戏的商业级随机化

我需要一些关于如何解决算法问题的建议(即本身不是编程)。以下是我的需求以及我如何努力满足它们。欢迎任何改进意见。

让我首先解释我的目标。我想玩一些扑克大约十亿次。也许我正在尝试创建下一个 PokerStars.net,也许我只是疯了。

我想创建一个程序,它可以生成更好的随机牌组,而不是调用 random() 的典型程序。这些需要是由高质量随机数创建的生产质量套牌。我听说商业级扑克服务器对每张牌使用 64 位向量,从而确保每天玩的所有数百万扑克游戏的随机性。

我想保持我写的简单。为此,该程序应该只需要一个输入来实现既定目标。我已经决定,每当程序开始时,它都会记录当前时间并将其用作起点。我意识到这种方法在商业环境中是不可行的,但只要它能够支持数十亿游戏,比更简单的替代方案更好,我会很高兴。

我开始编写伪代码来解决这个问题,但遇到了一个棘手的问题。这对我来说很清楚,但对你来说可能不是,所以请告诉我。

伪代码如下:

我的问题是最后一步。我想不出一种将每个 64 位值正确映射到相应卡的方法,而不必担心两个数字相同(不太可能)或丢失任何随机性(可能)。

我的第一个想法是将 0x0000000000000000 - 0xFFFFFFFFFFFFFFFF 分成四个偶数部分(代表花色)。但是不能保证我们会在每个部分找到正好 13 张卡片,这会很糟糕。

既然您知道我被困在哪里,您将如何克服这一挑战?

-- 已编辑 --

从 /dev/random 读取字节实际上会很好。但这仍然让我迷失了如何进行转换?(假设我为 52 张卡读取了足够的字节)。

我真正的愿望是采用简单且可预测的东西,例如系统时间,并将其转换为随机的一副牌。使用系统时间播种 random() 是一种不好的方法。因此,时间的散列和随机()出来的值的散列。

见鬼,如果我愿意,我可以散列来自 /dev/random 的字节,只是为了发出嘘声和咯咯笑声。散列提高了事物的随机性,不是吗?这不是现代密码管理器存储经过数千次哈希处理的密码的原因吗?

-- 编辑 2 --

所以我已经阅读了你们的答案,我发现自己对你们中许多人暗示的结论感到困惑。我在第一次编辑中暗示了它,但它真的让我陷入了循环。我只想指出并继续前进。

彩虹表的存在可以进行时髦的数学运算和巧妙的魔法,本质上充当映射到特定密码的常见哈希的查找表。据我了解,更长、更好的密码不太可能出现在这些彩虹表中。但事实仍然是,尽管有多少用户密码很常见,但经过哈希处理的密码经过数千次哈希处理后仍然安全。

那么,在这种情况下,许多确定性操作增加了原始密码的随机性(或似乎?)我不是说我是对的,我只是说这就是我的感觉。

我想指出的第二件事是我正在倒退。

我的意思是,你们都在建议我使用一副有序的、可预测的、非随机的纸牌,并在上面使用 Fisher-Yates 洗牌。我确信 Fisher-Yates 是一个很好的算法,但可以说你不能出于任何原因使用它。

您能否获取一个随机的字节流,例如大约 416 个字节(52 张卡片,每张卡片 8 个字节),然后 BAM 会生成一个已经随机的卡片组?字节是随机的,所以这样做应该不会太难。

大多数人会从一副 52 张牌(随机或非随机)开始,然后将它们交换很多次(通过选择一个随机索引进行交换)。如果你能做到这一点,那么你可以取 52 个随机数,遍历它们一次,然后生成随机牌组。

正如我所描述的那样, 该算法接受随机字节流并查看每个 8 字节块。它将每个块映射到一张卡片。

前任。0x123 映射到黑桃 A。0x456 映射到钻石之王 Ex。0x789 映射到 Clubs 的 3 .... 等等。

只要我们为映射选择了一个好的模型,就可以了。无需改组。该程序将减少到两个步骤。

第 1 步:从一个好的源中获取足够数量的随机字节 第 2 步:将此字节流拆分为 52 个块,每张卡片一个块 第 2a 步:遍历这 52 个块,根据我们的方法将它们转换为卡片值地图。

这有意义吗?