(Java)纸牌游戏逻辑

时间:2016-03-03 05:59:30

标签: java arraylist constructor

我正在努力创造一场战争纸牌游戏。然而,对于这个游戏,将会有一个名为“特朗普”的额外卡片堆。如果任何一个玩家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,我很确定这是因为我没有将任何东西传递到特朗普堆中。当我尝试为trump ArrayList输入一个int时,我会得到一个错误int cannot be converted to Card []

我怎样才能从52的牌组中获得前六张牌而不将它们作为参考存储起来,并将它们添加到王牌堆中?

此外,我是否正确宣布了player1,player2和cardpile?

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

2 个答案:

答案 0 :(得分:4)

您应该替换为:

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

你试图从空tCard获取卡片。

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

答案 1 :(得分:0)

卡类:

public class Card {
   Integer i = new Integer(0);
   Card(Integer is) {
    this.i = is;
   }
}

CardPile课程:

public class CardPile {
   ArrayList<Card> pile = null;
   public CardPile(Integer no)
   {
     pile = new ArrayList<Card>();
     for (int i=1; i<=no; i++) {
        pile.add(new Card(i));
     }
   }

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

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

TrumpWar类:

public class TrumpWar {
  protected CardPile tCard;
  protected CardPile cp;
  protected CardPile p1;
  protected CardPile p2;

  public TrumpWar( )
  {
    cp = new CardPile (52); // only passing the no of cards to be created.
    //cp.shuffle();
    tCard = new CardPile(52); // only passing the no of cards to be created.
    for (int i=1; i<7; i++)  
    {
        tCard.add(tCard.get(i));
    }

    // cp.shuffle();

    p1 = new CardPile(26);
    p2 = new CardPile(26);
  }

  public static void main(String a[]){
    new TrumpWar();
  }
}