我正在尝试制作纸牌战争。但是,对于此游戏,将有一个名为“王牌”的额外纸牌堆。如果玩家1或2拥有一张在王牌堆中引用的牌,则无论其排名如何,它都是自动获胜。此刻,我坚持逻辑。

在称为CardPile的类中,这里是构造函数和方法。

public CardPile(Card[ ] initialCards)
{
    pile = new ArrayList<Card>();
    for (int i=0; i<initialCards.length; i++)
        pile.add(initialCards[i]);
}

public void add(Card aCard)
{
    pile.add(aCard);
}

public Card get(int index)
{
    return pile.get(index);
}


在我称为TrumpWar的课程中

protected CardPile tCard;
protected CardPile cp;
protected CardPile p1;
protected CardPile p2;

public TrumpWar( )
{
    cp = new CardPile (new Card[52]);
    cp.shuffle();

    tCard = new CardPile ();
    for (int i=1; i<7; i++)  //<---Stuck.
        {
             tCard.add(tCard.get(i)); //<---error
        }

    cp.shuffle();

    p1 = new CardPile(new Card [26]);
    p2 = new CardPile(new Card [26]);
}


当我运行游戏时,我得到一个NullPointerException,我可以肯定这是因为我没有将任何东西传递给王牌堆。当我尝试为王牌ArrayList输入int时,会出现错误int cannot be converted to Card []

我如何才能从52张牌中获得前六张牌,而又不将它们存储为参考并将其添加到王牌堆中而将其删除呢?

此外,我是否正确声明了player1,player2和cardpile?

非常感谢您的帮助,谢谢。

最佳答案

您应该替换为:

for (int i=0; i<6; i++)
    {
         tCard.add(cp.get(i));
    }


您试图从空的tCard中获取卡片。

请注意,直到您调用cp = new CardPile(array)(其中数组实际包含非null的卡片)之前,此代码仍然无法使用。否则,tCard.add(cp.get(0))不会将引用添加到第一张卡,而只是null

10-08 09:33