import edu.neu.ccs.*; import edu.neu.ccs.gui.*; import edu.neu.ccs.codec.*; import edu.neu.ccs.console.*; import edu.neu.ccs.filter.*; import edu.neu.ccs.jpf.*; import edu.neu.ccs.parser.*; import edu.neu.ccs.pedagogy.*; import edu.neu.ccs.quick.*; import edu.neu.ccs.util.*; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.font.*; import java.awt.image.*; import javax.swing.*; import javax.swing.border.*; import java.io.*; import java.util.*; import java.math.*; import java.beans.*; import java.lang.reflect.*; import java.net.*; import java.util.regex.*; public class CardFun extends DisplayPanel { String urlString = "http://www.ccs.neu.edu/jpt/images/jfitz_cards/"; ImagePaintableLite[] paintables = WebImageTools.readImagesAsPaintableLite(urlString,""); int decksize = 52; PaintableSequence sequence; public CardFun(int howmany, int shift) { this(howmany, shift, -1, -1); } public CardFun (int howmany, int shift, double width, double height) { sequence = randomCardSequence(howmany, shift); adjustBounds2D(width, height); addObject(sequence); frame("Card Fun"); } private void adjustBounds2D(double width, double height) { Rectangle2D bounds = sequence.getBounds2D(); double x = bounds.getMinX(); double y = bounds.getMinY(); double w = bounds.getWidth(); double h = bounds.getHeight(); if (width < w) width = w; if (height < h) height = h; x -= (width - w) / 2; y -= (height - h) / 2; bounds = new Rectangle2D.Double(x, y, width, height); sequence.setDefaultBounds2D(bounds); } public MutatableWrapper[] getShuffledDeck() { MutatableWrapper[] mutatables = new MutatableWrapper[paintables.length]; int[] indices = ProbStatTools.selectWithNoRepetition (decksize, decksize); for (int i = 0; i < decksize; i++) mutatables[i] = new MutatableWrapper (paintables[indices[i]]); return mutatables; } public TablePanel randomCardPanel(int howmany) { if (howmany > decksize) howmany = decksize; TablePanel panel = new TablePanel(1, howmany); MutatableWrapper[] mutatables = getShuffledDeck(); for (int i = 0; i < howmany; i++) panel.addObject(mutatables[i]); return panel; } public PaintableSequence randomCardSequence (int howmany, int shift) { if (howmany > decksize) howmany = decksize; PaintableSequence sequence = new PaintableSequence(); MutatableWrapper[] mutatables = getShuffledDeck(); for (int i = 0; i < howmany; i++) { mutatables[i].move(i * shift, 0); sequence.appendPaintable(mutatables[i]); } return sequence; } }