2016-08-04 243 views
-3

不工作,我碰到了下面的问题就卡套装的册封。封为手pokerstove使用pokerstove库(<a href="https://github.com/andrewprock/pokerstove" rel="nofollow">https://github.com/andrewprock/pokerstove</a>)时,如预期

下面是一个简短的代码片段演示了我的情况:

#include <iostream> 
#include <pokerstove/peval/CardSet.h> 

using namespace std; 
using namespace pokerstove; 

int main() { 
    CardSet hand1("2c3c"), hand2("2d4c"), hand3("2h4c"); 
    cout << hand1.str() << endl; 

    hand2 = hand2.canonize(hand1); 
    hand3 = hand3.canonize(hand1); 

    cout << hand2.str() << endl; 
    cout << hand3.str() << endl; 

    return 0; 
} 

从HAND1的角度来看,其他两只手是相同的(它们都包含了4C和关服2)。尽管如此,他们仍然保持不变。这不是我所期望的。

实际上,我会认为(和打算)hand2保持原样 - 因为'俱乐部'不能被排列,因为它们出现在手1中,'钻石'是下一个可用的西装2。我预计hand3将变得与hand2完全相同(通过用'钻石'切换'心')。

请问你们的人知道为什么会如预期,这是不工作?

是否有捕获的事实,手2和3是相同的(从HAND1的角度来看)的另一种方式?

任何帮助,将不胜感激!

回答

1

对于那些可能感兴趣的人 - 我只是自己找到了我的问题的解决方案。下面的伎俩:

hand1.canonize(); 

if (!hand2.suitMask(Suit::Hearts())) { 
    hand2 = hand2.rotateSuits(0, 1, 3, 2); 
} 
if (!hand2.suitMask(Suit::Diamonds()) && !hand1.suitMask(Suit::Diamonds())) { 
    hand2 = hand2.rotateSuits(0, 3, 1, 2); 
} 
相关问题