【问题标题】:Returning deck of cards based on user input for player and cards per player in java基于Java中玩家的用户输入和每个玩家的卡片返回一副卡片
【发布时间】:2013-02-25 21:04:03
【问题描述】:

我有洗牌和返回结果的一副牌,但现在我想根据用户输入更改输出:玩家人数和每位玩家的牌数。

原文代码:

CardRun - 主要

public static void main(String[] args)
{
    Scanner scan = new Scanner(System.in);
    Deck deck = new Deck();
    Card C;

    System.out.println(deck.getTotalCards());
    System.out.print("Number of players: ");
    int players = scan.nextInt();
    System.out.print("Number of cards: ");
    int cards = scan.nextInt();

    while(deck.getTotalCards() != players)
    {
        C = deck.drawFromDeck();
        System.out.println(C.toString());
    }

}

甲板课

public class Deck {
private ArrayList<Card>cards;

Deck()
{
    cards = new ArrayList<Card>();
    for(int a=0; a<=3; a++)
    {
        for(int b=0; b<=12; b++)
        {
            cards.add(drawFromDeck());
        }
        cards.addAll(cards);
    }
}

public Card drawFromDeck()
{
    Random generator = new Random();
    int index = generator.nextInt(cards.size());
    return cards.remove(index);
}

public int getTotalCards()
{
    return cards.size();
}

}

卡类

public class Card {
private int card, suit;
private static String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
private static String[] cards = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};

Card(int suit, int card)
{
    this.card = card;
    this.suit = suit;
}

public @Override String toString()
{
    for(int i = 0; i<players; ++i)
    {
        System.out.println("Player " + (i+1) + ": "+ cards.get(i));
    }
}

public int getCard()
{
    return card;
}

public int getSuit()
{
    return suit;
}
}

输出 一副牌:54
玩家人数:4(由用户输入)
每个用户的卡片数量:5(由用户输入)
玩家 1:黑桃 A、红桃 2、红色小丑
玩家 2:红心 8、梅花 10、红心 9
玩家 1 拥有更好的牌。

【问题讨论】:

  • 请更具体地说明一天结束时的输出结果:)
  • @poitroae 添加了所需的输出格式。感谢您的帮助。

标签: java


【解决方案1】:

如我所见,你让每个玩家从牌库中抽出cards 牌:

List<Hand> hands = new ArrayList<Hand>(players); // defines each players hand (in your case one, each "cards" cards);

// let 'em draw
for(int k=0; k<players; ++k) {
    Hand currentHand = new Hand();
    for(int i=0; i<cards; ++i) {
       currentHand.add(deck.drawFromDeck());
    }
    hands.add(currentHand);
}

// find the best
Collections.sort(hands); // make sure to implement Comparable, to reasonably check which one has the best hand

for(int i=0; i<players; ++i) {
    System.out.println("Player " + (i+1) + ": " + hands.get(i)); // Make sure Hand::toString() is overriden properly
}

是的,我认为应该这样做,它仍然是完美的干净和模块化

【讨论】:

  • 每个玩家是否会得到 3 张牌,用户可以通过扫描仪来决定玩家的数量和输入中的牌。但我会继续应用您提供的内容,看看效果如何
  • @Amina 是的,这只是一个参数,这个设计没有问题。 我编辑了它
  • 这是否意味着我必须将当前使用的数组转换为数组列表?我还将这些更改添加到甲板类中。
  • 是的,毕竟使用 ArrayList 会更容易。
  • ok.. 所以我用你提供给我的内容更新了我上面的代码,如果可能的话再看看.. 我的头没有更完整,如果你能指出任何事情,我正在努力错了请做。我真的很感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
相关资源
最近更新 更多