我对编程还是很陌生,因此,我创建了一个Cards and Deck类,它工作得很好,但是Hand类是我遇到麻烦的地方。在驱动程序中,我必须问用户,将要有多少名玩家以及手中有多少张牌。这是到目前为止,我将尝试仅发布必要的代码以使其简短。

这是我的甲板课:

public class Deck
{

    private Cards [] deck;
    private int nextCard;


    public Deck()
    {
        deck = new Cards[52];
        int iCardCount=0;   // Holds how many cards have been created.
        for ( int suit = 0; suit <= 3; suit++ )
        {
            for ( int face = 1; face <= 13; face++ )
            {
                deck[iCardCount] = new Cards(iCardCount);
                iCardCount++;
            }
        }
        nextCard = 0;
    }


    public void shuffle ()
    {


        for ( int i = 0; i < deck.length; i++)
        {
            Random ran = new Random();
            int iRand = ran.nextInt(52);
            Cards temp = deck[i];
            deck[i] = deck[iRand];
            deck[iRand] = temp;
        }
        nextCard = 0;
    }


    public Cards dealACard ()
    {
        if (nextCard < 52)
        {
            System.out.println( deck[nextCard++]);
        }
        else
        {
            System.out.print("\nError, out of cards." );

        }
        return (null);
    }

    public Hand dealAHand (int n)
    {
        Hand deal = new Hand();
        String sHand = "";

        for (int i = 0; i < n; i++)
        {
            sHand += "" + dealACard();
        }
        return deal;
    }

}



对于dealAHand方法,我的讲师之前让我们使用过返回String的方法,但是现在我们已经创建了Hand类,她使我们将String更改为Hand,这使我陷入了循环。

这是我的手形课:

public class Hand
{
    private int handSize;           //how many cards in the hand
    private int cardsInHand;        //counter
    private Cards [] hand;

    public Hand ()
    {
        hand = new Cards[];
        handSize = 5;
        cardsInHand = 0;
    }

    public Hand (int handSize)
    {
        hand = new Cards [handSize];
        this.handSize = handSize;
    }

    public void addCard (Cards card)
    {
        if (cardsInHand >= handSize)
        {
            Cards[] temp = new Cards[hand.length*2];
            for (int i=0; i < cardsInHand; i++)
            {
                temp[i] = hand[i];
                hand = temp;
            }
        }

    }




我的问题是,当问用户要玩多少个玩家时,我是否要创建一个新的手牌对象?喜欢Hand player1 = new Hand ();吗?如果他们输入5个玩家怎么办?

另外,当我要问一手有多少张牌时,如果要有3位玩家,他们每手输入15张牌?我知道我将需要使用Do While循环,但是会在Hand类或驱动程序中完成吗?

我知道这很长,但是朝着正确的方向微移将不胜感激。

最佳答案

使用面向对象的对象可以为您提供帮助。

卡是物体吗?是的,因此您有一个Card对象。

手是物体吗?是的(您必须在具体和抽象之间进行思考。)因此,您有一个Hand对象。

如果您有多只手怎么办?
考虑一下您可以在哪里放置多个int值或多个Integer值。玩家会成为对象吗?

您是否希望驾驶员直接在手中迭代卡片?
如果没有,那将如何工作?您需要Hand做些什么来允许驱动程序遍历卡?

请记住面向对象的原则:封装等。

关于java - 实现我的副手和上课有困难,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29219049/

10-11 07:11