vb.net - Visual Basic:老虎机值都返回相同的值
问题描述
我试图在 Visual Basic Windows Form Creator 中创建一个简单的老虎机。到目前为止,这是我的代码:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim List1 = New String() {"Banana", "Cherry", "Watermelon", "Bell", "Skull", "Apricot"}
Dim List2 = New String() {"Banana", "Cherry", "Watermelon", "Bell", "Skull", "Apricot"}
Dim List3 = New String() {"Banana", "Cherry", "Watermelon", "Bell", "Skull", "Apricot"}
Dim rn1 = New Random()
Dim rn2 = New Random()
Dim rn3 = New Random()
Dim x As Integer = 0
While x < 30
Dim Choice = List1(rn1.Next(0, List1.Count))
Dim Choice2 = List2(rn2.Next(0, List2.Count))
Dim Choice3 = List3(rn3.Next(0, List3.Count))
Select Case Choice
Case "Banana"
Slot1.Image = Fruit_Machine.My.Resources.Resources.Banana
Case "Cherry"
Slot1.Image = Fruit_Machine.My.Resources.Resources.Cherry
Case "Watermelon"
Slot1.Image = Fruit_Machine.My.Resources.Resources.Watermelon
Case "Skull"
Slot1.Image = Fruit_Machine.My.Resources.Resources.Skull
Case "Apricot"
Slot1.Image = Fruit_Machine.My.Resources.Resources.Apricot
Case "Bell"
Slot1.Image = Fruit_Machine.My.Resources.Resources.Bell
End Select
Select Case Choice2
Case "Banana"
Slot2.Image = Fruit_Machine.My.Resources.Resources.Banana
Case "Cherry"
Slot2.Image = Fruit_Machine.My.Resources.Resources.Cherry
Case "Watermelon"
Slot2.Image = Fruit_Machine.My.Resources.Resources.Watermelon
Case "Skull"
Slot2.Image = Fruit_Machine.My.Resources.Resources.Skull
Case "Apricot"
Slot2.Image = Fruit_Machine.My.Resources.Resources.Apricot
Case "Bell"
Slot2.Image = Fruit_Machine.My.Resources.Resources.Bell
End Select
Select Case Choice3
Case "Banana"
Slot3.Image = Fruit_Machine.My.Resources.Resources.Banana
Case "Cherry"
Slot3.Image = Fruit_Machine.My.Resources.Resources.Cherry
Case "Watermelon"
Slot3.Image = Fruit_Machine.My.Resources.Resources.Watermelon
Case "Skull"
Slot3.Image = Fruit_Machine.My.Resources.Resources.Skull
Case "Apricot"
Slot3.Image = Fruit_Machine.My.Resources.Resources.Apricot
Case "Bell"
Slot3.Image = Fruit_Machine.My.Resources.Resources.Bell
End Select
x = x + 1
Application.DoEvents()
End While
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
End Class
这确实有效:老虎机的每个结果都是随机的……在一定程度上。我知道代码过于复杂,但这只是一个测试项目,其他任何人都看不到。作为 VB 的新手,我知道这段代码可能......很乱。但是,当水果机的结果显示所有 3 个插槽的值相同时,就会出现主要问题。IE
我需要一个解决方案。有任何想法吗?
解决方案
快速连续实例化三个Random
对象会导致它们从系统时钟获得相同的种子值,因此它们都产生相同的序列。使用Random(Int32)
具有不同种子的构造函数来获取三个不同的随机值序列,或者只使用一个Random
对象来生成所有值。从文档(强调添加):
要生成不同的随机数序列,您可以使种子值与时间相关,从而为每个新的 Random 实例生成不同的序列。参数化的 Random(Int32) 构造函数可以根据当前时间的刻度数获取 Int32 值,而无参数的 Random() 构造函数使用系统时钟来生成其种子值。但是,由于时钟具有有限的分辨率,因此使用无参数构造函数来创建不同的 Random 对象以紧密连续地创建随机数生成器,这些生成器会生成相同的随机数序列。
推荐阅读
- materialize - 物化选择不在模态中显示
- ruby-on-rails - 为什么我的 Rails URL 路由使用点而不是斜线呈现 URL?
- angularjs - 添加打字稿方法的签名
- android - 如何在 Android 的弹出窗口上处理点击侧的监听器?
- swift - 在 swift 中假设集合类型时类型推断的工作原理
- java - 将 Katalon Studio 更新到版本 5.9.1 - ClassNotFoundException
- c - 如何模拟 send() 以便对函数 commSendPacket 进行单元测试?
- python - 包含轮廓的图像中出现白点
- angular - 在角度 6 中使用 HttpResponse 时如何每 5 分钟调用一次 API
- azure - spark.conf.set 与 SparkR