gpt4 book ai didi

java - 从 "strange"牌组中选择随机卡牌 (Java)

转载 作者:行者123 更新时间:2023-12-01 09:57:27 25 4
gpt4 key购买 nike

我正在尝试用 Java 实现一种新的纸牌游戏(不是发明它,只是必须发明它),其中的牌组与传统的牌组有点不同。一副牌由 90 张牌组成,分为:13 张橙色牌、13 张白色牌、13 张黑色牌、13 张蓝色牌、13 张灰色牌、13 张紫色牌和 12 张快乐牌。所有这些卡片都被命名为“政治卡片”。

我想将牌组表示为 7 个元素的数组:

public class PoliticalDeck {
private PoliticalCard[] deck;

public PoliticalDeck() {
deck = new PoliticalCard[7];
}

//estrai una carta a caso
public void pickRandomCard() {

}
}

这可能是正确的吗?如何实现卡片选取方法?

最佳答案

将牌放入列表或 Deque(双端队列)中,使用 Fisher-Yates 洗牌对其进行洗牌,然后通过将其从集合中删除来处理它们:

public enum Suit {
ORANGE, WHITE, BLACK, BLUE, GREY, PURPLE, JOLLY;
}

卡片:

public class Card {
private final Suit suit;
private final int value;

public Card(Suit suit, int value) {
this.suit = suit;
this.value = value;
}

public Suit getSuit() { return suit; }
public int getValue() { return value; }
@Override public String toString() { return value + " of " + suit; }
}

牌组:

import java.util.Collections;
import java.util.Deque;
import java.util.LinkedList;

public class Deck {
private Deque<Card> deck;

public Deck() {
LinkedList<Card> cards = new LinkedList<>();
for (Suit suit : Suit.values()) {
int limit = suit == Suit.JOLLY? 12 : 13;
for (int value = 1; value <= limit; ++value) {
cards.add(new Card(suit, value));
}
}
Collections.shuffle(cards);
deck = cards;
}

public boolean isEmpty() { return deck.isEmpty(); }
public int remaining() { return deck.size(); }
public Card deal() { return deck.remove(); }
}

这遗漏了您的游戏可能需要的许多功能,例如处理一手 n一次发牌而不是一张一张地处理它们,重新洗牌(要洗牌,只需创建一个新牌组),“丢弃”堆的概念(不知道你的游戏是否有),体面equalshashCode Card 上的方法。您可能还想要Card实现Comparable<Card> 。这些留给读者作为练习。

关于java - 从 "strange"牌组中选择随机卡牌 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37075635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com