求一个关于下面这个 拼图游戏 的关键代码的说明
这是整个程序的开始程序:Private Sub Timer1_Timer()
Static a As Integer
If a < 100 Then
PICG.Show
End If
If a > 1 Then
Unload STUP
End If
a = a + 1
End Sub
下面是主体:
Public PHidL, PHidT, Mov, Nub, Dif, SS, MM As Integer
Public ImH, ImW As Integer
Public PicN As String
Private PL(15) As Integer
Private PT(15) As Integer
Public PHid As Integer
Public ST, MT As String
Public Hig As Integer
Public GTiM, GTiS As Integer
'GTim,GTis是设置游戏时间的变量。
'设置变量 PHidL(隐藏图片的Left), PHidT(隐藏图片的Top), _
Mov(用以确定Start是否按下), Nub(图片数量), _
Dif(难度变量), SS(秒), MM(分)
'PicN(图片名), _
PL(15)图片数组的Left,PT(15)图片数组的Top , _
PHid (隐藏图片的序号)
Private Sub difficulty_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
SetTime.Show '启动游戏时间设置窗口
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub showpic_Click()
If Image1.Visible = False And Hig = 0 Then '判断是否处于高难状态
Renew '恢复图片控件的位置
End If
End Sub
Private Sub difficulty_Click()
'难度按键
PICG.Hide
Dim a, b As Integer
If Nub = 8 Then '调整为16张图片的组合
difficulty.Caption = "简单"
Nub = 15: Image2.Top = 3720 '调整图像控件的位置
Dif = 1: Image3.Width = 3900
Image3.Left = 120
For I = 0 To 15
PIC(I).Visible = True '将隐藏图片复原
Next
If Hig = 0 Then
GTiM = 3: GTiS = 0
End If
Else
difficulty.Caption = "困难" '同上原理
Nub = 8: Image2.Top = 3200
Dif = 0: Image3.Width = 2100
Image3.Left = 900
For I = 0 To 8
PIC(I).Visible = True
Next
For I = 9 To 15
PIC(I).Visible = False
Next
If Hig = 0 Then
GTiM = 1: GTiS = 30
End If
End If
NEWPIC '调整各图片数组控件的位置及重画图像
a = PIC(Nub).Left: b = PIC(Nub).Top '调整各控件及窗体的位置
PICG.Width = a + 1500
PICG.Height = b + 2600
Watch.Left = a - 100: Watch.Top = b + 1700
Image3.Top = b + 1700
PICG.Show
If Hig = 1 Then '判断高难状态为真
start = True
End If
End Sub
Private Sub exit_Click()
End '退出
End Sub
Private Sub picopen_Click()
CommonDialog1.Copies = &H2000
'打开文件
Dim CA As Integer '取消变量
CA = Mov
Mov = 0 '停止计时
CommonDialog1.CancelError = True '取消为真
On Error GoTo HANDLER
CommonDialog1.Filter = _
"JPG图像,位图(*.jpg,*.bmp,*.gif)|*.jpg;*.bmp;*.gif|"
CommonDialog1.ShowOpen
'设置打开文件类型
On Error GoTo HANDLER
If PICG.PicN <> CommonDialog1.FileName Then
PICG.PicN = CommonDialog1.FileName '载入图片
Image1.Picture = LoadPicture("")
Image1.Picture = LoadPicture(PICG.PicN)
Else
GoTo HANDLER
End If
PICG.Mov = 0 '不能移动PIC数组控件
NEWPIC '调整各图片数组控件的位置及重画图像
If Hig = 1 Then '判断高难状态为真
start = True
Exit Sub
End If
HANDLER:
'按取消按钮
Mov = CA '恢复计时
End Sub
Private Sub NEWPIC()
'重画各PIC数组控件的图像
Renew '将PIC数组控件的位置复原
If Image1.Picture = LoadPicture("") Then
PICG.Mov = 0 '没有图片不动作
WINER '没图片时将PIC数组控件隐藏显示Image的边框
Else
Dim C As Integer
If Dif = 1 Then '分割图像的大小
C = 4
Else
C = 3
End If
For k = 0 To Nub
PIC(k).PaintPicture Image1.Picture, 0, 0, _
PIC(k).ScaleWidth, PIC(k).ScaleHeight, _
(PIC(k).Left - PIC(0).Left) / 1200 * PICG.ImW / C, _
(PIC(k).Top - PIC(0).Top) / 1600 * PICG.ImH / C, _
PICG.ImW / C, PICG.ImH / C, _
vbSrcCopy
Next
'将分割得到的图像画如各PIC数组控件
End If
End Sub
Private Sub start_Click()
'移动PIC数组控件的位置得到要拼的图
If start.Caption = "Anew" Then
If PicN = "" Then
PICG.PicN = CommonDialog1.FileName '载入图片
End If
Image1.Picture = LoadPicture("")
Image1.Picture = LoadPicture(PICG.PicN)
start.Caption = "Start"
End If
If Image1.Picture <> LoadPicture("") Then '判断是否有图片载入
MM = 0: SS = 0 '时间置零
Renew '将PIC数组控件的位置复原
Dim a, b, C As Integer '移动图片的交换变量
PHid = Int((Nub + 1) * Rnd + 0) '随机取隐藏的PIC数组控件序号
For I = 1 To 50 '交换移动50次
For l = 0 To Nub
a = PIC(PHid).Left: b = PIC(PHid).Top
If PIC(l).Left = a + 1200 Or _
PIC(l).Left = a - 1200 Then '将左右PIC控件与之相移
If PIC(l).Top = b Then '将上下PIC控件与之相移
PIC(PHid).Left = PIC(l).Left
PIC(l).Left = a
End If
End If
If PIC(l).Top = b + 1600 Or _
PIC(l).Top = b - 1600 Then '同上
If PIC(l).Left = a Then
PIC(PHid).Top = PIC(l).Top
PIC(l).Top = b
End If
End If
Next
Next
PIC(PHid).Visible = False '隐藏该PIC控件
PHidL = PIC(PHid).Left: PHidT = PIC(PHid).Top
'得到不可见PIC控件的位置数据
PIC(PHid).Left = PL(PHid) '将其先放回原位置
PIC(PHid).Top = PT(PHid)
PICG.Mov = 1 '可移动变量
End If
End Sub
Private Sub Rude()
For l = 0 To Nub '得到原始的各PIC数组控件的位置数据
PL(l) = PIC(l).Left
PT(l) = PIC(l).Top
Next
PIC(PHid).Visible = True '隐藏PIC控件可见
End Sub
Private Sub Renew()
Watch.Text = "Time 00:00" '计时重画
For I = 0 To Nub '载入PIC数组控件的原始位置数据
PIC(I).Left = PL(I)
PIC(I).Top = PT(I)
Next
PICG.Mov = 0 '不能操作拼图
If Nub = 15 Then '隐藏PIC控件看情况置可见与否与否
PIC(PHid).Visible = True
Else
If PHid < 9 Then
PIC(PHid).Visible = True
End If
End If
Image1.Stretch = False
Image1.Visible = False
Image1.BorderStyle = 0 '调整Image1的边框样式得到图像的原始大小
PICG.ImH = Image1.Height '得到图像的大小尺寸
PICG.ImW = Image1.Width
For I = 0 To Nub
PIC(I).Visible = True '置各PIC控件于可见
Next
End Sub
Private Sub Form_Load()
Dim path As String
'PICG.Left = 10240 / 2 - PICG.Width / 2 '居中
'PICG.Top = 7680 / 2 - PICG.Height / 2
'在注册表中 HKEY_CURRENT_CONFIG_\ _
DISPLAY\SETTINGS\RSOLUTION "1024,768"
'从该键值里可知显示的分辨率
Nub = 15: Dif = 1 '控件数,难度为1
Watch.Text = "Time 00:00"
Rude '保存各PIC的原始位置数据
PicN = App.path & "\" & "pic01.jpg" '路径及图片
On Error GoTo EXSU
Image1.Picture = LoadPicture(PicN)
EXSU:
'无此文件
If Image1.Picture = LoadPicture("") Then
PICG.Mov = 0
Else
NEWPIC '调整各图片数组控件的位置及重画图像
End If
GTiM = 3
difficulty = True
End Sub
Private Sub pic_Click(Index As Integer)
Static a As Integer
Static b As Integer
'设置交换变量
If PICG.Mov = 1 Then '从隐藏的PIC控件处开始
'空白附近的PIC控件才可移动
If PIC(Index).Left = PHidL + 1200 _
Or PIC(Index).Left = PHidL - 1200 Then '水平移动
If PIC(Index).Top = PHidT Then
a = PIC(Index).Left
PIC(Index).Left = PHidL: PIC(Index).Top = PHidT
PHidL = a
End If
End If
If PIC(Index).Top = PHidT + 1600 Or _
PIC(Index).Top = PHidT - 1600 Then '上下移动
If PIC(Index).Left = PHidL Then
b = PIC(Index).Top
PIC(Index).Left = PHidL: PIC(Index).Top = PHidT
PHidT = b
End If
End If
WINER '判断是否胜利
End If
End Sub
Private Sub WINER()
For I = 0 To Nub
'通过PIC各数组控件位置数据的比较做出判断
If PIC(I).Left <> PL(I) Or PIC(I).Top <> PT(I) Then
Exit Sub
End If
Next I
For I = 0 To Nub
PIC(I).Visible = False '隐藏全部PIC控件
Next
If Nub > 8 Then '调整Image1的位置大小
Image1.Height = 6380: Image1.Width = 4800
Else
Image1.Height = 4780: Image1.Width = 3600
End If
Image1.Stretch = True
Image1.Visible = True
Image1.BorderStyle = 1 '显示边框
If Mov <> 0 Then '判断是过关调用还是高难过程调用
WIN.Show '过关
End If
Mov = 0
End Sub
Private Sub Timer1_Timer()
'计时器
If Mov = 0 Then '没进行拼图则退出
Exit Sub
End If
If SS > 59 Then '秒进分
MM = MM + 1: SS = 0
End If
If SS < 10 Then '当秒或分小于十时补前面一个字符“0”
If SS = 0 Then
ST = "00"
Else
ST = "0" & SS
End If
Else
ST = SS
End If
If MM < 10 Then
If MM = 0 Then
MT = "00"
Else
MT = "0" & MM
End If
Else
MT = MM
End If
SS = SS + 1 '秒进一
Watch.Text = "Time " & MT & ":" & ST '计时显示
If Hig = 0 Then '不是高难的游戏时间
If difficulty.Caption = "Hard" Then
GTiM = 1: GTiS = 30
Else
GTiM = 3
End If
End If
If MM = GTiM Then '时间到(分钟)
If GTiS <> 0 Then '判断秒
If SS <> GTiS + 1 Then
Exit Sub
End If
End If
TOVER = MsgBox("Time over,You lose !", vbOKOnly + vbExclamation, "GAME OVER")
Image1.Picture = LoadPicture("")
If PicN <> App.path & "\" & "pic01.jpg" Then
PicN = ""
End If
For I = 0 To 15
PIC(I).Left = PL(I)
PIC(I).Top = PT(I)
Next
Mov = 0
start.Caption = "Anew"
WINER '显示原拼图
End If
End Sub
下面是结束程序:
Public a As Integer
Private Sub Command1_Click()
Unload WIN '继续
End Sub
Private Sub Command2_Click()
End '退出
End Sub
Private Sub Form_Load()
If Val(PICG.MT) = 0 Then
TempT = Val(PICG.ST) & " Sec."
Else
If Val(PICG.ST) = 0 Then
TempT = Val(PICG.MT) & " Min."
Else
TempT = Val(PICG.MT) & " M " & PICG.ST & " S."
End If
End If
WIN.Caption = WIN.Caption & "( Use time : " & TempT & ")"
WIN.a = Picture1.Width '动画边界
End Sub
Private Sub Form_Unload(Cancel As Integer)
PICG.Show
PICG.start.SetFocus
End Sub
Private Sub Timer1_Timer()
Static b As Integer
If WIN.a >= 0 Then ' 动画边界
Picture1.Picture = LoadPicture("")
WIN.a = WIN.a - 100
Picture1.PaintPicture Image2.Picture, WIN.a, 0, _
Picture1.Width - WIN.a, Picture1.Height, _
0, 0, _
Picture1.Width - WIN.a, Picture1.Height, _
vbSrcCopy
'将图片从右往左移动
Else
b = b + 1 '完成退出
If b > 50 Then
Unload WIN: b = 0
End If
End If
End Sub
--------------------编程问答-------------------- 你认为哪是关键代码 --------------------编程问答-------------------- 就是比如属于是公式的 可以套用的 --------------------编程问答-------------------- 不妨说明具体哪几句不明白 --------------------编程问答-------------------- --------------------编程问答-------------------- 就像是要求把这个程序讲解一遍 用VB的知识
对运行的主要步骤进行分析说明
--------------------编程问答--------------------
这个的话,太费脑子了。要求别人帮忙,自己先要不懒哦。
补充:VB , 基础类