我想为我正在创建的游戏生成一个介于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
答案 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有一种处理类型不匹配的时髦方式,在某些情况下,突出显示的行可能不是导致实际错误的行。这曾经让我发疯。