我试图这样做,以便如果我随机生成的卡与任何当前存储的卡相同,它将返回并生成一张新的随机卡并存储它。我每次生成新卡时都会尝试找到重新检查的方法。
我现在有这个,但我需要别人看看它并告诉我如何更改代码以使其正常工作。
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
答案 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
实际上,第二行代码正在做的是:
Enumerable.Range(1, 52)
rnd.Next
选择如何订购这些(因此数字1-52会被扰乱)Take(22)
您可能希望查看101 Linq samples之类的内容或阅读Linq以了解有关Linq整体的更多信息。
同样,我不确定你是否对这种方式感到满意,但希望它有所帮助!!
PS - 使用相同的程序,您也可以使用.OrderBy(Function(i) rnd.Next)
直接随机化您的牌组并跳过获取索引......有些人更喜欢中间步骤,但是......