我正在尝试制作一个纸牌游戏,它有游戏,纸牌,玩家,套牌和手牌的类。我希望它模拟现实生活,你从一副牌中抽出 5 张牌到你的手上
我让我的班级玩家将所有卡添加到称为卡牌的套牌数组中。喜欢这个:
public Player(String name) {
this.name = name;
this.deck = new Deck();
this.deck.addCard(new Card("c1",20, "fire"));
this.deck.addCard(new Card("c2",30, "fire"));
this.deck.addCard(new Card("c3",10,"water")); //etc list goes on
将其传递给我的类甲板:
public class Deck {
private List<Card> cards;
public Deck() {
this.cards = new ArrayList<>();
}
public void addCard(Card card) {
this.cards.add(card);
}
我在类手牌中创建了一个手牌数组列表,称为手牌:
public class Hand {
Deck deck;
private List<Card> hand;
public Hand() {
this.hand = new ArrayList<>();
}
如何将我的套牌阵列列表中的 5 个随机卡牌对象添加到我的手牌数组列表中?
首先,您需要使 Deck 足够聪明,可以随机提取卡牌并满足需求金额。甲板代码应该是这样的:
public class Deck {
private List<Card> cards;
public Deck() {
this.cards = new ArrayList<>();
}
public void addCard(Card card) {
this.cards.add(card);
}
public List<Card> getCards(final int amount) {
ArrayList<Card> result = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < amount; i++) {
int randomIndex = random.nextInt(cards.size());
result.add(cards.remove(randomIndex));
}
return result;
}
}
在第二步中,让手部访问 Deck,对于此任务,Deck 应该在 Hand 类中,如下所示:
public class Hand {
private final Deck deck;
private final int cardsAmount;
private List<Card> cardsInHand;
public Hand(Deck deck, int cardsAmount) {
this.deck = deck;
this.cardsAmount = cardsAmount;
}
public List<Card> cards() {
if(cardsInHand == null) cardsInHand = deck.getCards(cardsAmount);
return cards;
}
}
在现实生活中,玩家知道根据游戏规则他应该从牌组中获得多少张牌,因此我们将牌的数量传递给手牌构造函数。当手牌为空时,我们应该从牌组中获取牌,当手牌为满时,简单返回呈现的牌。