Player.java
This is the syntax highlighted version of Player.java
from 3.3 Modular Programming of
Introduction to Computer Science by
Robert Sedgewick and Kevin Wayne.
/*************************************************************************
* Compilation: javac Player.java Card.java
* Execution: java -classpath .:cards.jar Player
*
* Implement a player that holds a pile of cards.
*
* % java Player
* North 7C 6D JS
*
*************************************************************************/
public class Player {
final static int MAX_CARDS = 52;
private Card[] cards; // the cards
private int N; // number of cards
private int x, y; // location to draw piles
private String name; // player's name
public Player(String name, int x, int y) {
this.name = name;
this.x = x;
this.y = y;
this.N = 0;
this.cards = new Card[MAX_CARDS];
}
public void dealTo(Card c) { cards[N++] = c; }
// insertion sort cards in descending order
public void sort() {
for (int i = 0; i < N; i++) {
for (int j = i; j > 0; j--) {
if (cards[j-1].less(cards[j])) {
Card swap = cards[j];
cards[j] = cards[j-1];
cards[j-1] = swap;
}
}
}
}
// draw the pile of cards, with the first one centered at (x, y)
public void draw() {
StdDraw.go(x, y);
for (int i = 0; i < N; i++) {
cards[i].drawFront();
StdDraw.goForward(17); // 17 seems like a good intercard distance
}
}
public String toString() {
String s = name + " ";
for (int i = 0; i < N; i++)
s = s + cards[i] + " ";
return s;
}
// calculate points in a bridge hand
public int points() {
int sum = 0;
// calculate high card points (Ace = 4, King = 3, Queen = 2, Jack = 1)
for (int i = 0; i < N; i++) {
int rank = cards[i].rank();
if (rank == 12) sum = sum + 4;
else if (rank == 11) sum = sum + 3;
else if (rank == 10) sum = sum + 2;
else if (rank == 9) sum = sum + 1;
}
// calculate points for suits with 0 or 1 card
int[] suits = new int[4];
for (int i = 0; i < N; i++)
suits[cards[i].suit()]++;
for (int j = 0; j < 4; j++) {
if (suits[j] == 0) sum = sum + 2;
else if (suits[j] == 1) sum = sum + 1;
}
return sum;
}
// test client
public static void main(String[] args) {
Player N = new Player("North", 375, 650);
N.dealTo(new Card(17));
N.dealTo(new Card(5));
N.dealTo(new Card(48));
// sort by suit, and then rank
N.sort();
System.out.println(N);
}
}
Last updated: Wed Jun 30 15:42:30 EDT 2004
.
Copyright © 2004, Robert Sedgewick and Kevin Wayne.