c#创建一个简单的牌组

本文关键字:简单 一个 创建 | 更新日期: 2023-09-27 18:16:47

我试图创建一副52张牌的4种花色:黑桃,红桃,梅花和方块。我试图在我的Deck类中创建这个for循环,但似乎遇到了一些关于实际让程序做我想做的事情的问题。我在想也许我可以做4个for循环,因为任务暗示,但是否有可能使用if/else-if来创建4套牌?

class Deck
{
    private Card[] cards;
    public Deck()
    {
        cards = new Card[52];
        int check = 0;
        for (int suitVal = 1; suitVal < 4; suitVal++)
        {
            for (int rankVal = 1; rankVal < 14; rankVal++)
            {
                if(suitVal == 1)
                {
                    cards[check] = new Card(rankVal, "Spades");
                }
                else if (suitVal == 2)
                {
                    cards[check] = new Card(rankVal, "Hearts");
                }
                else if (suitVal == 3)
                {
                    cards[check] = new Card(rankVal, "Clubs");
                }
                else if (suitVal == 4)
                {
                    cards[check] = new Card(rankVal, "Diamonds");
                }
            }
        }
    }

c#创建一个简单的牌组

是有可能的。一共有13张牌和4种花色。我们的想法是,对于每种花色,你都要创建13张牌。伪代码和你已经得到的差不多:

for each of the four suits
   loop 13 times for said suit

下面是你代码中的问题:

1-你的check变量永远不会增加,所以你总是覆盖位置0的卡;它应该在每次插入卡片(内循环)后递增

2-你的外环只运行3次(i = 1, i = 2, i = 3),并且有4套。

如果你需要更多的帮助,请告诉我

你可以这样做:

class Deck
{
    private Card[] cards;
    public Deck()
    {
        cards =
            new [] { "Spades", "Hearts", "Clubs", "Diamonds", }
                .SelectMany(
                    suit => Enumerable.Range(1, 13),
                    (suit, rank) => new Card(rank, suit))
                .ToArray();
    }
}

或:

class Deck
{
    private Card[] cards;
    public Deck()
    {
        var query =
            from suit in new [] { "Spades", "Hearts", "Clubs", "Diamonds", }
            from rank in Enumerable.Range(1, 13)
            select new Card(rank, suit);
        cards = query.ToArray();
    }
}

或:

class Deck
{
    private Card[] cards;
    public Deck()
    {
        cards = new Card[52];
        var index = 0;
        foreach (var suit in new [] { "Spades", "Hearts", "Clubs", "Diamonds", })
        {
            for (var rank = 1; rank <= 13; rank++)
            {
                cards[index++] = new Card(rank, suit);
            }
        }
    }
}