C#:写了我自己的洗牌器;不断获得“黑桃王”作为甲板上的最后一张牌

时间:2014-07-16 06:32:22

标签: c#

我正在研究一个二十一点程序,试图学习C#。我有一个卡类,以及一个由卡组成的卡座阵列对象。我使用了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列表,它是我想在游戏中使用的实际牌组,以及洗牌器列表,主要用于帮助洗牌。我打算让代码从deckInPlay列表中取出随机卡,然后将它们逐个添加到洗牌器列表中,同时从deckInPlay列表中删除卡片。然后我想要反向过程:从洗牌器列表中取出随机牌并将它们添加到deckInPlay列表中,从过程中的洗牌器列表中删除每张牌。

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

我不明白我在哪里错了。如果你能给我一个线索,我真的很感激。谢谢你的阅读!

2 个答案:

答案 0 :(得分:7)

下一个的最大值是独占,所以这意味着你没有达到这个数字,然后我怀疑你的黑桃王#34;在你的牌组中是52号。

答案 1 :(得分:5)

使用

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

rnd.Next在你的例子中得到一个从0到Count-1的数字,但不包括那个上限。