Cards.java
import java.awt.*;
import java.io.*;
import objectdraw.*;
// Cards manages the deck of cards used to play Pictionary. The file
// is a text file. Each line represents a different card.
public class Cards {
// Maximum deck size
private static final int MAX_DECK_SIZE = 20;
// The cards
private String[] cards = new String[MAX_DECK_SIZE];
// The number of cards in the deck.
private int numCards;
// The next card to return in the deck
private int next = 0;
// Construct a new Cards object. Ask the user for a file containg cards.
// Read in the cards to initialize the array. Shuffle the cards.
public Cards () {
// Set up the input stream.
File cardFile = getDeckFile();
try {
BufferedReader in = new BufferedReader (new FileReader (cardFile));
// -- Insert code here to read in the cards. Stop when readLine() returns null.
// -- Be sure numCards contains the number of cards in deck after reading.
// Shuffle the cards
shuffle();
} catch (FileNotFoundException e) {
// If the card file can't be found, just create a deck with one card.
cards[0] = "purple cow";
numCards = 1;
} catch (IOException e) {
// If we get an error reading the file, make sure the deck has at least one
// card and then suffle what we did read in.
if (numCards == 0) {
cards[0] = "purple cow";
numCards = 1;
} else {
shuffle();
}
}
}
// Using a file dialog, get the name of a file to load
// as the deck of cards. Return null if the user cancels the
// dialog box
private File getDeckFile() {
JFileChooser dialog = new JFileChooser();
File f = new File(".");
// Set the current directory to where we are
dialog.setCurrentDirectory(f);
// select the deck of cards
if (dialog.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
return dialog.getSelectedFile();
} else {
return null;
}
}
// Shuffle the cards
private void shuffle() {
RandomIntGenerator random = new RandomIntGenerator (0, numCards - 1);
// The indexes of the cards to swap
int first, second;
// Number of swaps to do in the shuffle
int numSwaps = 100;
// Temporary string for swapping
String temp;
// Swap pairs of random cards repeatedly to shuffle
for (int i = 0; i < numSwaps; i++) {
first = random.nextValue();
second = random.nextValue();
temp = cards[first];
cards[first] = cards[second];
cards[second] = temp;
}
}
// Returns the next card in the deck.
public String nextCard () {
String returnCard = cards[next];
next = (next + 1) % numCards;
return returnCard;
}
}