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

时间:2014-07-23 01:37:47

标签: java class duplicates poker

您好我正在尝试制作视频扑克游戏。这是我到目前为止的一部分(我没有包含枚举,导入,变量,toStrings等,以节省空间):

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

public Card(Value value, Suit suit) {

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

My Deck课程创建了一个52张牌组,并以draw()方式返回5张牌:

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;
}

我的播放器课程可以提供有关我们播放器的信息。

public class Player extends Deck {

    private String name;
    private int chips;

    public Player(String name, int chips) {

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

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

输出示例:

  

姓名:John Doe,现金:500   [心中的杰克,心中的十颗,钻石的两颗,俱乐部的王牌,九颗钻石]

     

姓名:Jane Doe,现金:500   [黑桃之王,两颗钻石,杰克之心,黑桃王牌,七颗钻石]

3 个答案:

答案 0 :(得分:2)

不要让Player类扩展Deck。这基本上是让玩家自己使用(在某种程度上)并且你正在制作他们&#34;有&#34;甲板本身。因此,您需要单独使用Deck类。

在Player构造函数中传递Deck实例,如下所示:

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 :(得分:1)

如果没有其他方便的地方可以放置你的甲板,你可以使用单身人士模式:

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;
}

}

玩家从牌组中抽出:

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()
    }

答案 2 :(得分:0)

所以我会创建5 *随机整数的玩家数量。然后将它分成五组,然后进入甲板,寻找那些编号的卡片。即,0是2的黑桃,13是2的三叶草,14是三个三叶草e.t.c.此外,您必须重复此过程,直到获得没有重复项的列表