我有一个手牌,有很多牌。经销商将卡片交给我的手,我希望我的游戏能够显示用户当前拥有的卡片。这是游戏代码,在我的GameEngine
课程中我打印出手中的卡片。问题是它打印出整个套牌!这是打印输出:Your hand: [Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King] of Spades
。我只想要打印一张卡,而不是所有卡,所以在我的代码中搞砸了什么?
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;
}
答案 0 :(得分:1)
当您发牌时,不要将其添加到玩家手中。
答案 1 :(得分:0)
你的对象需要更好地反映它们所代表的性质:一副牌和一张牌都只是一组有序的牌,因此使用底层数组列表(或一个简单的数组)就可以了。 “交易”牌是将牌从牌组移动到牌上的行为,因此它应该是牌手对象作为参数处理的方法,例如: deck.dealTo(hand)
,或者返回一张卡并使用作业,例如hand.add(deck.deal())
。您现在的d.dealCard()
会从卡座上取下一张卡片并将其放在地板上。它也以一种奇怪的方式处理 - 我无法想象任何游戏,当甲板耗尽时你只需要洗牌新牌并继续交易!
同样,玩家对象应该包含对手对象的引用(或者可能没有,或者多于一个,具体取决于游戏),但是你没有交易玩家,你可以交易。此外,一些“手”可能根本不与玩家联系,例如在cribbage中的“crib”或德州扑克中的“棋盘”。