16,549
社区成员
发帖
与我相关
我的任务
分享
Public Sub gengxinPaodan() '更新炮弹位置
If Not youxiShiFouJieShu Then
paodanChongfu()
paodanPengzhuang()
Dim wjpd1 As New List(Of PaoDan)
For Each p As PaoDan In WJpd
jianchaPD(p)
If p.pdHuoLi <> 0 Then
Dim p00 As PaoDan = p
Dim p0 As New Point(p.pdWeiZhiX \ danWei, p.pdWeiZhiY \ danWei)
Dim p1 As Point
Select Case p.pdFanXiang
Case 1, 2
p1 = New Point(p0.X + 1, p0.Y)
Case 3, 4
p1 = New Point(p0.X, p0.Y + 1)
End Select
If (DiTu(p0.X, p0.Y) = 0 Or DiTu(p0.X, p0.Y) = 77 Or DiTu(p0.X, p0.Y) = 55) And (DiTu(p1.X, p1.Y) = 0 Or DiTu(p1.X, p1.Y) = 77 Or DiTu(p1.X, p1.Y) = 55) Then
Select Case p.pdFanXiang
Case 1
p00.pdWeiZhiY -= danWei
Case 2
p00.pdWeiZhiY += danWei
Case 3
p00.pdWeiZhiX -= danWei
Case 4
p00.pdWeiZhiX += danWei
End Select
wjpd1.Add(p00)
Else
If DiTu(p0.X, p0.Y) = 66 Then DiTu(p0.X, p0.Y) = 0
If DiTu(p1.X, p1.Y) = 66 Then DiTu(p1.X, p1.Y) = 0
If DiTu(p0.X, p0.Y) = 88 And p.pdHuoLi >= 40 Then DiTu(p0.X, p0.Y) = 0
If DiTu(p1.X, p1.Y) = 88 And p.pdHuoLi >= 40 Then DiTu(p1.X, p1.Y) = 0
End If
If DiTu(p0.X, p0.Y) = 99 Or DiTu(p1.X, p1.Y) = 99 Then
shengMing -= p.pdHuoLi
If shengMing <= 0 Then
youxiShiFouJieShu = True
End If
End If
End If
Next
WJpd.Clear()
WJpd = wjpd1
End If
End Sub
Public Sub xinPaoDan(ByVal tk As TanKe) '产生新炮弹
Dim p As New PaoDan
p.pdFanXiang = tk.FangXiang
p.pdHuoLi = tk.HuoLi
Select Case p.pdFanXiang
Case 1
p.pdWeiZhiX = tk.WeiZhiX
p.pdWeiZhiY = tk.WeiZhiY - danWei
Case 2
p.pdWeiZhiX = tk.WeiZhiX
p.pdWeiZhiY = tk.WeiZhiY + 2 * danWei
Case 3
p.pdWeiZhiX = tk.WeiZhiX - danWei
p.pdWeiZhiY = tk.WeiZhiY
Case 4
p.pdWeiZhiX = tk.WeiZhiX + 2 * danWei
p.pdWeiZhiY = tk.WeiZhiY
End Select
WJpd.Add(p)
End Sub
Private Function HPaoDan(ByVal pd As PaoDan, ByVal PDbianhao As Integer) As Bitmap '根据方向绘制炮弹
Dim bmpPD As Bitmap = New Bitmap(danWei, danWei)
Dim ea As Drawing.Graphics = Graphics.FromImage(bmpPD)
Select Case PDbianhao
Case 1
ea.DrawImage(My.Resources.pd1, 0, 0, danWei, danWei)
Case 2
ea.DrawImage(My.Resources.pd2, 0, 0, danWei, danWei)
Case 3
ea.DrawImage(My.Resources.pd3, 0, 0, danWei, danWei)
End Select
Select Case pd.pdFanXiang
Case 1
Case 2
bmpPD.RotateFlip(RotateFlipType.Rotate180FlipNone)
Case 3
bmpPD.RotateFlip(RotateFlipType.Rotate270FlipNone)
Case 4
bmpPD.RotateFlip(RotateFlipType.Rotate90FlipNone)
Case Else
End Select
Return bmpPD
ea.Dispose()
bmpPD.Dispose()
End Function
Private Sub jianchaPD(ByVal p As PaoDan) '检查炮弹是否击中坦克
Dim p0 As New Point(p.pdWeiZhiX \ danWei, p.pdWeiZhiY \ danWei)
Dim p1 As Point
Select Case p.pdFanXiang
Case 1, 2
p1 = New Point(p0.X + 1, p0.Y)
Case 3, 4
p1 = New Point(p0.X, p0.Y + 1)
End Select
Dim ddtk As New List(Of TanKe)
For i As Integer = 0 To diduiTanKe.Count - 1
Dim T As TanKe = diduiTanKe.Item(i)
Dim t0 As New Point(T.WeiZhiX \ danWei, T.WeiZhiY \ danWei)
Dim t1 As New Point(T.WeiZhiX \ danWei + 1, T.WeiZhiY \ danWei)
Dim t2 As New Point(T.WeiZhiX \ danWei, T.WeiZhiY \ danWei + 1)
Dim t3 As New Point(T.WeiZhiX \ danWei + 1, T.WeiZhiY \ danWei + 1)
If (p0 = t0 Or p0 = t1 Or p0 = t2 Or p0 = t3 Or p1 = t0 Or p1 = t1 Or p1 = t2 Or p1 = t3) And (p.pdHuoLi = 20 Or p.pdHuoLi = 70 Or p.pdHuoLi = 25 Or p.pdHuoLi = 75) Then
T.ShengMing -= p.pdHuoLi
If T.ShengMing < 0 Then
If p.pdHuoLi = 20 Or p.pdHuoLi = 70 Then
wj1JiHui.Add(T.WaiXing)
ElseIf p.pdHuoLi = 25 Or p.pdHuoLi = 75 Then
wj2JiHui.Add(T.WaiXing)
End If
T.HuoLi = 10
T.ShengMing = 20
Randomize()
T.FangXiang = Int(Rnd() * 4 + 1)
Randomize()
T.WeiZhiX = Int(Rnd() * 26 + 4) * danWei
T.WeiZhiY = danWei
T.WaiXing = Int(Rnd() * 7 + 3)
jihuiTKshuliang += 1
If jihuiTKshuliang Mod 6 = 0 And Not xianshiBaowu Then KongTuBaoWu()
ddtk.Add(T)
p.pdHuoLi = 0
DiTu(p0.X, p0.Y) += 100
Else
p.pdHuoLi = 0
ddtk.Add(T)
End If
Else
ddtk.Add(diduiTanKe.Item(i))
End If
Next
diduiTanKe.Clear()
diduiTanKe = ddtk
Dim wj1p0 As Point = New Point(WJ1.WeiZhiX \ danWei, WJ1.WeiZhiY \ danWei)
Dim wj1p1 As Point = New Point(WJ1.WeiZhiX \ danWei + 1, WJ1.WeiZhiY \ danWei)
Dim wj1p2 As Point = New Point(WJ1.WeiZhiX \ danWei, WJ1.WeiZhiY \ danWei + 1)
Dim wj1p3 As Point = New Point(WJ1.WeiZhiX \ danWei + 1, WJ1.WeiZhiY \ danWei + 1)
If p1 = wj1p0 Or p1 = wj1p1 Or p1 = wj1p2 Or p1 = wj1p3 Or p1 = wj1p0 Or p1 = wj1p1 Or p1 = wj1p2 Or p1 = wj1p3 And (p.pdHuoLi = 10 Or p.pdHuoLi = 60) Then
WJ1.ShengMing -= p.pdHuoLi
If WJ1.ShengMing < 0 Then
wj1ShengyuMing -= 1
If wj1ShengyuMing > 0 Then
With WJ1
.ShengMing = 100
.WeiZhiX = danWei * 12
.WeiZhiY = danWei * 29
.SuDu = 25
.FangXiang = 1
.HuoLi = 20
.WaiXing = 2
End With
Else
If WanJiaShu = 1 Then
youxiShiFouJieShu = True
End If
End If
End If
p.pdHuoLi = 0
End If
Dim wj2p0 As Point = New Point(WJ2.WeiZhiX \ danWei, WJ2.WeiZhiY \ danWei)
Dim wj2p1 As Point = New Point(WJ2.WeiZhiX \ danWei + 1, WJ2.WeiZhiY \ danWei)
Dim wj2p2 As Point = New Point(WJ2.WeiZhiX \ danWei, WJ2.WeiZhiY \ danWei + 1)
Dim wj2p3 As Point = New Point(WJ2.WeiZhiX \ danWei + 1, WJ2.WeiZhiY \ danWei + 1)
If p1 = wj2p0 Or p1 = wj2p1 Or p1 = wj2p2 Or p1 = wj2p3 Or p0 = wj2p0 Or p0 = wj2p1 Or p0 = wj2p2 Or p0 = wj2p3 And (p.pdHuoLi = 10 Or p.pdHuoLi = 60) Then
WJ2.ShengMing -= p.pdHuoLi
If WJ2.ShengMing < 0 Then
wj2ShengyuMing -= 1
If wj2ShengyuMing > 0 Then
With WJ2
.ShengMing = 100
.WeiZhiX = danWei * 18
.WeiZhiY = danWei * 29
.SuDu = 25
.FangXiang = 1
.HuoLi = 25
.WaiXing = 1
End With
Else
If WanJiaShu = 2 And wj1ShengyuMing < 0 Then
youxiShiFouJieShu = True
End If
End If
End If
p.pdHuoLi = 0
End If
End Sub
Private Sub paodanPengzhuang() '炮弹碰撞
For i As Integer = 0 To WJpd.Count - 2
For j As Integer = i + 1 To WJpd.Count - 1
If WJpd.Item(i).pdWeiZhiX = WJpd.Item(j).pdWeiZhiX And WJpd.Item(i).pdWeiZhiY = WJpd.Item(j).pdWeiZhiY Then
If WJpd.Item(i).pdHuoLi > 0 And WJpd.Item(i).pdHuoLi <> WJpd.Item(j).pdHuoLi Then
WJpd.Item(i).pdHuoLi = 0
WJpd.Item(j).pdHuoLi = 0
Exit For
End If
End If
Next
Next
End Sub
Private Sub paodanChongfu() '合并重复炮弹
Dim pdL As New List(Of PaoDan)
For i As Integer = 0 To WJpd.Count - 2
Dim t As PaoDan = WJpd.Item(i)
Dim a As Boolean = False
If t.pdHuoLi <> 0 Then
For j As Integer = i + 1 To WJpd.Count - 1
If t.pdWeiZhiX = WJpd.Item(j).pdWeiZhiX And t.pdWeiZhiY = WJpd.Item(j).pdWeiZhiY And t.pdHuoLi = WJpd.Item(j).pdHuoLi And t.pdFanXiang = WJpd.Item(j).pdFanXiang Then a = True
Next
If a Then
Else
pdL.Add(t)
End If
End If
Next
WJpd.Clear()
WJpd = pdL
End Sub