📄 youxi.frm
字号:
Left = 0
Picture = "youxi.frx":3E421
Top = 1800
Width = 1650
End
End
End
Attribute VB_Name = "youxi"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
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()
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
shuoming.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
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 picBK_KeyDown(KeyCode As Integer, Shift As Integer)
Call Form_KeyDown(KeyCode, Shift)
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()
shuoming.Show vbModal
End Sub
Private Sub cmdExit_Click()
Unload Me
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -