package org.jboss.seam.example.poker;
import org.jboss.seam.annotations.Name;
import java.util.Queue;
import java.util.LinkedList;
import java.util.Set;
import java.util.Random;
import java.util.List;
import java.util.ArrayList;
import java.util.HashSet;
/**
* A deck of cards
*
* @author Shane Bryzak
*/
@Name("deck")
public class Deck
{
/**
* The cards remaining in the deck
*/
private Queue<Card> cards = new LinkedList<Card>();
/**
* The complete contents of the deck
*/
private Set<Card> contents;
/**
* Constructor, initialises the deck.
*
* @param contents Set The set of cards that the deck will contain
*/
public Deck(Set<Card> contents)
{
this.contents = contents;
reset();
}
/**
* Resets the deck to its original contents
*/
public void reset()
{
cards.clear();
cards.addAll(contents);
}
/**
* Shuffles the cards in the deck
*/
public void shuffle()
{
Random rnd = new Random(System.currentTimeMillis());
List<Card> tmp = new ArrayList<Card>();
while (!cards.isEmpty())
tmp.add(cards.poll());
while (!tmp.isEmpty())
cards.offer(tmp.remove(rnd.nextInt(tmp.size())));
}
/**
* Returns the number of cards remaining in the deck.
*
* @return int
*/
public int cardsRemaining()
{
return cards.size();
}
/**
* Remove the next card from the deck
*
* @return Card
*/
public Card remove()
{
return cards.poll();
}
}