c#:写我自己的洗牌器;不断得到“黑桃k”;作为最后一张牌

本文关键字:一张 最后 黑桃 自己的 我自己 | 更新日期: 2023-09-27 18:13:04

我正在编写一个21点程序,试图学习c#。我有一个card类,和一个由纸牌组成的deck数组对象。我使用桥牌数组填充deckInPlay列表(纸牌),这将在游戏中实际使用。我选择在游戏中使用列表而不是数组,因为列表可以动态改变大小。到目前为止,我已经能够解决我自己的问题,但现在我已经创建了一个shuffleDeck方法,我有一个真正困扰我的问题。

让我们从我的shuffleDeck方法代码开始(我在发牌类构造函数中将Random实例化为rnd):

public void shuffleDeck(int timesToShuffle)
    {
        for (int i = 0; i <= timesToShuffle; i++)
        {
            for (int j = 0; j < 52; j++)
            {
                int randomNumber = rnd.Next(0, deckInPlay.Count - 1);
                Card randomCard = deckInPlay[randomNumber];
                shuffler.Add(randomCard);
                deckInPlay.RemoveAt(randomNumber);
            }
            for (int j = 0; j < 52; j++)
            {
                int randomNumber = rnd.Next(0, shuffler.Count - 1);
                Card randomCard = shuffler[randomNumber];
                deckInPlay.Add(randomCard);
                shuffler.RemoveAt(randomNumber);
            }
        }
    }

正如你所看到的,我使用了两个列表:deckInPlay列表,这是我想在游戏中使用的实际牌组,以及shuffler列表,这主要用于帮助洗牌。我想让代码从deckInPlay列表中随机抽取卡片,并将它们逐个添加到洗牌列表中,同时从deckInPlay列表中删除卡片。然后我想要这个过程反过来:从洗牌列表中随机取牌并将它们添加到deckInPlay列表中,在此过程中从洗牌列表中删除每张牌。

乍一看,洗牌器似乎工作正常。当使用大于1的参数调用shuffleDeck时,效果会更好。但有一点是不变的,无论参数是什么:黑桃王总是洗牌后列表中的最后一张牌。黑桃k恰好是我初始套牌数组和deckInPlay列表中默认的最后一张牌。

我不明白我哪里出错了。如果你能给我点提示,我会很感激的。感谢您的阅读!

c#:写我自己的洗牌器;不断得到“黑桃k”;作为最后一张牌

Next的最大值是排他性的,所以这意味着你不会达到这个数字,然后我怀疑你的"黑桃k "在你的牌组中是第52号。

使用

int randomNumber = rnd.Next(0, shuffler.Count);

研发。Next在您的示例中获取从0到Count - 1的数字,但不包括该上限范围。