Drawer.javaTopGuesser.javaCards.java

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;
   }
}

Drawer.javaTopGuesser.javaCards.java