package game.deck;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.biotools.meerkat.Card;
import com.biotools.meerkat.Hand;
/**
* a true random deck
*/
public class RandomDeck implements Deck {
private SecureRandom random = new SecureRandom();
private List<Card> unshuffledDeck = new ArrayList<Card>();
/**
* @return a factory for RandomDecks
*/
public static DeckFactory createFactory() {
return new DeckFactory() {
@Override
public Deck createDeck() {
return new RandomDeck();
}
};
}
/**
* we take the first 5 cards as community cards, all the following cards are
* for the players
*/
private List<Card> shuffledDeck = new ArrayList<Card>();
public RandomDeck() {
for (int i = 0; i < 52; i++) {
unshuffledDeck.add(new Card(i));
}
unshuffledDeck = Collections.unmodifiableList(unshuffledDeck);
nextGame();
}
@Override
public Card getCommunityCard(int communityCardNumber) {
if (communityCardNumber < 0 || communityCardNumber > 4) {
throw new IllegalStateException("communitycardnumber not in rang 0-4");
}
return shuffledDeck.get(communityCardNumber);
}
@Override
public Hand getPlayerCards(int seat) {
Hand hand = new Hand();
// skip community-cards
int skip = 5;
hand.addCard(shuffledDeck.get(seat * 2 + skip + 0));
hand.addCard(shuffledDeck.get(seat * 2 + skip + 1));
return hand;
}
@Override
public void nextGame() {
shuffledDeck = new ArrayList<Card>(unshuffledDeck);
Collections.shuffle(shuffledDeck, random);
}
}