Vb6类型与随机数生成器不匹配

Vb6类型与随机数生成器不匹配,vb6,type-mismatch,Vb6,Type Mismatch,我想为我正在创建的游戏生成一个介于1和20之间的随机数,由于某种原因,此代码已停止工作,并给我一个类型不匹配错误,我在游戏中尝试了其他生成器,但我得到了相同的错误 Public Counter1 As Integer ' Counters for each reel Public ArrayImgMid1 As Integer ' Store number to iterate over image arrays Public ReelPic1 As Variant ' Array of ima

我想为我正在创建的游戏生成一个介于1和20之间的随机数,由于某种原因,此代码已停止工作,并给我一个类型不匹配错误,我在游戏中尝试了其他生成器,但我得到了相同的错误

Public Counter1 As Integer ' Counters for each reel
Public ArrayImgMid1 As Integer ' Store number to iterate over image arrays
Public ReelPic1 As Variant ' Array of images for each reel
Public Reel1Spin As Long ' Spins for each reel
Public ImgBeth, ImgWallow, ImgDan, ImgChris, ImgCatBug As StdPicture ' Images for reels

Private Sub CmdSpin_Click()

'Enable all timers to imitate spinning
TimerReel1.Enabled = True
TimerReel1.Interval = 100

' Disable spin button
CmdSpin.Enabled = False

' Set all counters to 0
Counter1 = 0

' Generate random number for the first reel to spin
Reel1Num = (CLng(Rnd * 20) + 1) ' This is highlighted when I press debug
这样写:

Dim Reel1Num As Long

Reel1Num = (CLng(Rnd * 20) + 1)
不要在VB6中使用
Integer
——它表示一个16位有符号整数,并且它的性能略低于
Long
,后者实际上是一个32位有符号整数。这样,您也不会遇到16位数据类型的限制

代码不起作用的原因是
Int()
函数没有将值的数据类型转换为
Integer
类型-它将指定的值舍入为整数值,但保留其数据类型

要将值转换为特定数据类型,请使用
CInt()
CLng()
等函数。但正如我所说的,除非您特别需要,否则请避免使用
Integer
-
Long
在大多数情况下更好

编辑:

发布代码后,我看不到
Reel1Num
变量的定义-它是在哪里定义的?是不是
Reel1Spin
?如果是这种情况,请确保在
Tools->Options
中启用
Require variable declaration
选项,默认情况下该选项处于关闭状态。如果你没有穿,这是一个很容易的射中你自己脚的方法

与错误无关,但大多数图像对象的定义不正确-在VB6中,必须为每个变量指定变量类型,而不是每行指定一次。所以在这一行:

公共ImgBeth、imgwallet、ImgDan、ImgChris、ImgCatBug作为StdPicture

您实际上只创建了1个StdPicture对象,其他所有对象都是变体。正确的做法是:

Public ImgBeth As StdPicture, ImgWallow As StdPicture, ImgDan As StdPicture, _
    ImgChris As StdPicture, ImgCatBug As StdPicture
除此之外,我看不出你的代码有什么问题-我的计算机上没有安装VB6。请记住,VB6在处理类型不匹配时有一种很时髦的方式,在某些情况下,高亮显示的行可能不是导致实际错误的行。这曾经让我发疯。

这样写:

Dim Reel1Num As Long

Reel1Num = (CLng(Rnd * 20) + 1)
不要在VB6中使用
Integer
——它表示一个16位有符号整数,并且它的性能略低于
Long
,后者实际上是一个32位有符号整数。这样,您也不会遇到16位数据类型的限制

代码不起作用的原因是
Int()
函数没有将值的数据类型转换为
Integer
类型-它将指定的值舍入为整数值,但保留其数据类型

要将值转换为特定数据类型,请使用
CInt()
CLng()
等函数。但正如我所说的,除非您特别需要,否则请避免使用
Integer
-
Long
在大多数情况下更好

编辑:

发布代码后,我看不到
Reel1Num
变量的定义-它是在哪里定义的?是不是
Reel1Spin
?如果是这种情况,请确保在
Tools->Options
中启用
Require variable declaration
选项,默认情况下该选项处于关闭状态。如果你没有穿,这是一个很容易的射中你自己脚的方法

与错误无关,但大多数图像对象的定义不正确-在VB6中,必须为每个变量指定变量类型,而不是每行指定一次。所以在这一行:

公共ImgBeth、imgwallet、ImgDan、ImgChris、ImgCatBug作为StdPicture

您实际上只创建了1个StdPicture对象,其他所有对象都是变体。正确的做法是:

Public ImgBeth As StdPicture, ImgWallow As StdPicture, ImgDan As StdPicture, _
    ImgChris As StdPicture, ImgCatBug As StdPicture

除此之外,我看不出你的代码有什么问题-我的计算机上没有安装VB6。请记住,VB6在处理类型不匹配时有一种很时髦的方式,在某些情况下,高亮显示的行可能不是导致实际错误的行。这曾经让我发疯。

谢谢你的回答,但它仍然不起作用,一定与我的其余代码有关。搞不懂though@Lilvlskid你为什么不发布更多的代码?我们可能会帮助您。@xxbbcc感谢您提供了明智的回复和有用的提示,以供将来参考。我已经开始了另一个版本的游戏,出于某种原因,随机函数可以工作。如果我有这个名声的话,我会+1。谢谢你的回答,但它仍然不起作用,一定是我代码的其他部分造成的。搞不懂though@Lilvlskid你为什么不发布更多的代码?我们可能会帮助您。@xxbbcc感谢您提供了明智的回复和有用的提示,以供将来参考。我已经开始了另一个版本的游戏,出于某种原因,随机函数可以工作。如果我有这个名声,我会+1。