首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB6控件加载卡死的有关问题

2012-03-29 
VB6控件加载卡死的问题一个翻翻乐游戏的加载过程[codevb]Const BaseTop 1080Const BaseLeft 360Const

VB6控件加载卡死的问题
一个翻翻乐游戏的加载过程
[code=vb]Const BaseTop = 1080
Const BaseLeft = 360
Const StepTop = 735
Const StepLeft = 735

Private Declare Function GetTickCount Lib "kernel32 " () As Long

Public Sub LoadCmd(ByVal row As Integer, ByVal col As Integer, ByRef num As Integer)
    Load frmGame.cmdCard(num)
    With frmGame.cmdCard(num)
        .Top = BaseTop + StepTop * row
        .Left = BaseLeft + StepLeft * col
        .Height = StepLeft
        .Width = StepLeft
    End With
End Sub

'等待过去多长时间,以毫秒计
Public Sub TimeDelay(DT As Long)
    Dim TT    As Long
    TT = GetTickCount()
    Do
        DoEvents
        If GetTickCount - TT < 0 Then TT = GetTickCount
        If gblnCancel = True Then Exit Do              '用户单击了取消
    Loop Until GetTickCount - TT >= DT
End Sub

Private Sub Form_Paint()
    On Error Resume Next
    If painted = False Then
    cmdRestart.Enabled = False
    cmdHelp.Enabled = False
    cmdLook.Enabled = False
    remain = 100
    Progress.Value = remain
    lblScore = score
    lblWrong = wrong
    Dim arr()
    arr = Array("剩余卡片:", "剩余时间:", "分数:", "错误计数器:")
    '清除图片,减少内存占用
    cmdCard(100).Picture = Nothing
    Dim cmdNo As Integer, i As Integer, j As Integer
    For i = 0 To 3
        lblLabels(i).Caption = arr(i)
    Next
    For i = 0 To 9
        For j = 0 To 9
            LoadCmd i, j, cmdNo
            cmdNo = cmdNo + 1
        Next j
    Next i
    '不用删除原来的标准按钮,只需设置Visible = False 即可
    Dim Rand1%, Rand2%, Rand3%
    Dim Total%
    Randomize
    Do While Total < 100
        Rand1 = Int(Rnd * 25) + 1            '随机生成一个图片号码
        Do
            Rand2 = Int(Rnd * 10)            '随机生成行号
            Rand3 = Int(Rnd * 10)            '随机生成列号
        Loop Until Pict(Rand2 * 10 + Rand3) = 0
        Pict(Rand2 * 10 + Rand3) = Rand1
        cmdCard(Rand2 * 10 + Rand3).Picture = LoadPicture(App.Path + "\" + Trim(Str$(Rand1)) + ".jpg")
        Do
            Rand2 = Int(Rnd * 10)            '随机生成行号
            Rand3 = Int(Rnd * 10)            '随机生成列号
        Loop Until Pict(Rand2 * 10 + Rand3) = 0
        Pict(Rand2 * 10 + Rand3) = Rand1
        cmdCard(Rand2 * 10 + Rand3).Picture = LoadPicture(App.Path + "\" + Trim(Str$(Rand1)) + ".jpg")
        Total = Total + 2
    Loop
[color=#FF0000]'标记[/color]
    For i = 0 To 99
        '显示按钮
        cmdCard(i).Visible = True


        cmdCard(i).Enabled = False
        TimeDelay 15
    Next i
    For t = 10 To 1 Step -1
        lblTime = t
        TimeDelay 1000
    Next t
    For i = 0 To 99
        cmdCard(i).Enabled = True
    Next i
    painted = True                            '设置标记
    cmdRestart.Enabled = True
    cmdHelp.Enabled = True
    cmdLook.Enabled = True
    For i = 0 To 99
        cmdCard(i).Picture = Nothing
    Next
    End If
    Exit Sub
End Sub[/code]
为什么每次运行时第一次是好的,第二次到标记处就卡了呢?
这段程序还有一个Bug就是在倒计时10秒的时候窗体被其他窗体挡住会停止计时,请帮忙解决一下

[解决办法]
Do While Total < 100
Rand1 = Int(Rnd * 25) + 1 '随机生成一个图片号码
Do
Rand2 = Int(Rnd * 10) '随机生成行号
Rand3 = Int(Rnd * 10) '随机生成列号
Loop Until Pict(Rand2 * 10 + Rand3) = 0
Pict(Rand2 * 10 + Rand3) = Rand1
cmdCard(Rand2 * 10 + Rand3).Picture = LoadPicture(App.Path + "\" + Trim(Str$(Rand1)) + ".jpg")
Do
Rand2 = Int(Rnd * 10) '随机生成行号
Rand3 = Int(Rnd * 10) '随机生成列号
Loop Until Pict(Rand2 * 10 + Rand3) = 0
Pict(Rand2 * 10 + Rand3) = Rand1
cmdCard(Rand2 * 10 + Rand3).Picture = LoadPicture(App.Path + "\" + Trim(Str$(Rand1)) + ".jpg")
Total = Total + 2
Loop
这个循环算法有问题,会造成死循环。

热点排行