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

📄 form1.frm

📁 VB6+DX7开发即时战略游戏(游戏代码+编辑器)
💻 FRM
📖 第 1 页 / 共 4 页
字号:
                If Tile_Date(b, a).Pass = True And Tile_Date(c, a).Pass = True Then Ma_Date.CurPosY = Ma_Date.CurPosY - Ma_Date.Speed
            End If
        
        End If
        
        If Tile_Date(Ma_Date.CurPosX / BackgroundTile_Width, -Ma_Date.CurPosY / BackgroundTile_Height).MapIndex <> 0 Then
            Select Case Tile_Date(Ma_Date.CurPosX / BackgroundTile_Width, -Ma_Date.CurPosY / BackgroundTile_Height).MapIndex
                Case 1
                    CurrentMap = 1
                Case 2
                    CurrentMap = 2
                Case 1.1
                    CurrentMap = 1.1
            End Select
            InitNormalDate
        End If
        
    End If
    
    If diStateKeyboard.key(36) = 128 Then   'j  fire  开火
        'Randomize     '初始化种子
        For i = 0 To 30     '这里有三十颗子弹可以使用,数目可调
            If Ma_ZiDan_Date(i).Shotting = False And Ma_ZiDan_Date(i).Range = 0 Then  '如果子弹处于未发射状态
                Ma_ZiDan_Date(i).Shotting = True    '则射之
                Ma_ZiDan_Date(i).Range = ZiDan_Range    '单颗子弹的飞行时间,超出飞行时间则回收
                Ma_ZiDan_Date(i).FangXiang = Ma_Date.FangXiang        '子弹的方向和飞机的方向一致
                Ma_ZiDan_Date(i).CurPosX = Ma_Date.CurPosX '+ Rnd * 11 - 5   '给子弹一个随机的初始位置
                Ma_ZiDan_Date(i).CurPosY = Ma_Date.CurPosY '+ Rnd * 11 - 5   '制造一个效果,可能还行
                
                PlayShotWav     '播放射击时的声音
                
                Exit For    '每frame调用一颗子弹,调用完毕就退出循环
                
            End If
        Next i      '如果所有子弹都已被调用并且暂时还没有被回收,也退出循环,无弹可射
    End If
End If

If diStateKeyboard.key(22) = 128 Then   '开雷达
    Radar = True
End If
    
If diStateKeyboard.key(23) = 128 Then   '关雷达
    Radar = False
End If
    
SpeedControl

End Sub
Sub Run()
Do While Running
DoEvents
FrameNum = FrameNum + 1
DeviceEvent     '外设输入
Date_Change     '数据根据游戏规则改变
Blt             '表现图象
'PlayTankWav
'SpeedControl
Loop
End Sub
Sub InitSystemDate()
Running = True
Radar = True
CurrentMap = 1
End Sub

Private Sub Form_Unload(Cancel As Integer)
Running = False
Set D7 = Nothing
End
End Sub

Private Sub Timer1_Timer()
FPS = FrameNum
FrameNum = 0

End Sub

Sub PaintText()
Call BackbufferSurface.DrawText(10 + BackgroundTile_Width, 10 + BackgroundTile_Height, "FPS:" & FPS, False)
Call BackbufferSurface.DrawText(10 + BackgroundTile_Width, 30 + BackgroundTile_Height, "HP:" & Ma_Date.Hp, False)
Call BackbufferSurface.DrawText(10 + BackgroundTile_Width, 50 + BackgroundTile_Height, "SleepNum:" & SleepNum, False)
Call BackbufferSurface.DrawText(10 + BackgroundTile_Width, 70 + BackgroundTile_Height, "ma_date.curposx:" & Ma_Date.CurPosX, False)
Call BackbufferSurface.DrawText(10 + BackgroundTile_Width, 90 + BackgroundTile_Height, "ma_date.curposy:" & Ma_Date.CurPosY, False)

End Sub
Sub PlayShotWav()
Dim i As Integer
Dim k As DSCURSORS
For i = 0 To 5
    DoEvents
    Call ShotWav(i).GetCurrentPosition(k)
    If k.lPlay = 0 Then
        ShotWav(i).Play DSBPLAY_DEFAULT
        Exit For
    End If
Next i
End Sub
Sub PlayHitWav()
Dim i As Integer
Dim k As DSCURSORS
For i = 0 To 5  '独立的循环,用来混音
    DoEvents
    Call HitWav(i).GetCurrentPosition(k)
    If k.lPlay = 0 Then
        HitWav(i).Play DSBPLAY_DEFAULT
        Exit For
    End If
    
Next i
End Sub
Sub PlayTankWav()
TankWav.Play DSBPLAY_LOOPING
End Sub
Sub MA_ZiDan_Move()
Dim i As Integer
For i = 0 To 30     '计算每一颗子弹
    With Ma_ZiDan_Date(i)
        If .Range > 0 Then      '如果未超出射程,则计算本frame的位置
            .Range = .Range - 1
            Select Case .FangXiang
            
                Case FangXiang_Down
                    .CurPosY = .CurPosY - ZiDan_Speed
                Case FangXiang_Right
                    .CurPosX = .CurPosX + ZiDan_Speed
                Case FangXiang_Up
                    .CurPosY = .CurPosY + ZiDan_Speed
                Case FangXiang_Left
                    .CurPosX = .CurPosX - ZiDan_Speed
                
            End Select
        Else
            .Shotting = False   '超出射程的话,回收
        End If
    End With
Next i

End Sub
Sub Enemy_ZiDan_Move()
Dim i As Integer
For i = 0 To 30     '计算每一颗子弹
    With Enemy_ZiDan_Date(i)
        If .Range > 0 Then      '如果未超出射程,则计算本frame的位置
            .Range = .Range - 1
            Select Case .FangXiang
            
                Case FangXiang_Down
                    .CurPosY = .CurPosY - ZiDan_Speed
                Case FangXiang_Right
                    .CurPosX = .CurPosX + ZiDan_Speed
                Case FangXiang_Up
                    .CurPosY = .CurPosY + ZiDan_Speed
                Case FangXiang_Left
                    .CurPosX = .CurPosX - ZiDan_Speed
                
            End Select
        Else
            .Shotting = False   '超出射程的话,回收
        End If
    End With
Next i
End Sub

Sub Date_Change()
MA_ZiDan_Move
Enemy_ZiDan_Move
Enemy1_AI_Change
Enemy1_Fire
Enemy1_Move
Hit_Test
Hit_Date_Change
Destroy_Date_Change

End Sub
Sub Enemy1_Move()
Dim i As Integer
Dim a As Integer
Dim b As Integer
Dim c As Integer

For i = 0 To 9
    With Enemy1_Date(i)
        Select Case .FangXiang
            Case FangXiang_Down
                a = Int(-(Enemy1_Date(i).CurPosY - Enemy1_Speed - Enemy1_Date(i).R) / BackgroundTile_Height)
                b = Int((Enemy1_Date(i).CurPosX - Enemy1_Date(i).R) / BackgroundTile_Width)
                c = Int((Enemy1_Date(i).CurPosX + Enemy1_Date(i).R) / BackgroundTile_Width)
                If Tile_Date(b, a).Pass = True And Tile_Date(c, a).Pass = True Then Enemy1_Date(i).CurPosY = Enemy1_Date(i).CurPosY - Enemy1_Speed
            Case FangXiang_Right
                a = Int((Enemy1_Date(i).CurPosX + Enemy1_Speed + Enemy1_Date(i).R) / BackgroundTile_Width)
                b = Int(-(Enemy1_Date(i).CurPosY - Enemy1_Date(i).R) / BackgroundTile_Height)
                c = Int(-(Enemy1_Date(i).CurPosY + Enemy1_Date(i).R) / BackgroundTile_Height)
                If Tile_Date(a, b).Pass = True And Tile_Date(a, c).Pass = True Then Enemy1_Date(i).CurPosX = Enemy1_Date(i).CurPosX + Enemy1_Speed
            Case FangXiang_Up
                a = Int(-(Enemy1_Date(i).CurPosY + Enemy1_Speed + Enemy1_Date(i).R) / BackgroundTile_Height)
                b = Int((Enemy1_Date(i).CurPosX - Enemy1_Date(i).R) / BackgroundTile_Width)
                c = Int((Enemy1_Date(i).CurPosX + Enemy1_Date(i).R) / BackgroundTile_Width)
                If Tile_Date(b, a).Pass = True And Tile_Date(c, a).Pass = True Then Enemy1_Date(i).CurPosY = Enemy1_Date(i).CurPosY + Enemy1_Speed
            Case FangXiang_Left
                a = Int((Enemy1_Date(i).CurPosX - Enemy1_Speed - Enemy1_Date(i).R) / BackgroundTile_Width)
                b = Int(-(Enemy1_Date(i).CurPosY - Enemy1_Date(i).R) / BackgroundTile_Height)
                c = Int(-(Enemy1_Date(i).CurPosY + Enemy1_Date(i).R) / BackgroundTile_Height)
                If Tile_Date(a, b).Pass = True And Tile_Date(a, c).Pass = True Then Enemy1_Date(i).CurPosX = Enemy1_Date(i).CurPosX - Enemy1_Speed
        End Select
        
    End With

Next i


End Sub
Sub Enemy1_AI_Change()
Dim i As Integer

For i = 0 To 9
    Randomize
    With Enemy1_Date(i)
        
        If .AI_Time > 0 Then
            .AI_Time = .AI_Time - 1
        Else
            .AI_Time = Enemy1_AI_Time
            .FangXiang = Rnd * 3
        End If

    End With
    
Next i


End Sub
Sub Enemy1_Fire()
Dim i As Integer
Dim j As Integer

If Ma_Date.Hp > 0 Then
    
    For i = 0 To 9
        With Enemy1_Date(i)
            If .Hp > 0 Then
                If Abs(.CurPosX - Ma_Date.CurPosX) < .R And Abs(.CurPosY - Ma_Date.CurPosY) <= DisplayWidth / 2 Then
                    If Ma_Date.CurPosY >= .CurPosY And .FangXiang = FangXiang_Up Then
                        For j = 0 To 30     '敌机调用子弹
                            DoEvents
                            With Enemy_ZiDan_Date(j)
                                If .Shotting = False Then
                                    .Shotting = True
                                    .FangXiang = Enemy1_Date(i).FangXiang
                                    .CurPosX = Enemy1_Date(i).CurPosX
                                    .CurPosY = Enemy1_Date(i).CurPosY
                                    .Range = ZiDan_Range
                                    
                                    PlayShotWav     '播放射击时的声音
                                    
                                    Exit For        '调用一颗子弹后退出
                                    
                                End If
                                
                            End With
                        
                        Next j      '无弹可射也退出
                        
                    End If
                    
                    If Ma_Date.CurPosY < .CurPosY And .FangXiang = FangXiang_Down Then
                        For j = 0 To 30     '敌机调用子弹
                            DoEvents
                            With Enemy_ZiDan_Date(j)
                                If .Shotting = False Then
                                    .Shotting = True
                                    .FangXiang = Enemy1_Date(i).FangXiang
                                    .CurPosX = Enemy1_Date(i).CurPosX
                                    .CurPosY = Enemy1_Date(i).CurPosY
                                    .Range = ZiDan_Range
                                    
                                    PlayShotWav     '播放射击时的声音
                                    
                                    Exit For        '调用一颗子弹后退出
                                    
                                End If
                                
                            End With
                        
                        Next j      '无弹可射也退出
                    End If
                    
                End If
            
                If Abs(.CurPosY - Ma_Date.CurPosY) < .R And Abs(.CurPosX - Ma_Date.CurPosX) <= DisplayWidth / 2 Then
                    If Ma_Date.CurPosX >= .CurPosX And .FangXiang = FangXiang_Right Then
                        For j = 0 To 30     '敌机调用子弹
                            DoEvents
                            With Enemy_ZiDan_Date(j)
                                If .Shotting = False Then
                                    .Shotting = True
                                    .FangXiang = Enemy1_Date(i).FangXiang
                                    .CurPosX = Enemy1_Date(i).CurPosX
                                    .CurPosY = Enemy1_Date(i).CurPosY
                                    .Range = ZiDan_Range
                                    
                                    PlayShotWav     '播放射击时的声音
                                    
                                    Exit For        '调用一颗子弹后退出
                                    
                                End If
                                
                            End With
                        
                        Next j      '无弹可射也退出
                    End If
                    
                    If Ma_Date.CurPosX < .CurPosX And .FangXiang = FangXiang_Left Then
                        For j = 0 To 30     '敌机调用子弹
                            DoEvents
                            With Enemy_ZiDan_Date(j)
                                If .Shotting = False Then
                                    .Shotting = True
                                    .FangXiang = Enemy1_Date(i).FangXiang
                                    .CurPosX = Enemy1_Date(i).CurPosX
                                    .CurPosY = Enemy1_Date(i).CurPosY
                                    .Range = ZiDan_Range
                                    
                                    PlayShotWav     '播放射击时的声音
                                    
                                    Exit For        '调用一颗子弹后退出
                                    
                                End If
                                
                            End With
                        
                        Next j      '无弹可射也退出
                    End If
                
                End If
            End If
        End With
        
    Next i
End If

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -