📄 form1.frm
字号:
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 + -