/** Card.java - Card class * Should we have a 'finished' attribute to indicate that the card is in its * final position, or should this detail be left elsewhere? */ public class Card { private char denom; private char suit; // default constructor for blank card on the board // this is not null - null is used when there are no cards left in a shuffle public Card() { denom = ' '; suit = ' '; } public Card(char d, char s) { denom = d; suit = s; } public Card(Card c) { denom = c.denom; suit = c.suit; } public char getDenom() { return denom; } public char getSuit() { return suit; } // useful for finding dead spaces on the board - first find the kings public boolean isKing() { return denom == 'K'; } public boolean isBlank() { return denom == ' '; } public String toString() { return denom + "-" + suit; } public boolean equals(Card c) { return denom == c.denom && suit == c.suit; } /** Find this card's successor. If it's already a king, return null. */ public Card succ() { if (denom == 'K') return null; char newSuit = suit; char newDenom; switch(denom) { case 'A': newDenom = '2'; break; case '9': newDenom = 'T'; break; case 'T': newDenom = 'J'; break; case 'J': newDenom = 'Q'; break; case 'Q': newDenom = 'K'; break; default : newDenom = (char) (1 + denom); } return new Card(newDenom, newSuit); } /** Similarly, the predecessor. I'm not sure which function will be more useful. * Note - we return null in the case of an ace which has no predecessor. */ public Card pred() { if (denom == 'A') return null; char newSuit = suit; char newDenom; switch(denom) { case '2': newDenom = 'A'; break; case 'T': newDenom = '9'; break; case 'J': newDenom = 'T'; break; case 'Q': newDenom = 'J'; break; case 'K': newDenom = 'Q'; break; default : newDenom = (char) (denom - 1); } return new Card(newDenom, newSuit); } }