VB.NET编写的坦克大战之三

123工艺品 2018-02-20 10:18:32
接上个帖子
显示游戏成果功能,在frmmain上增加一个panel,增加label,picturebox如下:

主要代码如下:

Private Sub xianShiJiHui(ByVal myp As Panel, ByVal l1 As Label, ByVal l2 As Label, ByVal l3 As Label, ByVal l4 As Label, ByVal l5 As Label, ByVal l6 As Label, ByVal l7 As Label, ByVal l8 As Label, ByVal l21 As Label, ByVal l22 As Label, ByVal l23 As Label, ByVal l24 As Label, ByVal l25 As Label, ByVal l26 As Label, ByVal l27 As Label, ByVal l28 As Label) '显示击毁
Dim A1(6) As Integer
For Each A As Integer In wj1JiHui
A1(A - 3) += 1
Next
Dim A2(6) As Integer
For Each B As Integer In wj2JiHui
A2(B - 3) += 1
Next
l1.Text = "玩家一击毁:" + wj1JiHui.Count.ToString + "辆"
l2.Text = A1(0).ToString + "辆"
l3.Text = A1(1).ToString + "辆"
l4.Text = A1(2).ToString + "辆"
l5.Text = A1(3).ToString + "辆"
l6.Text = A1(4).ToString + "辆"
l7.Text = A1(5).ToString + "辆"
l8.Text = A1(6).ToString + "辆"
l21.Text = "玩家二击毁:" + wj2JiHui.Count.ToString + "辆"
l22.Text = A2(0).ToString + "辆"
l23.Text = A2(1).ToString + "辆"
l24.Text = A2(2).ToString + "辆"
l25.Text = A2(3).ToString + "辆"
l26.Text = A2(4).ToString + "辆"
l27.Text = A2(5).ToString + "辆"
l28.Text = A2(6).ToString + "辆"
myp.Visible = True
End Sub

动画效果主要代码(程序加载地图时显示,游戏暂停时显示)

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
Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick‘在主窗体中
pppp -= 4
Kaichang(PictureBox10, pppp)
If pppp <= 0 Then
pppp = 20
Timer4.Enabled = False
newgame()
End If
End Sub
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
Private Sub Label14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label14.Click '开始或者暂停游戏
If Label14.Text = "暂停游戏" And zhengzaiYouXi Then
Timer1.Enabled = False
zhengzaiYouXi = False
Label14.ForeColor = Color.Red
Label14.Text = "继续游戏"
pppp = 0
Timer3.Enabled = True
ElseIf Label14.Text = "继续游戏" And Not zhengzaiYouXi Then
Timer1.Enabled = True
zhengzaiYouXi = True
Label14.ForeColor = Color.Black
Label14.Text = "暂停游戏"
End If
Panel1.Visible = False
End Sub
Private Sub Label13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label13.Click '新游戏
If Timer1.Enabled = False Then
pppp = 24
Timer4.Enabled = Not Timer4.Enabled
Panel1.Visible = False
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
Public Sub YouxiSFjieshu() '游戏是否结束
If shengMing <= 0 Or (wj1ShengyuMing < 0 And WanJiaShu = 1) Or (WanJiaShu = 2 And wj1ShengyuMing < 0 And wj2ShengyuMing < 0) Or jihuiTKshuliang > ggxjhtks * DiTuXuHao * WanJiaShu Then
youxiShiFouJieShu = True
Else
youxiShiFouJieShu = False
End If
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
...全文
560 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
123工艺品 2018-02-20
  • 打赏
  • 举报
回复

Public Function HuiTu() As Bitmap '绘游戏画面
ea.Clear(Color.Transparent)
gengxinPaodan()
If WanJiaShu = 1 Then
If wj1ShengyuMing > 0 Then
ea.DrawImage(HTanKe(WJ1), WJ1.WeiZhiX, WJ1.WeiZhiY, 2 * danWei, 2 * danWei)
End If
ElseIf WanJiaShu = 2 Then
If wj1ShengyuMing > 0 Then
ea.DrawImage(HTanKe(WJ1), WJ1.WeiZhiX, WJ1.WeiZhiY, 2 * danWei, 2 * danWei)
End If
If wj2ShengyuMing > 0 Then
ea.DrawImage(HTanKe(WJ2), WJ2.WeiZhiX, WJ2.WeiZhiY, 2 * danWei, 2 * danWei)
End If
End If
ea.DrawImage(My.Resources.Y, danWei * 16, danWei * 31, danWei * 2, danWei * 2)
If WJpd Is Nothing Then
Else
For Each p1 As PaoDan In WJpd
If p1.pdHuoLi = 20 Or p1.pdHuoLi = 25 Then
ea.DrawImage(HPaoDan(p1, 2), p1.pdWeiZhiX + Int(danWei \ 2), p1.pdWeiZhiY + Int(danWei \ 2), danWei, danWei)
ElseIf p1.pdHuoLi = 10 Then
ea.DrawImage(HPaoDan(p1, 3), p1.pdWeiZhiX + Int(danWei \ 2), p1.pdWeiZhiY + Int(danWei \ 2), danWei, danWei)
ElseIf p1.pdHuoLi = 50 Or p1.pdHuoLi = 75 Or p1.pdHuoLi = 60 Then
ea.DrawImage(HPaoDan(p1, 1), p1.pdWeiZhiX + Int(danWei \ 2), p1.pdWeiZhiY + Int(danWei \ 2), danWei, danWei)
End If
Next
End If
For i As Integer = 0 To diduiTanKe.Count - 1
ea.DrawImage(HTanKe(diduiTanKe.Item(i)), diduiTanKe.Item(i).WeiZhiX, diduiTanKe.Item(i).WeiZhiY, 2 * danWei, 2 * danWei)
Next
For i As Integer = 0 To 33
For j As Integer = 0 To 33
If DiTu(i, j) <> 0 Then
Select Case DiTu(i, j)
Case 55 '水
ea.DrawImage(My.Resources.S, i * danWei, j * danWei, danWei, danWei)
Case 66 '砖墙
ea.DrawImage(My.Resources.q, i * danWei, j * danWei, danWei, danWei)
Case 77 '草丛
ea.DrawImage(My.Resources.C, i * danWei, j * danWei, danWei, danWei)
Case 88 '石头
ea.DrawImage(My.Resources.q2, i * danWei, j * danWei, danWei, danWei)
Case 222 '边界
ea.DrawImage(My.Resources.q3, i * danWei, j * danWei, danWei, danWei)
Case 177, 155, 100 '爆炸
ea.DrawImage(My.Resources.baoza, i * danWei, j * danWei, 2 * danWei, 2 * danWei)
newT()
DiTu(i, j) -= 100
End Select
End If
Next
Next
If xianshiBaowu Then
Select Case xBaoWu.bwBianHao
Case 11
ea.DrawImage(My.Resources.nz, xBaoWu.bwWeiZhiX, xBaoWu.bwWeiZhiY, danWei, danWei)
Case 12
ea.DrawImage(My.Resources.dd, xBaoWu.bwWeiZhiX, xBaoWu.bwWeiZhiY, danWei, danWei)
Case 13
ea.DrawImage(My.Resources.smb, xBaoWu.bwWeiZhiX, xBaoWu.bwWeiZhiY, danWei, danWei)
Case 14
ea.DrawImage(My.Resources.hljq, xBaoWu.bwWeiZhiX, xBaoWu.bwWeiZhiY, danWei, danWei)
End Select
ea.DrawRectangle(New Pen(Brushes.Fuchsia, 2), xBaoWu.bwWeiZhiX, xBaoWu.bwWeiZhiY, danWei, danWei)
End If
If WJpd Is Nothing Then
Else
For Each p1 As PaoDan In WJpd
If p1.pdHuoLi = 20 Or p1.pdHuoLi = 25 Then
ea.DrawImage(HPaoDan(p1, 2), p1.pdWeiZhiX + Int(danWei \ 2), p1.pdWeiZhiY + Int(danWei \ 2), danWei, danWei)
ElseIf p1.pdHuoLi = 10 Then
ea.DrawImage(HPaoDan(p1, 3), p1.pdWeiZhiX + Int(danWei \ 2), p1.pdWeiZhiY + Int(danWei \ 2), danWei, danWei)
ElseIf p1.pdHuoLi = 50 Or p1.pdHuoLi = 75 Or p1.pdHuoLi = 60 Then
ea.DrawImage(HPaoDan(p1, 1), p1.pdWeiZhiX + Int(danWei \ 2), p1.pdWeiZhiY + Int(danWei \ 2), danWei, danWei)
End If
Next
End If
If youxiShiFouJieShu Then
If jihuiTKshuliang > ggxjhtks * DiTuXuHao * WanJiaShu Then
ea.DrawString("恭喜过关!!", New Font("宋体", 50), Brushes.Pink, 260, 380)
Else
ea.DrawString("游戏结束!!", New Font("宋体", 50), Brushes.Red, 260, 380)
End If
xianShiJiHui(frmMain.Panel1, frmMain.Label26, frmMain.Label43, frmMain.Label44, frmMain.Label45, frmMain.Label46, frmMain.Label47, frmMain.Label48, frmMain.Label49, frmMain.Label27, frmMain.Label50, frmMain.Label51, frmMain.Label52, frmMain.Label53, frmMain.Label54, frmMain.Label55, frmMain.Label56)
End If
Return map
End Function
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick '游戏主控计时器
YouxiSFjieshu()
If Not youxiShiFouJieShu Then
If Not ddTankeBuKeYiDong Then tkYD()
Else
Timer1.Enabled = False
End If
PictureBox10.Image = HuiTu()
Label3.Text = "关卡:" + DiTuXuHao.ToString
Label5.Text = "宝物生命:" + shengMing.ToString
If WanJiaShu = 1 Then
Label8.Text = "游戏人数:" + " 1 人 "
Label1.Text = "玩家1生命:" + WJ1.ShengMing.ToString
Label6.Text = "玩家1可重生数:" + wj1ShengyuMing.ToString
Label2.Text = "玩家2生命:" + "无"
Label7.Text = "玩家2可重生数:" + "无"
dedaoBaoWu(WJ1)
Else
Label8.Text = "游戏人数:" + " 2 人 "
Label1.Text = "玩家1生命:" + WJ1.ShengMing.ToString
Label6.Text = "玩家1可重生数:" + wj1ShengyuMing.ToString
Label2.Text = "玩家2生命:" + WJ2.ShengMing.ToString
Label7.Text = "玩家2可重生数:" + wj2ShengyuMing.ToString
dedaoBaoWu(WJ1)
dedaoBaoWu(WJ2)
End If
Label4.Text = "击毁坦克数量:" + jihuiTKshuliang.ToString
Label19.Text = "敌对坦克数量:" + diduiTanKe.Count.ToString
Label20.Text = "炮弹数量:" + WJpd.Count.ToString
End Sub

程序效果如下图:

下面为关于炮弹及宝物的代码

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧