2013-07-03 73 views
-2

我有一個手牌類,有一定數量的牌。經銷商向我的手牌發放一張牌,我希望我的遊戲能夠顯示用戶目前擁有的牌。這裏是我的GameEngine課程中的遊戲代碼,我在手中打印出卡片。問題是它打印出整個卡組!這是打印出來的:Your hand: [Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King] of Spades。我只想要它打印一張卡片,而不是所有的卡片,所以我的代碼中搞砸了什麼?BlackJack爪哇:手印錯誤

public void beginCardDeal() { 
    for (int x = 0; x < 2; x++) { 
     System.out.print("\nDealer is dealing a card. . . \n"); 
     d.dealCard(); 
     System.out.println("\nYour hand: " + pl.getMyCards()); 
    } 
} 

pl是Player類的一個實例,因爲玩家有一隻手。 d是Deck的一個實例。

public class Player extends Person { 

private Hand myCards = new Hand(); 
private int playerCashAmount = 100; 

public Player() { 

} 

public Player(String name) { 
    this.name = name; 
} 

public String getName() { 
    return super.getName(); 
} 

public int getPlayerCashAmount() { 
    return playerCashAmount; 
} 

public void setPlayerCashAmount(int playerCashAmount) { 
    this.playerCashAmount = playerCashAmount; 
} 

public Hand getMyCards() { 
    return myCards; 
} 

public void setMyCards(Hand myCards) { 
    this.myCards = myCards; 
} 

而且,這裏是我的Deck類:

public class Deck { 

private ArrayList<Card> deck = new ArrayList<Card>(); 
private List<Card> cardUsed = new ArrayList<Card>(); 

int numCards = 0; 

public Deck(int numCards) { 
    this.createDeck(numCards, 4); 
} 

private void createDeck(int numCards, int numSuits) { 
    deck = new ArrayList<Card>(); 
    cardUsed = new ArrayList<Card>(); 
    if ((numCards % numSuits) > 0) return; 
    for (int i=0; i < numSuits; i++) { 
     for(int j=1; j <= (numCards/numSuits); j++) { 
      deck.add(new Card(new Suit(i), j)); 
     } 
    } 
} 

public Card dealCard() { 
    Card dealtCard = null; 
    if (deck.size() == 0){ 
     deck.addAll(cardUsed); 
     this.shuffle(); 
     cardUsed = new ArrayList<Card>(); 
    } 

    dealtCard = deck.get(0); 
    deck.remove(0); 
    cardUsed.add(dealtCard); 

    return dealtCard; 
} 

public void shuffle() { 
    Collections.shuffle(deck); 
} 

public ArrayList<Card> getDeck() { 
    return deck; 
} 

public void setDeck(ArrayList<Card> deck) { 
    this.deck = deck; 
} 

public int getNumUsedCards() { 
    return cardUsed.size(); 
} 

public List<Card> getCardUsed() { 
    return cardUsed; 
} 

public void setCardUsed(List<Card> cardUsed) { 
    this.cardUsed = cardUsed; 
} 

編輯:

public class Hand { 

int total = 0; 
private ArrayList<Card> hand = new ArrayList<Card>(); 

public Hand(){ 

} 

public String toString(){ 
    //Suit s = new Suit(total); 
    //Card c = new Card(s, total); 
    //return (Arrays.toString(c.getCardRanks())) + " of " + s.getSuitName(); 
    return Arrays.toString(hand.toArray()); 
} 

public boolean discardHand(){ 
    if (hand.isEmpty()) { 
     hand = new ArrayList<Card>(); 
    } 
    return false; 
} 

public void addCard(Card c) { 
    this.hand.add(c); 
} 

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

public int handCardCount(){ 
    return hand.size(); 
} 

public int getTotal() { 
    return total; 
} 

public void setTotal(int total) { 
    this.total = total; 
} 

public ArrayList<Card> getHand() { 
    return hand; 
} 

public void setHand(ArrayList<Card> hand) { 
    this.hand = hand; 
} 
+2

你的'Hand'類在哪裏? –

+0

我們需要看手類,以及這些類如何相互作用來回答這個問題。 –

+0

它的責任是什麼? – user573215

回答

0

你的對象需要更好地反映它們所代表的屬性:甲板和手都是一組有序的牌,所以使用底層數組列表(或簡單的數組)是很好的。 「處理」一張牌是將一張牌從甲板上移到一隻手上的行爲,所以它應該是甲板上的一個方法以手作爲參數來處理。 deck.dealTo(hand),或者退回卡並使用分配,例如, hand.add(deck.deal())。你現在的d.dealCard()從甲板上取出一張牌並將其扔到地板上。它也以一種奇怪的方式進行交易 - 我無法想象任何一場比賽,當甲板耗盡時,你只需洗牌新甲板並繼續交易!同樣,玩家對象應該包含一個對手對象的引用(或者可以不是,或者不止一個,取決於遊戲),但是你不會對玩家產生交易,而是交易給玩家。也有些「手」根本不可能與玩家聯繫在一起,比如捲餅上的「嬰兒牀」或德州撲克中的「棋盤」。

1

當你處理一張卡,你不把它添加到球員手中。

+0

我應該在'Player'中做一個addCardToHand函數嗎? – DarkZal

+0

對於我來說,在dealCard()方法中,你從來沒有真正將髮卡添加到Hand類的實例 –

+0

並且是的,我認爲最好在Player類中添加addCardToHand方法,並在dealCard()方法。 –