防止重复卡

时间:2014-03-28 16:20:53

标签: vb.net

我试图这样做,以便如果我随机生成的卡与任何当前存储的卡相同,它将返回并生成一张新的随机卡并存储它。我每次生成新卡时都会尝试找到重新检查的方法。

我现在有这个,但我需要别人看看它并告诉我如何更改代码以使其正常工作。

  For x As Integer = 0 To 21
        drawCard(x)
        While (redraw > 1)
            For y As Integer = 0 To 21
                If randomCards(x) = randomCards(y) Then
                    drawCard(x)
                    redraw += 1
                End If
            Next
        End While
    Next

1 个答案:

答案 0 :(得分:2)

假设您真正要做的就是从52个牌组中获得22张随机牌,最简单的方法是取数字1-52,混合起来并获取前22个值。

一旦你拥有了这个,你需要做的就是从你的套牌中取出那些22个索引的牌,并且你有一个洗牌的手。

为了让你开始(假设你对这种方式感到满意而不是你以前的方式),这段代码将为你提供从你的套牌中获取的22个索引:

Dim rnd As New Random
Dim ShuffledCards As List(Of Integer) = Enumerable.Range(1, 52).OrderBy(Function(i) rnd.Next).Take(22).ToList

实际上,第二行代码正在做的是:

  1. 创建1到52 Enumerable.Range(1, 52)
  2. 的数字列表
  3. 使用新的随机数rnd.Next选择如何订购这些(因此数字1-52会被扰乱)
  4. 占据这些Take(22)
  5. 的前22个
  6. 将其另存为整数列表
  7. 您可能希望查看101 Linq samples之类的内容或阅读Linq以了解有关Linq整体的更多信息。

    同样,我不确定你是否对这种方式感到满意,但希望它有所帮助!!

    PS - 使用相同的程序,您也可以使用.OrderBy(Function(i) rnd.Next)直接随机化您的牌组并跳过获取索引......有些人更喜欢中间步骤,但是......