16,554
社区成员
发帖
与我相关
我的任务
分享
AxWindowsMediaPlayer1.settings.autoStart = True
AxWindowsMediaPlayer1.URL = My.Application.Info.DirectoryPath + "\网络歌手-战争背景游戏音乐.mp3"
AxWindowsMediaPlayer1.Ctlcontrols.play()
Public Sub playS() '播放爆炸音效
Dim myPlayer1 As New System.Media.SoundPlayer
myPlayer1.Stream = My.Resources.baozhaYin
myPlayer1.Play()
End Sub
Public Sub newT() '产生新线程播放爆炸音效
Dim newThread As New System.Threading.Thread(AddressOf playS)
newThread.Start()
End Sub
Public Function HuiTu() As Bitmap '绘游戏画面
。。。
Case 177, 155, 100 '爆炸
ea.DrawImage(My.Resources.baoza, i * danWei, j * danWei, danWei, danWei)
newT()
DiTu(i, j) -= 100
。。。
End Function
Public Sub Kaichang(ByVal pic As PictureBox, ByVal PicY As Integer) '开场场景
Dim bmp As Bitmap = New Bitmap(pic.Width, pic.Height)
Dim e As Graphics = Graphics.FromImage(bmp)
e.DrawImage(My.Resources.t0, New Rectangle(0, 0, bmp.Width, PicY * pic.Height \ 40), New Rectangle(0, My.Resources.t0.Height \ 2 - PicY * My.Resources.t0.Height \ 40, My.Resources.t0.Width, PicY * My.Resources.t0.Height \ 40), System.Drawing.GraphicsUnit.Pixel)
e.DrawImage(My.Resources.t0, New Rectangle(0, pic.Height - PicY * pic.Height \ 40, bmp.Width, PicY * pic.Height \ 40), New Rectangle(0, My.Resources.t0.Height \ 2, My.Resources.t0.Width, PicY * My.Resources.t0.Height \ 40), System.Drawing.GraphicsUnit.Pixel)
pic.Image = bmp
e.Dispose()
End Sub
'用Timer3控制,其Interval 设置为100
Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
pppp += 4
Kaichang(PictureBox10, pppp)
If pppp >= 20 Then
pppp = 0
Timer3.Enabled = False
End If
End Sub
Public WanJiaShu As Integer = 1 '玩家数量,1或2个
Public WJ1 As New TanKe, WJ2 As New TanKe '定义玩家坦克
Public WJpd As New List(Of PaoDan) '定义炮弹
Public Const danWei As Integer = 25 '地图单位大小
Public DiTu(33, 33) As Integer '地图数组,地图长宽850*850像素
Public youxiShiFouJieShu As Boolean = False '游戏是否结束
Public shengMing As Integer = 100 '军火库生命值
Public diduiTanKe As New List(Of TanKe) '定义敌对坦克
Public ddTkshuliang As Integer = 6 '敌对坦克数量
Public wj1ShengyuMing As Integer, wj2ShengyuMing As Integer '剩余命数量
Public jihuiTKshuliang As Integer = 0 '击毁坦克数量
Public DiTuXuHao As Integer = 1 '地图序号
Public Const ggxjhtks As Integer = 15 '过关需击毁坦克数
Public zhengzaiYouXi As Boolean = False '游戏状态:游戏是否正在进行
Public myPlayer As New System.Media.SoundPlayer '播放声音(爆炸音)
Public xBaoWu As New BaoWu '定义宝物
Public xianshiBaowu As Boolean = False '显示宝物
Public wjBuKeYiDong As Boolean = False '玩家不可以移动
Public ddTankeBuKeYiDong As Boolean = False '敌对坦克不可以移动
Public map As Bitmap = New Bitmap(850, 850) '画面
Public ea As Drawing.Graphics = Graphics.FromImage(map) '画板
Public wj1JiHui As New List(Of Integer) '记录玩家1击毁的坦克
Public wj2JiHui As New List(Of Integer) '记录玩家2击毁的坦克
Private Function HTanKe(ByVal tk As TanKe) As Bitmap '根据方向绘制坦克
Dim bmpTK As Bitmap = New Bitmap(danWei, danWei)
Dim ea As Drawing.Graphics = Graphics.FromImage(bmpTK)
ea.DrawImage(wxTanKe(tk.WaiXing), 0, 0, danWei, danWei)
Select Case tk.FangXiang
Case 1
Case 2
bmpTK.RotateFlip(RotateFlipType.Rotate180FlipNone)
Case 3
bmpTK.RotateFlip(RotateFlipType.Rotate270FlipNone)
Case 4
bmpTK.RotateFlip(RotateFlipType.Rotate90FlipNone)
Case Else
End Select
Return bmpTK
ea.Dispose()
bmpTK.Dispose()
End Function
Private Function wxTanKe(ByVal w As Integer) As Bitmap '根据外型指定图片
Dim bmp As Bitmap = Nothing
Select Case w
Case 1 : bmp = My.Resources.t1
Case 2 : bmp = My.Resources.t2
Case 3 : bmp = My.Resources.t3
Case 4 : bmp = My.Resources.t4
Case 5 : bmp = My.Resources.t5
Case 6 : bmp = My.Resources.t6
Case 7 : bmp = My.Resources.t7
Case 8 : bmp = My.Resources.t8
Case 9 : bmp = My.Resources.t9
Case Else
End Select
Return bmp
bmp.Dispose()
End Function
Public Function TanKeYiDong(ByVal tk As TanKe) As Boolean '判断坦克是否可移动
Dim a As Boolean = False
Dim dx As Integer = tk.WeiZhiX \ danWei
Dim dy As Integer = tk.WeiZhiY \ danWei
Select Case tk.FangXiang
Case 1
If (DiTu(dx, dy - 1) = 0 Or DiTu(dx, dy - 1) = 77) And Not tankeChongdie(New Point(dx, dy - 1), New Point(dx + 1, dy - 1)) And (DiTu(dx + 1, dy - 1) = 0 Or DiTu(dx + 1, dy - 1) = 77) Then a = True
Case 2
If (DiTu(dx, dy + 2) = 0 Or DiTu(dx, dy + 2) = 77) And Not tankeChongdie(New Point(dx, dy + 2), New Point(dx + 1, dy + 2)) And (DiTu(dx + 1, dy + 2) = 0 Or DiTu(dx + 1, dy + 2) = 77) Then a = True
Case 3
If (DiTu(dx - 1, dy) = 0 Or DiTu(dx - 1, dy) = 77) And Not tankeChongdie(New Point(dx - 1, dy), New Point(dx - 1, dy + 1)) And (DiTu(dx - 1, dy + 1) = 0 Or DiTu(dx - 1, dy + 1) = 77) Then a = True
Case 4
If (DiTu(dx + 2, dy) = 0 Or DiTu(dx + 2, dy) = 77) And Not tankeChongdie(New Point(dx + 2, dy), New Point(dx + 2, dy + 1)) And (DiTu(dx + 2, dy + 1) = 0 Or DiTu(dx + 2, dy + 1) = 77) Then a = True
End Select
Return a
End Function
Private Function tankeChongdie(ByVal p1 As Point, ByVal p2 As Point) As Boolean '判断某两点是否有坦克
Dim a As Boolean = False
For i As Integer = 0 To diduiTanKe.Count - 1
Dim pd0 As Point = New Point(diduiTanKe.Item(i).WeiZhiX \ danWei, diduiTanKe.Item(i).WeiZhiY \ danWei)
Dim pd1 As Point = New Point(pd0.X + 1, pd0.Y)
Dim pd2 As Point = New Point(pd0.X, pd0.Y + 1)
Dim pd3 As Point = New Point(pd0.X + 1, pd0.Y + 1)
If p1 = pd0 Or p1 = pd1 Or p1 = pd2 Or p1 = pd3 Or p2 = pd0 Or p2 = pd1 Or p2 = pd2 Or p2 = pd3 Then
a = True
Exit For
End If
Next
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 p2 = wj1p0 Or p2 = wj1p1 Or p2 = wj1p2 Or p2 = wj1p3 Then a = True
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 p2 = wj2p0 Or p2 = wj2p1 Or p2 = wj2p2 Or p2 = wj2p3 Then a = True
Return a
End Function
Public Sub tkYD() '坦克自动移动
If ddTankeBuKeYiDong Then
Else
For i As Integer = 0 To diduiTanKe.Count - 1
Dim tk As TanKe = diduiTanKe.Item(i)
Randomize()
Dim rr As Single = Rnd()
If rr < 0.8 Then
If TanKeYiDong(tk) Then
Dim dx As Integer = diduiTanKe.Item(i).WeiZhiX \ danWei
Dim dy As Integer = diduiTanKe.Item(i).WeiZhiY \ danWei
Select Case tk.FangXiang
Case 1
tk.WeiZhiY -= danWei
Case 2
tk.WeiZhiY += danWei
Case 3
tk.WeiZhiX -= danWei
Case 4
tk.WeiZhiX += danWei
End Select
Else
Randomize()
tk.FangXiang = Int(Rnd() * 4 + 1)
End If
Else
Randomize()
tk.FangXiang = Int(Rnd() * 4 + 1)
End If
diduiTanKe.Item(i) = tk
dedaoBaoWu(tk)
Randomize()
Dim rr1 As Single = Rnd()
If rr1 > 0.6 Then xinPaoDan(tk)
Next
xinDiDuiTanKe()
End If
End Sub
Public Sub xinDiDuiTanKe() '产生新的敌对坦克
If diduiTanKe.Count < ddTkshuliang Then
Dim t As New TanKe
t.HuoLi = 10
t.ShengMing = 20
Randomize()
t.FangXiang = Int(Rnd() * 4 + 1)
Randomize()
t.WeiZhiX = Int(Rnd() * 23 + 5) * danWei
t.WeiZhiY = danWei
t.WaiXing = Int(Rnd() * 7 + 3)
diduiTanKe.Add(t)
End If
End Sub
Private Sub frmMain_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown '键盘事件处理
If Not youxiShiFouJieShu And Not wjBuKeYiDong Then
If TanKeYiDong(WJ1) Then
Select Case e.KeyCode
Case Keys.Up
If WJ1.FangXiang = 1 Then
WJ1.WeiZhiY -= danWei
Else
WJ1.FangXiang = 1
End If
Case Keys.Down
If WJ1.FangXiang = 2 Then
WJ1.WeiZhiY += danWei
Else
WJ1.FangXiang = 2
End If
Case Keys.Left
If WJ1.FangXiang = 3 Then
WJ1.WeiZhiX -= danWei
Else
WJ1.FangXiang = 3
End If
Case Keys.Right
If WJ1.FangXiang = 4 Then
WJ1.WeiZhiX += danWei
Else
WJ1.FangXiang = 4
End If
Case Keys.NumPad0
xinPaoDan(WJ1)
End Select
Else
Select Case e.KeyCode
Case Keys.Up
WJ1.FangXiang = 1
Case Keys.Down
WJ1.FangXiang = 2
Case Keys.Left
WJ1.FangXiang = 3
Case Keys.Right
WJ1.FangXiang = 4
Case Keys.NumPad0
xinPaoDan(WJ1)
End Select
End If
If TanKeYiDong(WJ2) Then
Select Case e.KeyCode
Case Keys.W
If WJ2.FangXiang = 1 Then
WJ2.WeiZhiY -= danWei
Else
WJ2.FangXiang = 1
End If
Case Keys.S
If WJ2.FangXiang = 2 Then
WJ2.WeiZhiY += danWei
Else
WJ2.FangXiang = 2
End If
Case Keys.A
If WJ2.FangXiang = 3 Then
WJ2.WeiZhiX -= danWei
Else
WJ2.FangXiang = 3
End If
Case Keys.D
If WJ2.FangXiang = 4 Then
WJ2.WeiZhiX += danWei
Else
WJ2.FangXiang = 4
End If
Case Keys.Space
xinPaoDan(WJ2)
End Select
Else
Select Case e.KeyCode
Case Keys.W
WJ2.FangXiang = 1
Case Keys.S
WJ2.FangXiang = 2
Case Keys.A
WJ2.FangXiang = 3
Case Keys.D
WJ2.FangXiang = 4
Case Keys.Space
xinPaoDan(WJ2)
End Select
End If
End If
End Sub
Private Sub frmMain_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
If WanJiaShu = 1 Then
WJ1.SuDu = 0
Else
WJ1.SuDu = 0
WJ2.SuDu = 0
End If
End Sub
d. 游戏加载地图
读取地图
Public Sub myDuQuDiTu1(ByVal n As Integer) '读取地图
Dim buffer() As Byte = Nothing
Select Case n
Case 1
buffer = My.Resources._0000.Clone
Case 2
buffer = My.Resources._2222.Clone
Case 3
buffer = My.Resources._3333.Clone
Case 4
buffer = My.Resources._4444.Clone
Case 5
buffer = My.Resources._5555.Clone
Case 6
buffer = My.Resources._6666.Clone
Case 7
buffer = My.Resources._7777.Clone
Case 8
buffer = My.Resources._8888.Clone
Case 9
buffer = My.Resources._9999.Clone
Case 10
End Select
If n <> 10 Then
Dim i As Integer, xxx As Integer = -1
For i = 0 To DiTu.GetUpperBound(0)
For j As Integer = 0 To DiTu.GetUpperBound(1)
xxx += 1
DiTu(i, j) = int(buffer.GetValue(xxx))
Next
Next
End If
End Sub
Public Sub XinYouXi() '新游戏
WJ1.ShengMing = 100
WJ1.WeiZhiX = danWei * 13
WJ1.WeiZhiY = danWei * 31
WJ1.SuDu = 25
WJ1.FangXiang = 1
WJ1.HuoLi = 20
WJ1.WaiXing = 2
WJ2.ShengMing = 100
WJ2.WeiZhiX = danWei * 20
WJ2.WeiZhiY = danWei * 31
WJ2.SuDu = 25
WJ2.FangXiang = 1
WJ2.HuoLi = 25
WJ2.WaiXing = 1
dituchushihua()
myDuQuDiTu1(DiTuXuHao)
xianshiBaowu = False
wjBuKeYiDong = False
ddTankeBuKeYiDong = False
ddTkshuliang = DiTuXuHao * 2 + WanJiaShu * 2 + 4
shengMing = 100
wj1ShengyuMing = 9
wj2ShengyuMing = 9
jihuiTKshuliang = 0
wj1JiHui.Clear()
wj2JiHui.Clear()
diduiTanKe.Clear()
WJpd.Clear()
End Sub
Private Sub dituchushihua() '地图初始化
For i0 As Integer = 0 To 33
DiTu(0, i0) = 222
DiTu(33, i0) = 222
DiTu(i0, 0) = 222
DiTu(i0, 33) = 222
Next
piliangSheZhiDiTu(16, 1, 31, 1, 99)
piliangSheZhiDiTu(15, 0, 30, 2, 66)
piliangSheZhiDiTu(18, 0, 30, 2, 66)
piliangSheZhiDiTu(16, 1, 30, 0, 66)
End Sub
Private Sub piliangSheZhiDiTu(ByVal ksX As Integer, ByVal slX As Integer, ByVal ksY As Integer, ByVal slY As Integer, ByVal Zhi As Integer) '对地图批量赋值
For i As Integer = ksX To ksX + slX
For j As Integer = ksY To ksY + slY
If i < 0 Or i > DiTu.GetUpperBound(0) Or j < 0 Or j > DiTu.GetUpperBound(1) Then
Else
DiTu(i, j) = Zhi
End If
Next
Next
End Sub
’‘主窗体加载时
Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '程序加载
zhengzaiYouXi = False
DiTuXuHao = 1
WanJiaShu = 1
Timer3.Enabled = Not Timer3.Enabled
AxWindowsMediaPlayer1.settings.autoStart = True
AxWindowsMediaPlayer1.URL = My.Application.Info.DirectoryPath + "\网络歌手-战争背景游戏音乐.mp3"
AxWindowsMediaPlayer1.Ctlcontrols.play()
End Sub