当前位置: 首页 > 知识库问答 >
问题:

根据玩家的用户输入和java中每个玩家的牌返回一副牌

空佐
2023-03-14

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

原始代码:

CardRun-main

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手牌更好。

共有1个答案

薛朝
2023-03-14

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

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
}

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

 类似资料:
  • 本篇教程,我们将介绍 Cocos Creator 的全局系统事件。 全局系统事件是指与节点树不相关的各种全局事件,由 cc.systemEvent 来统一派发,目前支持了以下几种事件: 键盘事件 设备重力传感事件 除此之外,鼠标事件与触摸事件请参考 节点系统事件 注意:目前已经不建议直接使用 cc.eventManager 来注册任何事件,cc.eventManager 的用法也不保证持续性,有可

  • My Deck类在方法中创建一个52张牌副牌并返回一张5张牌手牌: 我的玩家类让我们提供关于玩家的信息。 问题是每个玩家都使用自己的套牌,因此有时两个或更多不同的玩家可能拥有同一张牌。我的问题是我如何设置我的程序让每个玩家使用同一套牌?多谢了。 姓名:无名氏,现金:500“黑桃之王,钻石之二,红心杰克,黑桃王牌,钻石之七”

  • 问题内容: 我正在制作一个2D游戏,其中包括一架与飞船通过槽式导弹作战的飞机,我希望飞船根据玩家的位置旋转,以便它们始终以“头部”面对玩家。播放器可以在y和x方向上自由移动。玩家和太空飞船具有一个Vector2 pos变量,该变量对应于它们的实际位置。任何帮助,将不胜感激。 这是我(现在正在工作)的代码: 敌方飞船旋转,但它们并不总是面对玩家: 问题答案: @dwn的答案在数学上是正确的,但是当您

  • 我的程序要求用户输入牌数和玩家数。我只是想打印出每个玩家的卡片。ex.(球员1:黑桃王牌,红桃两枚。球员2:梅花两枚等)我已经把它打印出来了,但它似乎只打印出一套卡片,尽管玩家的数量中输入了2张。这是我的密码。 手类: 我的司机: 我得到的输出: 我想让它打印出两套卡片,而不是一套,但从逻辑上讲,我不知道该怎么做。任何帮助都会很好,谢谢。

  • 我知道你可以得到损坏的原因 在实体损坏事件中,但是我还没有找到返回造成损坏的实体的方法。我需要找出这一点,这样我就可以检查玩家的库存中是否有某个物品。

  • 我有一副洗牌牌,我应该把它做成这样,它可以把5张牌分给4个玩家。我像个白痴一样坐在这里好几个小时了,我被卡住了。 我被最后一部分难住了。我将为四名玩家获得五张类似的牌。看起来是这样的: 红心皇后 红心皇后 红心皇后 红心皇后 红心皇后 10的钻石 10的钻石 10的钻石 10的钻石 10的钻石 红心6号 红心6号 红心6号 红心6号 红心6号 黑桃10 黑桃10 黑桃10 黑桃10 黑桃10 如果