0

だから私はポーカー シミュレーションを行っており、ハンドをランク​​付けできるようにする必要があります。

だから私はカードのランク(番号)を次のように列挙しました enum Rank{ace=1, two, three, four, five, six, seven, eight, nine, ten, jack, queen, king};

エースが高くなければならないことを除いて、すべてが正常に機能します

だから私は今それを enum Rank{ two=2, three, four, five, six, seven, eight, nine, ten, jack, queen, king, ace};

したがって、このシミュレーションにはハンド オブジェクト (5 枚のカード) があり、それらのベクトルをランク別に並べ替えようとしています。(sort(vector<Hand>.begin(),vector<Hand>.end(), poker_rank)ハンド ランク (フラッシュ、ストレートなど) に従ってハンドのベクターをソートしようとしています。以前は機能していましたが、今では上記のエラーが表示されます

多くのコードがあるので投稿するつもりはありませんが、列挙型を変更するとこのエラーが発生する可能性がある理由を知っている人はいますか?

ここにすべてがあります

getRank メソッドはハンドのランクを返します 9=ストレートフラッシュ 8=フォーカード 7=フルハウス 6=フラッシュ 5=ストレート 4=スリーカード 3=ツーペア 2=ペア 1=順不同

私の poker_rank

bool poker_rank(const Hand& first, const Hand& second){

    Card midCard1 = first.getHand().at(2);
    Card lastCard1 = first.getHand().back();

    Card midCard2 = second.getHand().at(2);
    Card lastCard2 = second.getHand().back();

    if(first.getRank() > second.getRank()){
        return true;
    }
    if(first.getRank() == second.getRank()){
        if(first.getRank()==9){
            return lastCard1 > lastCard2;
        }
        if(first.getRank()==8){
            return fullFourCheck(first, second);
        }
        if(first.getRank()==7){
            return fullFourCheck(first, second);
        }
        if(first.getRank()==6){

        }
        if(first.getRank()==5){
            return straightRank(first, second);
        }
        if(first.getRank()==4){

        }
        if(first.getRank()==3){
            return twoPairRank(first, second);
        }
        if(first.getRank()==2){
            return pairRank(first, second);
        }
        if(first.getRank()==1){

        }
    }else{
        return false;
    }
    return false;
}<code>

ヘルパー メソッド

<pre>bool fullFourCheck(const Hand& first, const Hand& second){//This Works!
    Card firstCard1 = first.getHand().front();
    Card midCard1 = first.getHand().at(2);
    Card lastCard1 = first.getHand().back();

    Card firstCard2 = second.getHand().front();
    Card midCard2 = second.getHand().at(2);
    Card lastCard2 = second.getHand().back();
    if(midCard1 > midCard2){
        return true;
    }
    if(midCard1 == lastCard1){
        if(midCard2==lastCard2){
            return firstCard1 > firstCard2;
        }
        if(midCard2==firstCard2){
            return firstCard1 > lastCard2;
        }
    }
    if(midCard1 == firstCard1){
        if(midCard2==lastCard2){
            return lastCard1> firstCard2;
        }
        if(midCard2==firstCard2){
            return lastCard1 > lastCard2;
        }
    }
    return false;
}

bool straightRank(const Hand& first, const Hand& second){//This WORKS!
    Card firstCard1 = first.getHand().front();
    Card lastCard1 = first.getHand().back();

    Card firstCard2 = second.getHand().front();
    Card lastCard2 = second.getHand().back();

    if(firstCard1.rank_==1 && firstCard2.rank_==1){
        if(lastCard1.rank_==13 && lastCard2.rank_==5){
            return true;
        }else{
            return false;
        }
    }
    else if((firstCard1.rank_==1 && lastCard1.rank_==13)
        ||(firstCard2.rank_==1&&lastCard2.rank_==5)){
            return true;
    }
    else if((firstCard1.rank_==1 && lastCard1.rank_==5)
        ||(firstCard2.rank_==1&&lastCard2.rank_==13)){
            return false;
    }
    else{
        return lastCard1 > lastCa`enter code here`rd2;
    }
}

bool twoPairRank(const Hand& first, const Hand& second){//This WORKS!
    Card firstCard1 = first.getHand().front();
    Card secondCard1 = first.getHand().at(1);
    Card midCard1 = first.getHand().at(2);
    Card fourthCard1 = first.getHand().at(3);
    Card lastCard1 = first.getHand().back();

    Card firstCard2 = second.getHand().front();
    Card secondCard2 = second.getHand().at(1);
    Card midCard2 = second.getHand().at(2);
    Card fourthCard2 = second.getHand().at(4);
    Card lastCard2 = second.getHand().back();

    if(secondCard1.rank_==1 && secondCard2.rank_!=1){
        return true;
    }
    if(fourthCard1 > fourthCard2){
        return true;
    }
    if(fourthCard1==fourthCard2){
        if(secondCard1>secondCard2){
            return true;
        }
        if(secondCard1==secondCard2){
            if(midCard1==secondCard1 && midCard2==secondCard2){
                return firstCard1 > firstCard2;
            }
            if(midCard1==secondCard1 && midCard2==fourthCard2){
                return firstCard1 > lastCard2;
            }
            if(midCard1==fourthCard1 && midCard2==secondCard2){
                return lastCard1 > firstCard1;
            }
            if(midCard1==fourthCard1 && midCard2==fourthCard2){
                return lastCard1 > lastCard2;
            }else{
                return midCard1 > midCard2;
            }
        }
    }
    return false;
}

bool pairRank(const Hand& first, const Hand& second){//This WORKS!

    Card pairInFirst;
    Card pairInSecond;

    for(int i = 0; i < first.size()-1; i++){
        if(first.getHand().at(i)==first.getHand().at(i+1)){
            pairInFirst = first.getHand().at(0);
            break;
        }
    }

    for(int i = 0; i < second.size()-1; i++){
        if(second.getHand().at(i)==second.getHand().at(i+1)){
            pairInSecond = first.getHand().at(0);
            break;
        }
    }

    vector<Card> firstTemp;
    vector<Card> secondTemp;
    if((pairInFirst > pairInSecond)||(pairInFirst.rank_==1 && pairInSecond.rank_!=1)){
        return true;
    }else if(pairInFirst==pairInSecond){
        for(int i = 0; i < first.size(); i++){
            if(!(first.getHand().at(i)==pairInFirst)){
                firstTemp.push_back(first.getHand().at(i));
            }
        }
        for(int i =0; i < second.size(); i++){
            if(!(second.getHand().at(i)==pairInSecond)){
                secondTemp.push_back(second.getHand().at(i));
            }
        }

    }
    return false;
}<code>
4

0 に答える 0