I have these three classes:
Card.java:
Deck.java:Code:import java.awt.*;
public class Card implements Comparable
{
public static final int LOW_RANK = 0,
HIGH_RANK = 51;
private int rank; //0..51
private int value; //face value 2, 3, ..., 10, 11(jack), 14(ace)
private int suit; //0=club,1=dia, 2=heart,3=spade
private Image faceImg; //face-up image
private boolean faceUp; //true when face-up
//Constructor
//Pre: none
//Post: Card has been initialized with rank, value & suit, face up
public Card (int rank)
{
this.rank = rank;
suit = rank / 13; //gives number in 0..3
value = 2 + rank % 13; //gives number in 2..14
faceUp = true;
}//end constructor
//Pre: Card has been initialized
//Post: Card is turned face up
public void turnUp()
{
faceUp = true;
}
//Pre: Card has been initialized
//Post: Card is turned face down
public void turnDown()
{
faceUp = false;
}
//Pre: Card has been initialized
//Post: Card's image is set to img
public void setImage (Image img)
{
faceImg = img;
}
//Pre: Card has been initialized
//Post: Returns face image of card if it is face up;
// Returns null if face down
public Image toImage()
{
Image img;
if (faceUp)
img = faceImg;
else
img = null; //no image
return img;
}//end toImage
/* Pre: Card has been initialized
* Post: compareTo(obj) returns
* -1 if (obj1 < obj2)
* 0 if (obj1 == obj2)
* 1 if (obj1 > obj2)
*/
public int compareTo(Object obj)
{
//Cast obj into a Card reference
int objRank = ((Card)obj).rank;
int returnVal;
if (this.rank < objRank)
{
returnVal = -1;
}
else if (this.rank == objRank)
{
returnVal = 0;
} else {
returnVal = 1;
}
return returnVal;
}//end compareTo
/* toString() returns a two-character representation of the card.
* e.g., 2C means 2 of clubs.
* Algorithm: the instance variables, suit and value, are
* used as indexes into the literal strings that store the letters
*/
public String toString()
{
return "" + "??23456789tjqka".charAt(value) + "cdhs".charAt(suit);
}//end toString
}//end Card class
CardApplet.java:Code:import java.awt.*;
public class Deck
{
public int NCARDS = 52;
public Card deck[] = new Card[NCARDS];
private int top;
private Image cardBack;
public Deck(CardApplet a)
{
cardBack = a.cardImage("back");
a.showStatus("Please wait while card images are loading. ");
// Make the cards
for (int k = 0; k < deck.length; k++)
{
deck[k] = new Card(Card.LOW_RANK + k);
// Get the card's image
Image img = a.cardImage(deck[k].toString());
deck[k].setImage(img);
}// for()
}// Deck()
public Card dealOneCard(boolean faceUp)
{
// Get the top card
Card topCard = deck[top];
// Flip it
if (faceUp)
{
topCard.turnUp();
} else {
topCard.turnDown();
}// if()
// top is new top card
top = (top + 1) % NCARDS;
// deal it
return topCard;
}// dealOneCard()
public Image getImage()
{
}// getImage()
public void shuffleDeck()
{
// Put all the used cards back into the deck, and shuffle it into
// a random order.
for ( int i = 26; i > 0; i-- )
{
int rand = (int)(Math.random()*(i+1));
Card temp = deck[i];
deck[i] = deck[rand];
deck[rand] = temp;
}
}// shuffleDeck()
public void sortDeck(Comparable arr[])
{
Comparable temp;
int n, pass;
boolean done;
n = arr.length;
pass = 1;
done = false;
while ( (pass < n) && (!done) )
{
done = true;
for (int i = 0; i < n - pass; i++)
{
if (arr[i].compareTo(arr[i+1]) > 0)
{
temp = arr[i]; //Swap two positions
arr[i] = arr[i+1];
arr[i+1] = temp;
done = false; //made a swap, might not be done
}//end if
}//end for
pass++;
}//end while
}// sortDeck()
}// Deck
My problem is, I cannot figure out what to do for the paint method of the CardApplet class. I am supposed to paint a string version of the cards (2C would be 2 of clubs) to the applet window and then test to see if I can shuffle, sort and hide the cards. The Card.toString() method returns the string version of the cards, but how do I put them together and display?Code:import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class CardApplet extends Applet implements ActionListener
{
// Declare GUI components
private Button sortButton = new Button("Sort");
private Button shuffleButton = new Button("Shuffle");
private Button showButton = new Button("Hide cards");
// Initialize deck and create instance variables
public Deck deck;
private boolean faceUp;
public void init()
{
// Add ActionListener
sortButton.addActionListener(this);
shuffleButton.addActionListener(this);
showButton.addActionListener(this);
// Add components
add (sortButton);
add (shuffleButton);
add (showButton);
// Set the applet's size
setSize(600,610);
}// init()
public void paint(Graphics g)
{
}// paint()
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == sortButton)
{
Deck.sortDeck(deck);
}
else if (e.getSource() == shuffleButton)
{
Deck.shuffleDeck(deck);
}
else if (e.getSource() == showButton)
{
faceUp = false;
}
}// actionPerformed()
public Image cardImage(String s)
{
}// cardImage()
}
My second problem is the Deck.sortDeck(deck) type calls, they are giving me an non-applicable error.
I am still working on the showButton button and the Image() methods..that's why they are left incomplete.
