Back to project page pokerCCF.
The source code is released under:
Copyright (c) 2011-2014, Intel Corporation Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redist...
If you think the Android project pokerCCF listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
// This file is part of the 'texasholdem' project, an open source // Texas Hold'em poker application written in Java. //// w w w . j av a2 s . com // Copyright 2009 Oscar Stigter // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package lo.wolo.pokerengine; import java.security.SecureRandom; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * A standard, generic deck of game cards without jokers. <br /> * <br /> * * <b>NOTE:</b> This class is implemented with the focus on performance (instead of clean design). * * @author Oscar Stigter */ public class Deck { /** The number of cards in a deck. */ private static final int NO_OF_CARDS = Card.NO_OF_RANKS * Card.NO_OF_SUITS; /** The cards in the deck. */ private Card[] cards; /** The index of the next card to deal. */ private int nextCardIndex = 0; /** Random number generator (crypographical quality). */ private Random random = new SecureRandom(); /** * Constructor. * * Starts as a full, ordered deck. */ public Deck() { cards = new Card[NO_OF_CARDS]; int index = 0; for (int suit = Card.NO_OF_SUITS - 1; suit >= 0; suit--) { for (int rank = Card.NO_OF_RANKS - 1; rank >= 0 ; rank--) { cards[index++] = new Card(rank, suit); } } } /** * Shuffles the deck. */ public void shuffle() { for (int oldIndex = 0; oldIndex < NO_OF_CARDS; oldIndex++) { int newIndex = random.nextInt(NO_OF_CARDS); Card tempCard = cards[oldIndex]; cards[oldIndex] = cards[newIndex]; cards[newIndex] = tempCard; } nextCardIndex = 0; } /** * Resets the deck. * * Does not re-order the cards. */ public void reset() { nextCardIndex = 0; } /** * Deals a single card. * * @return the card dealt */ public Card deal() { if (nextCardIndex + 1 >= NO_OF_CARDS) { throw new IllegalStateException("No cards left in deck"); } return cards[nextCardIndex++]; } /** * Deals multiple cards at once. * * @param noOfCards * The number of cards to deal. * * @return The cards. * * @throws IllegalArgumentException * If the number of cards is invalid. * @throws IllegalStateException * If there are no cards left in the deck. */ public List<Card> deal(int noOfCards) { if (noOfCards < 1) { throw new IllegalArgumentException("noOfCards < 1"); } if (nextCardIndex + noOfCards >= NO_OF_CARDS) { throw new IllegalStateException("No cards left in deck"); } List<Card> dealtCards = new ArrayList<Card>(); for (int i = 0; i < noOfCards; i++) { dealtCards.add(cards[nextCardIndex++]); } return dealtCards; } /** * Deals a specific card. * * @param rank * The card's rank. * @param suit * The card's suit. * * @return The card if available, otherwise null. * * @throws IllegalStateException * If there are no cards left in the deck. */ public Card deal(int rank, int suit) { if (nextCardIndex + 1 >= NO_OF_CARDS) { throw new IllegalStateException("No cards left in deck"); } Card card = null; int index = -1; for (int i = nextCardIndex; i < NO_OF_CARDS; i++) { if ((cards[i].getRank() == rank) && (cards[i].getSuit() == suit)) { index = i; break; } } if (index != -1) { if (index != nextCardIndex) { Card nextCard = cards[nextCardIndex]; cards[nextCardIndex] = cards[index]; cards[index] = nextCard; } card = deal(); } return card; } /** {@inheritDoc} */ @Override public String toString() { StringBuilder sb = new StringBuilder(); for (Card card : cards) { sb.append(card); sb.append(' '); } return sb.toString().trim(); } }