关于课程:我的Java扑克游戏中的每个玩家都使用他们自己的套牌

Each Player in my Java Poker Game uses their own deck

你好,我正在尝试创建一个电子扑克游戏。这是到目前为止我所拥有的内容的一部分(为了节省空间,我没有包括枚举、导入、变量、ToString等):

我的卡类定义了我们的卡:

1
2
3
4
5
public Card(Value value, Suit suit) {

    this.value = value;
    this.suit = suit;
}

我的deck类创建52张牌组,并返回draw()方法中的5张牌:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
private ArrayList<Card> deck = new ArrayList<Card>();
private ArrayList<Card> hand = new ArrayList<Card>();
private final int HANDSIZE = 5;

public Deck() {

    for(Suit suit : Suit.values()) {
        for(Value value : Value.values()){
            Card card = new Card(value, suit);
            deck.add(card);
        }
    }
}

public ArrayList<Card> draw() {

    Random rng = new Random();

    for(int i = 0; i < HANDSIZE; i++){
        int getCard = rng.nextInt(deck.size());
        Card addCard = deck.get(getCard);
        hand.add(addCard);
        deck.remove(getCard);
    }

    return hand;
}

我的玩家课程让我们提供关于玩家的信息。

1
2
3
4
5
6
7
8
9
10
public class Player extends Deck {

    private String name;
    private int chips;

    public Player(String name, int chips) {

        this.name = name;
        this.chips = chips;
    }

问题是每个玩家都使用自己的牌组,因此有时两个或更多不同的玩家可能拥有相同的牌。我的问题是如何设置我的程序让每个玩家使用相同的牌组?谢谢。

输出示例:

Name: John Doe, Cash: 500
[Jack of Hearts, Ten of Hearts, Two of Diamonds, Ace of Clubs, Nine of Diamonds]

Name: Jane Doe, Cash: 500
[King of Spades, Two of Diamonds, Jack of Hearts, Ace of Spades, Seven of Diamonds]


不要让玩家类扩展甲板。这基本上是让玩家使用自己(在某种程度上),而你是让他们自己"拥有"一副牌。因此,需要单独使用deck类。

通过播放器构造函数中的deck实例,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
public class Player {

    private String name;
    private int chips;
    private Deck deck;

    public Player(String name, int chips, Deck deck) {
        this.name = name;
        this.chips = chips;
        this.deck = deck;
    }
}


如果没有其他方便的地方存放您的甲板,您可以使用单件模式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private ArrayList<Card> deck = new ArrayList<Card>();
private final int HANDSIZE = 5;

private static Deck deck = new Deck();

public static Deck getInstance() {
  return deck;
}

// Private Constructor
private Deck() {

    for(Suit suit : Suit.values()) {
        for(Value value : Value.values()){
            Card card = new Card(value, suit);
            deck.add(card);
        }
    }
}

public ArrayList<Card> draw() {

    Random rng = new Random();
    ArrayList<Card> hand = new ArrayList<Card>();
    for(int i = 0; i < HANDSIZE; i++){
    int getCard = rng.nextInt(deck.size());
    Card addCard = deck.get(getCard);
    hand.add(addCard);
    deck.remove(getCard);
    }

    return hand;
}

}

玩家从甲板上抽签:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Player {

    private String name;
    private int chips;

    public Player(String name, int chips) {

        this.name = name;
        this.chips = chips;
    }

    public ArrayList<Card> draw() {
        Deck.getInstance().draw()
    }


所以我将创建5*随机整数的玩家数。然后把它分成五组,到牌堆里去寻找那些编号的牌。例如,0是黑桃的2,13是三叶草的2,14是三叶草的E.T.C.同样,你必须重复这个过程,直到你得到一个没有杜普卢卡斯的清单