Exemple #1
0
/** Extract and return a specific Card.
 * Remove or split the Card in the Deck, and return a new Card.
 * If there is no Card with that value, NULL is returned.
 * If n is bigger than [Card in the Deck]->getCount(), NULL is returned.
 * @param value     value of the Card
 * @param n         number of different suits (cards inside the Card)
 * @return a new Card
 * @see Deck::extract(Card *c)
 * @see Deck::extractRandom()
 */
Card *Deck::extract(int value,int n)
{
    Card *requested;
    list<Card *>::iterator it;
    for(it=m_cards.begin(); it!=m_cards.end(); it++)
    {
         if((*it)->getValue()==value)
         {
            requested=(*it);
            if(requested->getCount()<n)
            {
                cerr <<"Error: invalid n value. requested is: " <<requested->getShortName() <<endl;
                return NULL;
            }

            if(requested->getCount()==n)
                requested=extract(requested);
            else
                requested=requested->divide(n);

            return requested;
         }
    }
    cerr <<"Cannot find card: " <<value <<" x" <<n <<" in this Deck:" <<endl;
    print(true);
    return NULL;
}