VB的随机数产生问题

来源:百度知道 编辑:UC知道 时间:2024/06/20 15:16:34
我写了一个部分模拟一种扑克游戏的程序。
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Dim me1(13, 4), me2(13, 4), me3(13, 4), rival1(13, 4), rival2(13, 4), rival3(13, 4) As Integer
Dim i1, j1, m1, n1, i2, j2, m2, n2 As Integer

For i = 1 To 9
For j = 1 To 4
me1(i, j) = i
me2(i, j) = i
me3(i, j) = i
rival1(i, j) = i
rival2(i, j) = i
rival3(i, j) = i
Next j
Next i
For i = 10 To 13
For j = 1 To 4
me1(i, j) = 0
me2(i, j) = 0
me3(i, j) = 0
rival1(i, j) = 0
rival2(i, j) = 0
rival3(i, j) = 0
Next j
Next i
'向每张牌赋值
Sleep (1)
Randomize
i1 = Int(13 * Rnd + 1)
Randomize
j1 = Int(4 * Rnd + 1)
Randomize
i2 = Int(13 * Rnd + 1)
Randomize
j2 = Int(4 * Rnd + 1)

Do While i1 = i2 And j1 = j2
Randomize
i2 = Int(13 * Rnd + 1)
Rand

对最初给定的种子都会生成相同的数列,因为每一次调用 Rnd 函数都用数列中的前一个数作为下一个数的种子。
你可以根据在不同情况产生不同的随机数,如(不同时间(秒)):
Private Sub Command1_Click()
Dim yourlong As Long, yourint As Integer, yourstr As String
yourstr = Time
yourstr = Replace(yourstr, ":", "")
yourlong = CLng(yourstr)
yourint = yourlong Mod 100
Label1.Caption = Int(yourint * Rnd + 1)
End Sub

你做的太复杂了,你每次在剩下的牌中发牌就不会一样了。建立一个54张牌的数组pai(54),产生随机数n,发一次牌后,pai(n)=0,再发下一张。
Randomize 一个就行了。

和Randomize没有关系

你给mes 和 rivals这两个值的赋值一模一样 结果当然一样

Randomize在form_load中用一次就行啦

randomize可以是函数
randomize(time)