Hello, I have an assignment for my summer class. FYI, I'm super new to programming in general and this is my first time with java and it's a summer class so it's going super fast (please be nice!) lol.
Basically I started writing my code in one class, then I split it up into a Card class and a DeckOfCards class and I now need to figure out how to get it all to work together. I get a little confused with calling methods sometimes, especially when separate classes are in play. I think I just need a method to deal out . Besides getting it all working together correctly. I'm also having trouble creating the method to deal out five cards that also tells how many cards are left in the deck and I believe I need a toString method but I honestly do not know how to go about that. Any help is greatly appreciated! If you could help explain things too that would be awesome! I think I have everything SO FAR correct but I could be wrong and I'm sure there are better ways to write the code, I'll take any suggestions for a cleaner look too. FYI, I think the prof would rather arrays then enums since we're dealing with arrays right now hence the array for the 52 card deck.
Here are the directions...
Design and implement a class called Card that represents a standard playing card. Each card has a suit and a face value. Then create a class called DeckOfCards that stores 52 objects of the Card class. Include methods to shuffle the deck, deal a card and report the number of cards left in the deck. The shuffle methods should assume a full deck. Create a driver class (CardsGame) with a main method that deals five cards from the shuffled deck, printing each card as it is dealt. Make sure to write the appropriate constructors, getters, setters, toString and other methods as required for both classes.
The main class, CardsGame Class
import java.util.Scanner; public class CardsGame { public static void main (String [] args) { DeckOfCards deck = new DeckOfCards(); //call shuffle deck.shuffle(); } }
Card Class
class Card { public static final int SPADE = 4; public static final int HEART = 3; public static final int CLUB = 2; public static final int DIAMOND = 1; private int rank; private int suit; private static final String[] Suit = {"Hearts", "Clubs", "Spades", "Diamonds"}; private static final String[] Rank = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"}; private int cardSuit; private int cardRank; public Card(int suit, int rank) { if (rank == 1) cardRank = 14; // Give Ace the rank 14 else cardRank = (int) rank; cardSuit = (int) suit; } public int suit() { return this.cardSuit; } public String suitStr() { return(this.Suit[ this.cardSuit ]); } public int rank() { return this.cardRank; } public String rankStr() { return ( Rank[ cardRank ] ); } public String toString() { return ( Rank[ cardRank ] + Suit[ cardSuit ] ); } }
DeckOfCards Class
class DeckOfCards { public static final int NEWCARDS = 52; private Card[] deckOfCards; // Contains all 52 cards private int currentCard; // deal THIS card in deck public DeckOfCards( ) { deckOfCards = new Card[NEWCARDS]; int i = 0; for ( int suit = Card.DIAMOND; suit <= Card.SPADE; suit++ ) for ( int rank = 1; rank <= 13; rank++ ) deckOfCards[i++] = new Card(suit, rank); currentCard = 0; } //shuffle(n): shuffle the deck public void shuffle(int n) { int i, j, k; for ( k = 0; k < n; k++ ) { i = (int) ( NEWCARDS * Math.random() ); // Pick 2 random cards j = (int) ( NEWCARDS * Math.random() ); // in the deck? //swap these randomly picked cards Card temp = deckOfCards[i]; deckOfCards[i] = deckOfCards[j]; deckOfCards[j] = temp; } currentCard = 0; // Reset current card to deal } }