package com.adamnickle.deck.Game;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class CardCollection
{
public enum SortingType
{
SORT_BY_RANK,
SORT_BY_SUIT,
SORT_BY_CARD_NUMBER,
}
private ArrayList< Card > mCards;
public CardCollection()
{
mCards = new ArrayList< Card >( Deck.CARD_COUNT );
resetCards();
}
public void resetCards()
{
mCards.clear();
for( int i = 0; i < Deck.CARD_COUNT; i++ )
{
mCards.add( new Card( i ) );
}
}
public Card[] getCards()
{
return mCards.toArray( new Card[ mCards.size() ] );
}
public int getCardCount()
{
return mCards.size();
}
public boolean addCard( Card card )
{
if( mCards.size() < Deck.CARD_COUNT && !mCards.contains( card ) )
{
mCards.add( mCards.size(), card );
return true;
}
return false;
}
public Card removeTopCard()
{
return removeCard( 0 );
}
public boolean removeCard( Card card )
{
return mCards.remove( card );
}
public Card removeCard( int index )
{
return mCards.remove( index );
}
public void shuffle()
{
Card card;
int index;
for( int i = 0; i < getCardCount(); i++ )
{
index = Deck.RANDOM.nextInt( getCardCount() );
card = mCards.get( i );
mCards.set( i, mCards.get( index ) );
mCards.set( index, card );
}
}
public void sort( SortingType sortingType )
{
Collections.sort( mCards, new Card.CardComparator( sortingType ) );
}
public String toString()
{
StringBuilder ret = new StringBuilder();
Iterator< Card > cards = mCards.iterator();
Card card;
while( cards.hasNext() )
{
card = cards.next();
ret.append( card.toString() );
if( cards.hasNext() )
{
ret.append( "\n" );
}
}
return ret.toString();
}
}