T.Woody
T.Woody

Reputation: 1228

Card Game in Java: Creating a "hand of cards"

I would like to first say that this is not homework, but a pet project that I am working on in Java to better understand a complete Java program, and will hopefully be my first attempt at making my own GUI.

That aside, I have a question about creating a hand of cards from my current code. As it stands, I have a main class called DummyRummy, a class for creating cards, a class that creates a standard deck of cards (which includes Jokers and "shuffles" the deck when a new deck is created), and a PlayerHands class. I am strictly working with ArrayLists for all of the code, and the PlayersHands class should return two ArrayLists that will be used. However, when I try to call the PlayerHands() method in the public static void main(), PlayerHands cannot be located for some reason... Here is the code for PlayerHands:

package dummyrummy;
public class PlayerHands {
    private Card[] playerOneCards;
    private Card[] playerTwoCards;
    private int[] value;

    PlayerHands(deck d, int round)
    {
        value = new int[round+3];
        playerOneCards = new Card[round+2];
        playerTwoCards = new Card[round+2];
               //(round+2) is the handsize at any given time
        for (int x=0; x<round+3; x++)
        {
        playerOneCards[x] = d.drawFromDeck(); //fills up one hand.
        playerTwoCards[x] = d.drawFromDeck(); //fills up second hand.
        }
    }
}

Here is the DummyRummy class.

package dummyrummy;
import java.util.*;
public class DummyRummy {
    public static void main(String[] args) {
        deck testDeck;
        testDeck = new deck();

        System.out.println(testDeck.getTotalCards());
        System.out.println(testDeck.getClass());
        int round = 1;
        PlayerHands(testDeck, round); //This is where the error is occurring        
        }//End of arguments
    }//End of DummyRummy class

Here is the Card class:

package dummyrummy;
public class Card
{
    private short rank, suit;
    private static String[] suits = { "Hearts", "Spades", "Diamonds", "Clubs", "Joker"    };
    private static String[] ranks = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };
    private static String[] jokers = {"Joker", "Joker"};
    private static String[] ranks2 = {"0", "0"};
    public static String rankAsString( int __rank ) {
        if (__rank != 0){
            return ranks[__rank];
        }//End of if statement
        return ranks2[__rank];
    }//End of rankAsString class

    Card(short suit, short rank)
    {
        this.rank=rank;
        this.suit=suit;    
    }//End of Card Initializer

    public @Override String toString()
    {
        if(suit == 5){
            return "Joker";
        }//End of if statement that calls jokers
        if(rank == 0){
            return "Joker";
        }
        return ranks[rank] + " of " + suits[suit];              
    }//End of toString method

    public short getRank() {
         return rank;
    }//End of getRank method

    public short getSuit() {
        return suit;
    }//End of getSuit method
}//End of Card

And finally, here is the deck() class:

package dummyrummy;
import java.util.Random;
import java.util.ArrayList;

public class deck {
    private ArrayList<Card> cards;
    deck()
    {
        cards = new ArrayList<Card>();
        int index_1, index_2;
        Random generator = new Random();
        Card temp;

       short jokerSuit=5;
       short jokerRank = 0;
           cards.add(new Card(jokerSuit, jokerRank));
           cards.add(new Card(jokerSuit,jokerRank));
        for (short suit=0; suit<=3; suit++)
        {
             for (short rank=0; rank<=12; rank++)
             {
                  cards.add(new Card(suit,rank));
             }
        }//End of for-loop       
        int deckSize = 54;             
        for (int i=0; i<1000; i++)
        {
            index_1 = generator.nextInt( cards.size() );
            index_2 = generator.nextInt( cards.size() );
            temp = cards.get( index_2 );                    
            cards.set( index_2 , cards.get( index_1 ) );
            cards.set( index_1, temp );
        }//End of for-loop
    }//End of deck()
    public Card drawFromDeck()
    {
    /*
     * This method removes the top card of the already shuffled deck.          
     * The next step to take with this class is put the drawn card into another
     *     array that represents a players hand.  
     * This will take two arrays, and must be called depending on what player   'drawsFromDeck'.
     */        
        return cards.remove( 0 );
    }//End of drawFromDeck()
    public int getTotalCards()
    {
        return cards.size();   
    }//End of getTotalCards()
}//End of class deck

Thank you for your time, and I appreciate any help that may come. I would also be more than happy to provide my other code, if necessary.

EDIT: I have added the class and package above.

Upvotes: 1

Views: 32192

Answers (2)

The Guy with The Hat
The Guy with The Hat

Reputation: 11132

PlayerHands(deck d, int round) is not a method, it is a constructor.

To correctly get the two hands, you can use this code:

    ...
    int round = 1;
    PlayerHands playerHands = new PlayerHands(testDeck, round); //This creates a new instance of the PlayerHands class
    //access the players' hands like this:
    Card[] player1Hand = playerHands.playerOneCards; //sets "player1Hand" to the "Card[] playerOneCards" contained in "playerHands"
    Card[] player2Hand = playerHands.playertwoCards; //sets "player2Hand" to the "Card[] playerTwoCards" contained in "playerHands"

    }//End of arguments
}//End of DummyRummy class

Upvotes: 0

fabian
fabian

Reputation: 82531

PlayerHands(deck, int) is a constructor. Therefore you have to call it like this (in class DummyRummy):

new PlayerHands(testDeck, round);

And since i guess you want to work with the instance you created, you should save the reference to a variable:

PlayerHands playerHands = new PlayerHands(testDeck, round);

Upvotes: 2

Related Questions