📄 tankproperty.bas
字号:
Attribute VB_Name = "TankAProperty"
Type TankAProperties
'Tank action
X As Integer
Y As Integer
Left As Integer
Top As Integer
Direction As Integer '0=stop 1=left 2=right 3=top 4=down
StopDirection As Integer '0=stop 1=left 2=right 3=top 4=down
Speed As Integer
RunOnce As Boolean
'Tank fire
Fire As Integer '0=stop 1=active
GunDirection As Integer '0=stop 1=left 2=right 3=top 4=down
BombX As Integer
BombY As Integer
Score As Integer
Life As Integer
End Type
Public TankA As TankAProperties
Public Function ControlTankAActive()
If TankA.RunOnce = False Then
Select Case TankA.Direction
Case 1 'Left
If Gp(TankA.X - 1, TankA.Y) = 0 Or Gp(TankA.X - 1, TankA.Y) = 4 Or Gp(TankA.X - 1, TankA.Y) = 3 Or Gp(TankA.X - 1, TankA.Y) = 6 Then
If TankA.X <> 1 Then
TankA.X = TankA.X - 1
TankA.RunOnce = True
End If
End If
Case 2 'Right
If Gp(TankA.X + 1, TankA.Y) = 0 Or Gp(TankA.X + 1, TankA.Y) = 4 Or Gp(TankA.X + 1, TankA.Y) = 3 Or Gp(TankA.X + 1, TankA.Y) = 6 Then
If TankA.X <> 18 Then
TankA.X = TankA.X + 1
TankA.RunOnce = True
End If
End If
Case 3 'Top
If Gp(TankA.X, TankA.Y - 1) = 0 Or Gp(TankA.X, TankA.Y - 1) = 4 Or Gp(TankA.X, TankA.Y - 1) = 3 Or Gp(TankA.X, TankA.Y - 1) = 6 Then
If TankA.Y <> 1 Then
TankA.Y = TankA.Y - 1
TankA.RunOnce = True
End If
End If
Case 4 'Down
If Gp(TankA.X, TankA.Y + 1) = 0 Or Gp(TankA.X, TankA.Y + 1) = 4 Or Gp(TankA.X, TankA.Y + 1) = 3 Or Gp(TankA.X, TankA.Y + 1) = 6 Then
If TankA.Y <> 14 Then
TankA.Y = TankA.Y + 1
TankA.RunOnce = True
End If
End If
End Select
End If
If TankA.Left > TankA.X * 25 Then TankA.Left = TankA.Left - TankA.Speed
If TankA.Left < TankA.X * 25 Then TankA.Left = TankA.Left + TankA.Speed
If TankA.Top > TankA.Y * 25 Then TankA.Top = TankA.Top - TankA.Speed
If TankA.Top < TankA.Y * 25 Then TankA.Top = TankA.Top + TankA.Speed
If TankA.Left = TankA.X * 25 And TankA.Top = TankA.Y * 25 Then
TankA.RunOnce = False
End If
End Function
Public Function ControlTankAFire()
If TankA.Fire = 1 Then
TankSound "fire"
Select Case TankA.StopDirection
Case 1 'Bomb to Left
TankA.BombX = (TankA.X - 1) * 25
TankA.BombY = TankA.Y * 25
TankA.GunDirection = 1
Case 2 'Bomb to right
TankA.BombX = (TankA.X + 1) * 25
TankA.BombY = TankA.Y * 25
TankA.GunDirection = 2
Case 3 'Bomb to top
TankA.BombX = TankA.X * 25
TankA.BombY = (TankA.Y - 1) * 25
TankA.GunDirection = 3
Case 4 'Bomb to down
TankA.BombX = TankA.X * 25
TankA.BombY = (TankA.Y + 1) * 25
TankA.GunDirection = 4
End Select
TankA.Fire = 2
Else
'防止炮弹位置在本程序内部使用数组Gp时溢出。
If TankA.BombX = -25 Then TankA.BombX = 0: TankA.Fire = 0
If TankA.BombY = -25 Then TankA.BombY = 0: TankA.Fire = 0
If TankA.BombX = 525 Then TankA.BombX = 500: TankA.Fire = 0
If TankA.BombY = 425 Then TankA.BombY = 400: TankA.Fire = 0
'炮弹移动及遇到障碍物炮弹应作出的反应。
If TankA.Fire = 2 And Gp(TankA.BombX \ 25, TankA.BombY \ 25) = 0 Or Gp(TankA.BombX \ 25, TankA.BombY \ 25) = 4 Or Gp(TankA.BombX \ 25, TankA.BombY \ 25) = 3 Then
Select Case TankA.GunDirection
Case 1
TankA.BombX = TankA.BombX - 25
Case 2
TankA.BombX = TankA.BombX + 25
Case 3
TankA.BombY = TankA.BombY - 25
Case 4
TankA.BombY = TankA.BombY + 25
End Select
Else
TankA.Fire = 0
End If
If TankA.Fire = 0 Then
If Gp(TankA.BombX \ 25, TankA.BombY \ 25) <> 2 And Gp(TankA.BombX \ 25, TankA.BombY \ 25) <> 0 Then '如果炮弹没有碰上水泥墙
TankA.Score = TankA.Score + 50
Let Gp(TankA.BombX \ 25, TankA.BombY \ 25) = 0
End If
TankA.BombX = 20 * 25
TankA.BombY = 16 * 25
End If
End If
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -