Ejemplo n.º 1
0
bool CDeck::VerifySet(CCardStack *pStack)
{
    pStack->Sort();

    if(pStack->Size() < 3)
        return false;

    for(VI vi = pStack->begin(); vi != pStack->end(); ++vi) {

        if(vi == pStack->end() - 1)
            return true;		//same ranks means valid set

        if(vi->Rank() != (vi + 1)->Rank())
            break;				//different rank, exit loop
    }

    for(VI vi = pStack->begin(); vi != pStack->end(); ++vi) {

        if(vi == pStack->end() - 1)
            break;//same suits, exit loop

        if( vi->Suit() != (vi + 1)->Suit() )
            return false;//different suits, not a valid set
    }

    int rank;
    for(VI vi = pStack->begin(); vi != pStack->end(); ++vi) {

        if(vi == pStack->end() - 1)
            return true;//ascending rank, valid set

        rank = (vi + 1)->Rank () - vi->Rank();

        if( rank != 1 )
            return false;//invalid set
    }
}
Ejemplo n.º 2
0
bool CDeck::FindValidSet(int const pIdx)
{
    if(PlayerHand[pIdx]->GetNumSelectedCards() > 0)
        return false; //should not select any

    CCardStack *Stack = PlayerHand[pIdx]->GetCardStack();

    int Idx = 0;
    for(VI vi = Stack->begin(); vi != Stack->end(); ++vi) {

        SDL_PumpEvents();
        int Rank = vi->Rank();
        int Suit = vi->Suit();

        int a = PlayerHand[pIdx]->FindCard(Rank + 1, Suit);
        int b = PlayerHand[pIdx]->FindCard(Rank + 2, Suit);
        int c = PlayerHand[pIdx]->FindCard(Rank - 1, Suit);
        int d = PlayerHand[pIdx]->FindCard(Rank - 2, Suit);

        int e[3];	//cards with same suit
        e[0] = PlayerHand[pIdx]->FindMoreSameRank(0, Rank, Suit);
        if(e[0] != -1) {

            e[1] = PlayerHand[pIdx]->FindMoreSameRank(e[0] + 1, Rank, Suit);
            if(e[1] != -1)
                e[2] = PlayerHand[pIdx]->FindMoreSameRank(e[1] + 1, Rank, Suit);
        }

        if(a != -1 && b != -1) {

            PlayerHand[pIdx]->SelectCard(Idx);
            PlayerHand[pIdx]->SelectCard(a);
            PlayerHand[pIdx]->SelectCard(b);
            return true;
        }

        if(a != -1 && c != -1) {

            PlayerHand[pIdx]->SelectCard(Idx);
            PlayerHand[pIdx]->SelectCard(a);
            PlayerHand[pIdx]->SelectCard(c);
            return true;
        }

        if(c != -1 && d != -1) {

            PlayerHand[pIdx]->SelectCard(Idx);
            PlayerHand[pIdx]->SelectCard(c);
            PlayerHand[pIdx]->SelectCard(d);
            return true;
        }

        if(e[0] != -1 && e[1] != -1) {

            PlayerHand[pIdx]->SelectCard(Idx);
            PlayerHand[pIdx]->SelectCard(e[0]);
            PlayerHand[pIdx]->SelectCard(e[1]);
            if(e[2] != -1)
                PlayerHand[pIdx]->SelectCard(e[2]);
            return true;
        }

        Idx++;
    }//end of for loop
    return false;
}