我基本上有一副 52 张牌,想知道如何将牌发给 4 手牌。例如,如果这是一个真正的纸牌游戏并且每个玩家都有一手牌,他们的手牌将有 52/4 (13) 张牌。
我已经创建了套牌和手类并生成了构造函数,以便它们正确初始化,但是我将如何使用迭代器将每张牌依次发给每手牌
我看过迭代器,但找不到合适的应用程序
以下是类牌和手的构造函数
private ArrayList<Card> deck;
public Deck() {
deck = new ArrayList<>(52);
for (int i = 0; i < 52; i++)
deck.add(new Card(value, suit);
}
private ArrayList<Card> hand;
public Hand() {
hand = new ArrayList<>();
}
我认为你不需要迭代。您可以使用subList
。
Collections.shuffle(deck);
List<Card> hand1 = deck.subList(0, 13);
List<Card> hand2 = deck.subList(13, 26);
List<Card> hand3 = deck.subList(26, 39);
List<Card> hand4 = deck.subList(39, 52);
这可以在返回带有循环的List<List<Card>>
的方法中进行概括。
int cards = 52;
int players = 4;
int hand = new int[players][cards];
int curPlayer = 0;
round = 0;
while(cards != 0){
hand[curPlayer][round] = GetCardFromDeck();
if(curPlayer == players){
curPlayer = 0;
}
cards--;
round++;
}
如果您必须使用迭代器执行此操作,一种方法如下所示:
List<Card> deck = new ArrayList<Card>(); //populate your deck here
Collections.shuffle(deck);
Iterator<Card> iter = deck.iterator();
List<Card> hand1 = new ArrayList<Card>();
List<Card> hand2 = new ArrayList<Card>();
List<Card> hand3 = new ArrayList<Card>();
List<Card> hand4 = new ArrayList<Card>();
Card c = null;
while (true) {
if (iter.hasNext()) {
c = iter.next();
hand1.add(c);
} else {
break;
}
if (iter.hasNext()) {
c = iter.next();
hand2.add(c);
} else {
break;
}
if (iter.hasNext()) {
c = iter.next();
hand3.add(c);
} else {
break;
}
if (iter.hasNext()) {
c = iter.next();
hand4.add(c);
} else {
break;
}
}