Deck of Cards
出处
Design the data structures for a generic deck of cards. Explain how you would subclass the data structures to implement blackjack.
Solution
Key point
- What's the meaning of genetic
Assume the deck is a standard 52-card set.
Design may be like this:
Code
public enum Suit {
Club(0), Diamond (1), Heart (2), Spade (3);
private int value;
private Suit(int v){ value = v;}
public int getValue() { return value; }
public static Suit getSuitFromValue(int value) {...}
}
public abstract class Card {
private boolean available = true;
protected int faceValue;
protected Suit suit;
public Card(int c, Suit s) {
faceValue = c;
suit = s;
}
public abstract int value();
public Suit suit() { return suit; }
// Checks if the card is available to be given out to someone
public boolean isAvailable() { return available; }
public void markUnavailable() { available = false; }
public void markAvailable() { available = true; }
}
public class Deck <T extends Card> {
private ArrayList<T> cards; // all cards, dealt or not
private int dealtIndex = 0; // marks first undealt card
public void setDeckOfCard(ArrayList<T> deckOfCards) {...}
public void shuffle() {...}
public int remainingCards(){
return cards.size() - dealtIndex;
}
public T[] dealHand(int number) {...}
public T dealCard() {...}
}
public class Hand <T extends Card> {
protected ArrayList<T> cards = new ArrayList<T>();
public int score() {
int score = 0;
for (T card : cards) {
score += card.value();
}
return score;
}
public addCard(T card) {
cards.add(card);
}
}