扑克手翻牌评估员

时间:2013-12-27 02:28:26

标签: algorithm lookup-tables poker evaluator

我想为德州扑克手牌创建一个查找表。现在,我使用素数代表每张卡片,并想弄清楚这些卡牌代表的是什么牌。这是因为卡的顺序无关紧要,乘法将为我们提供唯一的数字。现在,我知道手的评估者,但他们只评估没有抽签的手的力量,并且不要将手分成我需要的多个类别。

作为示例,请采取以下情况: 手:AdKd 翻牌:Kc5d3d

(d =钻石,c =球杆,h =心脏,s =黑桃) 现在,这将从查找表返回一对,同时也是同花抽牌。

现在这更棘手: 手:AhAd 翻牌圈:5c5h3d

这将评估为超对。所以,基本上,我们不能将手牌和翻牌圈组合成一个数字,因为我们想知道手牌与翻牌的确切关系。

我已经创建了一种确定是否存在同花或同花抽牌以及是否存在直线或直线抽签的方法。所以在那之后,西装不再重要,我们不关心非配对手。基本上,给定两个代表手和翻牌的数字,我们得到一个手牌类别。对于最后一个例子,Aces是素数41,所以对于手牌我们得到41 * 41 = 1681而对于棋盘,我们得到7 * 7 * 3 = 147。现在好了,我们转到我们的查找表并输入这个查找(147,1681),它应该在恒定时间内返回OVERPAIR(或我们设置的任何常量)。

如何首先实现查找表?和查找功能? (我已经计划在翻牌和手牌上使用完美的哈希算法,但实际上并不知道如何将它们组合起来。)

1 个答案:

答案 0 :(得分:0)

首先,对于编码手,我发现你的方法非常原始(不确定为什么你会使用41代表Ace,为什么不代表37,以及如何区分不同风格的Aces)。我建议如下。

手动使用1到52 * 51/2之间的数字表示每种组合。对于翻牌,使用52 * 51 * 50 /(2 * 3)数字和52 * 51 * 50 * 49 /(2 * 3 * 4)进行翻牌+转牌。

这些数字的每个组合将表示每种独特的情况。因此,存储您想要的每个注释(直接,直接翻转等)。