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

时间:2013-05-10 19:46:50

标签: 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 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

1 个答案:

答案 0 :(得分:3)

像这样写:

Dim Reel1Num As Long

Reel1Num = (CLng(Rnd * 20) + 1)

不要在VB6中使用Integer - 它代表一个16位有符号整数,它的性能略低于Long,它实际上是一个32位有符号整数。这样,您也不会遇到16位数据类型的限制。

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

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

修改

发布代码后,我看不到Reel1Num变量的定义 - 它在哪里定义?是Reel1Spin吗?如果是这种情况,请确保在Require variable declaration中启用Tools->Options选项 - 默认情况下已关闭。如果你没有使用它,这是一种非常简单的射击自己的方法。

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

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

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

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

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