用Deuces Wild计分扑克手牌

时间:2008-09-09 13:01:54

标签: algorithm

我正在寻找代码或算法的描述,以便在判断为狂野时确定扑克牌的得分。我希望代码不受许可费,GPL,专利等的影响。

我知道有几种方法可以解决这个问题,但如果代码已在某处可用,我宁愿不编写代码。如果答案仅限于实际工作代码或详细算法描述的链接,我将不胜感激。

(我不是要求任何人“为我做功课。”我可以自己编写代码,因此不需要伪代码和实现建议。我只是不想浪费时间解决已经解决的问题。)

5 个答案:

答案 0 :(得分:4)

我认为,因为你说你特别想要想法,你只想要一个有效的解决方案。

我认为,通常的想法是,最好以最有效的吸引力方式做到这一点,而不仅仅是某些人在此之前做到的方式。我认为这个社区的一个优点是程序员可以反复思考并帮助您找到最佳的做事方式。

我认为我们大多数人都对我们的代码库情绪激动,并想知道某人的动机是什么,这会让任何旧事物变成他们的代码。

这是作业作业吗?或者可能是其他人?

答案 1 :(得分:4)

如果不编写所有代码,开头看起来就像:

/*
* 2.1 Straight flush
* 2.2 Four of a kind
* 2.3 Full house
* 2.4 Flush
* 2.5 Straight
* 2.6 Three of a kind
* 2.7 Two pair
* 2.8 One pair
* 2.9 High card
*/
// Note, the vector cards is sorted low to high. All cards have a numeric value 2-13 and a suit 0-3
int noDuces(Cards[] cards) {
    int duces = 0;
    int cursor = cards.length;
    while(cards[cursor--].value == 2) duces++;
    return duces;
}

bool isFlush(Cards [] cards) {
   int duces = noDuces(cards);
   int firstColour = cards[cards.length].colour;
   for (int i = cards.length -1; i > duces; i--) {
       if (cards[i].colour != firstColour)
           return false;
   }
   return true;
}

bool isStraight(Cards[] cards) {
    int duces = noDuces(cards);
    int usedDuces = 0;
    // TODO Handle A - 5 straight. 
   card prevCard = cards[cards.length];
    for (int i = cards.length -1; i > duces; i--) {
       if ((prevCard.value + 1) != cards[i].value) {
           if (usedDuces >= duces) {
               return false;
           }
           usedDuces++;
       }
       prevCard = cards[i];
   }
    return true;
}

答案 2 :(得分:2)

http://www.codingthewheel.com/archives/poker-hand-evaluator-roundup

关于扑克评估库的页面。 - 库/算法列表

答案 3 :(得分:2)

德州扑克扑克游戏评估员的完整源代码可以在这里找到:

http://www.advancedmcode.org/poker-predictor.html

它是为matlab构建的,GUI id是m编码的,但计算引擎是c ++。

它允许赔率和概率计算。在我的2.4Ghz笔记本电脑上,它可以在0.3秒内处理100000个10人游戏计算。

准确的实时计算机:-)

答案 4 :(得分:0)

虽然“直接”计算和比较手似乎是一个很有吸引力的练习,但几乎没有应用程序(对于具有合理数量的ram /磁盘的计算机),它们是实用的。如果您比较的是“少数”牌,那么这种方法会让您一次又一次地计算相同的手牌价值。

由于对所有扑克牌及其值的详尽预计算是可行的,所以这样做一次生成查找表是--BY FAR--最快和最实用的解决方案。这种算法之间的差异主要与管理表的大小的技巧有关。主要答案可以链接到各种各样的算法,repeated here for convenience,从粗犷的天真计算到各种查找。这是一个启发性和娱乐性的阅读。