📄 frmmain.frm
字号:
' 「VB6.0中文专业版彻底研究」
' 帅帅阿柳提供
'VB编程乐园 http://www.vbeden.com
Option Explicit
Dim intWait As Integer
Const Distance = 300 '玩家每次移动的距离
Const MaxFired = 3 '发射气功的最大值
Const WallDistance = 30
Const FiredDistance = 300
Const NumberOfWall = 3
Dim NumberFired(0 To 1) As Integer '用来指出左玩家及右玩家是否在发射气功
Dim intAudio As Integer '是否有音效卡
Public Sub Delay()
' 纯粹为了让时间稍为延迟,以免动画显示不出效果
tmrDelay.Enabled = True
Do While intWait < 1
DoEvents
Loop
intWait = 0
tmrDelay.Enabled = False
End Sub
Private Function IsInteracted(imgA As Image, imgB As Image) As Integer
Dim A As tRect
Dim B As tRect
Dim ResultRect As tRect
A.Left = imgA.Left
A.Top = imgA.Top
B.Left = imgB.Left
B.Top = imgB.Top
A.Right = A.Left + imgA.Width - 1
A.Bottom = A.Top + imgA.Height - 1
B.Right = B.Left + imgB.Width - 1
B.Bottom = B.Top + imgB.Height - 1
'利用API函数检查两块区域是否交替了
IsInteracted = IntersectRect(ResultRect, A, B)
End Function
Private Sub Form_Load()
'VB爱好者乐园整理 http://yingzi007.126.com
Dim i As Integer
' 检查有无音效卡
intAudio = waveOutGetNumDevs()
tmrMove.Interval = 25
tmrMove.Enabled = False
For i = 1 To MaxFired - 1
Load imgFireL(i)
Load imgFireR(i)
Next
frmHelp.Show vbModal
End Sub
Private Sub cmdStart_Click()
Dim rc As Integer
If intAudio Then
rc = sndPlaySound(App.Path & "\playstart.WAV", SND_ASYNC)
End If
imgDead.Visible = False
imgLeft(0).Visible = True
imgRight(0).Visible = True
tmrMove.Enabled = True
cmdStart.Enabled = False
picBK.SetFocus
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim rc As Integer
If Not tmrMove.Enabled Then Exit Sub
DoEvents
Select Case KeyCode
' 左边玩家的事件
Case vbKeyW
imgLeft(0).Top = imgLeft(0).Top - Distance
If imgLeft(0).Top < 0 Then imgLeft(0).Top = 0
Case vbKeySpace
NumberFired(0) = True
Case vbKeyX
imgLeft(0).Top = imgLeft(0).Top + Distance
If imgLeft(0).Top > (picBK.ScaleHeight - imgLeft(0).Height) Then
imgLeft(0).Top = picBK.ScaleHeight - imgLeft(0).Height
End If
' 右边玩家的事件
Case vbKeyUp
imgRight(0).Top = imgRight(0).Top - Distance
If imgRight(0).Top < 0 Then imgRight(0).Top = 0
Case vbKeyShift
NumberFired(1) = True
Case vbKeyDown
imgRight(0).Top = imgRight(0).Top + Distance
If imgRight(0).Top > (picBK.ScaleHeight - imgRight(0).Height) Then
imgRight(0).Top = picBK.ScaleHeight - imgRight(0).Height
End If
End Select
End Sub
Private Sub tmrMove_Timer()
Dim i As Integer
Dim j As Integer
Dim rc As Integer
'移动土墙
For i = 0 To NumberOfWall - 1
imgWall(i).Top = imgWall(i).Top - WallDistance
If imgWall(i).Top < -imgWall(i).Height Then
imgWall(i).Top = picBK.Height
End If
Next
' 左边的玩家发射气功
If NumberFired(0) Then
NumberFired(0) = False
' 找出一个尚可使用的气功图形
For i = 0 To MaxFired - 1
If Not imgFireL(i).Visible Then
' 绘制发射气功的动画
imgLeft(0).Picture = imgLeft(1).Picture
imgLeft(0).Refresh
Delay
imgLeft(0).Picture = imgLeft(2).Picture
imgLeft(0).Refresh
Delay
imgLeft(0).Picture = imgLeft(3).Picture
imgLeft(0).Refresh
Delay
imgLeft(0).Picture = imgLeft(4).Picture
imgLeft(0).Refresh
imgFireL(i).Top = imgLeft(0).Top
imgFireL(i).Left = imgLeft(0).Left + (imgLeft(0).Width / 2)
imgFireL(i).Visible = True
If intAudio Then
rc = sndPlaySound(App.Path & "\shoot.WAV", SND_ASYNC)
End If
Exit For
End If
Next
End If
' 右边的玩家发射气功
If NumberFired(1) Then
NumberFired(1) = False
' 找出一个尚可使用的气功图形
For i = 0 To MaxFired - 1
If Not imgFireR(i).Visible Then
' 绘制发射气功的动画
imgRight(0).Picture = imgRight(1).Picture
imgRight(0).Refresh
Delay
imgRight(0).Picture = imgRight(2).Picture
imgRight(0).Refresh
Delay
imgRight(0).Picture = imgRight(3).Picture
imgRight(0).Refresh
Delay
imgRight(0).Picture = imgRight(4).Picture
imgRight(0).Refresh
imgFireR(i).Top = imgRight(0).Top
imgFireR(i).Left = imgRight(0).Left - (imgRight(0).Width / 2)
imgFireR(i).Visible = True
If intAudio Then
rc = sndPlaySound(App.Path & "\shoot.WAV", SND_ASYNC)
End If
Exit For
End If
Next
End If
' 移动可见的气功
For i = 0 To MaxFired - 1
' 移动左边玩家发射的气功
If imgFireL(i).Visible Then
imgFireL(i).Left = imgFireL(i).Left + FiredDistance
'气功撞到墙
If IsInteracted(imgFireL(i), imgWall(0)) Then
imgFireL(i).Visible = False
ElseIf IsInteracted(imgFireL(i), imgWall(1)) Then
imgFireL(i).Visible = False
ElseIf IsInteracted(imgFireL(i), imgWall(2)) Then
imgFireL(i).Visible = False
'射到底了
ElseIf imgFireL(i).Left > picBK.ScaleWidth Then
imgFireL(i).Visible = False
'K到了!
ElseIf IsInteracted(imgFireL(i), imgRight(0)) Then
For j = 0 To MaxFired - 1
imgFireL(j).Visible = False
imgFireR(j).Visible = False
Next
imgDead.Move imgRight(0).Left + 800, imgRight(0).Top + 50
imgDead.Visible = True
imgRight(0).Visible = False
tmrMove.Enabled = False
If intAudio Then
rc = sndPlaySound(App.Path & "\dead.WAV", SND_ASYNC)
End If
cmdStart.Caption = "重玩(&R)"
cmdStart.Enabled = True
End If
End If
' 移动左边玩家发射的气功
If imgFireR(i).Visible Then
imgFireR(i).Left = imgFireR(i).Left - FiredDistance
'气功撞到墙
If IsInteracted(imgFireR(i), imgWall(0)) Then
imgFireR(i).Visible = False
ElseIf IsInteracted(imgFireR(i), imgWall(1)) Then
imgFireR(i).Visible = False
ElseIf IsInteracted(imgFireR(i), imgWall(2)) Then
imgFireR(i).Visible = False
'射到底了
ElseIf imgFireR(i).Left < -imgFireR(i).Width Then
imgFireR(i).Visible = False
'K到了!
ElseIf IsInteracted(imgFireR(i), imgLeft(0)) Then
For j = 0 To MaxFired - 1
imgFireR(j).Visible = False
imgFireL(j).Visible = False
Next
imgDead.Move imgLeft(0).Left + 100, imgLeft(0).Top + 50
imgDead.Visible = True
imgLeft(0).Visible = False
tmrMove.Enabled = False
If intAudio Then
rc = sndPlaySound(App.Path & "\dead.WAV", SND_ASYNC)
End If
cmdStart.Caption = "重玩(&R)"
cmdStart.Enabled = True
End If
End If
Next
End Sub
Private Sub tmrDelay_Timer()
intWait = intWait + 1
End Sub
Private Sub cmdAbout_Click()
frmHelp.Show vbModal
End Sub
Private Sub cmdExit_Click()
Unload Me
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -