Java:扑克,发牌

时间:2018-09-24 22:45:34

标签: java

我在纸牌nextCard = deck.dealCard();中洗牌后,应在顶部抽出纸牌。问题在于它始终显示"ACE of DIAMONDS"(我认为是创建牌组时的第一张牌),而不是正确的牌,而且我的牌组仍然是相同大小(52)。但是,当我使用deck.dealCard();进行测试时,效果很好,我的牌组将升至51,并显示正确的卡片。如何修复nextCard?'

随机播放和填充甲板都被称为main,并且工作正常。 (它们不是问题)。如前所述,当我仅使用deck.dealCard();时,效果很好。

public class Game {
   Deck deck = new Deck();
   Pile pile = new Pile();

   Card nextCard;

   public void initNewGame(){
        //nextCard=null; //this don't help
        deck = new Deck();
        deck.fill();
        pile.clear();
   }     

    public Card pickNextCard(){
        nextCard = deck.dealCard();
        return nextCard;
    }
}

这是来自Deck班的:

public Deck(){
        theCards = new ArrayList<Card>();
        fill();
    }
public Card dealCard(){
        return theCards.remove(0);
}
public void shuffleCards(){
        Collections.shuffle(theCards);
    }
public void fill(){
        theCards.clear();
        for(Suit suit : Suit.values()){
            for(Rank rank : Rank.values()){
                theCards.add(new Card(rank, suit));
            }
            }
        }

这是主要的:

public static void main(String[] args) {
       Deck deck = new Deck();
       Pile pile = new Pile();
       Game game = new Game();
       deck.shuffleCards();

       System.out.println("\nLogic.CardNow: " + game.pickNextCard() +"\n");
}

1 个答案:

答案 0 :(得分:5)

之所以会这样,是因为您有两个甲板,而不是一个。

public static void main(String[] args) {
   Deck deck = new Deck(); // deck 1
   Pile pile = new Pile(); 
   Game game = new Game(); // contains another deck, deck 2
   deck.shuffleCards(); // deck 1 is now shuffled

   System.out.println("\nLogic.CardNow: " + game.pickNextCard() +"\n"); // deck 2 (NOT SHUFFLED)
}

您需要让game使用外部(经过改组的)牌组,或者需要对game内部的牌组进行改编。

最简单的选择是更新您的initGame方法来洗牌:

public void initNewGame(){
    deck = new Deck();
    deck.fill();
    deck.shuffleCards(); // shuffle your deck
    pile.clear();
}