⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 youxi.frm

📁 这是一个格斗游戏:开发雨衣:vb 。 很好玩的。
💻 FRM
📖 第 1 页 / 共 2 页
字号:
         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 + -