争论超出范围 - 卡洗牌

时间:2013-03-17 17:36:31

标签: c# game-engine shuffle

我试图通过从一个牌组中随机取出牌并将它们放入另一个牌组来洗牌一副牌,以避免在将牌组添加到新列表后获得牌的副本时将其从牌组中删除原始列表,这似乎导致参数超出范围错误,尽管我努力减去随机数的范围。建议好吗?

List<Card> shuffledDeck = new List<Card> ();

    for (int i = 0; i <= 51; ++i) 
    {
        int c = myDeck.Count + 1;
        int n = rNumber.Next (1, c);
        shuffledDeck.Add(myDeck[n]);
        myDeck.Remove(myDeck[n]);
    }

1 个答案:

答案 0 :(得分:2)

   List<Card> shuffledDeck = new List<Card> ();

   while (myDeck.Count > 0)
   {
      int c = myDeck.Count;

      int n = rNumber.Next (0, c);
      var value = myDeck[n];
      shuffledDeck.Add(value);
      myDeck.Remove(value);

   }

您需要确保没有比实际数组对象计数更多的索引。