首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >VB游戏开发#001植物大战僵尸小游戏开发思路说明及源码

VB游戏开发#001植物大战僵尸小游戏开发思路说明及源码

作者头像
刘金玉编程
发布2020-01-17 11:13:58
发布2020-01-17 11:13:58
2.7K0
举报
文章被收录于专栏:编程创造城市编程创造城市

一、界面设计说明

界面设计和时钟控件说明

时钟控件:

控制植物动画:timer2,时间间隔100,默认启用

控制子弹动画:timer4,时间间隔10,默认关闭

监控子弹与僵尸碰撞:timer5,时间间隔1,默认启用

控制僵尸前进:timer3,时间间隔100,默认启用

控制僵尸动画:timer1,时间间隔100,默认启用

背景音乐:

使用新的部件windows media player

音乐控件名称:WindowsMediaPlayer1

植物:image2,载入第一张植物图片

僵尸:image1,载入第一张僵尸图片

子弹:shape1,通过属性配置可以模拟子弹形状

总体工程生成的保存文件结构:

img文件夹中植物与僵尸的图片与命名

二、游戏思想

游戏人物:植物、僵尸

模拟动画效果:

1.植物动的状态

2.僵尸动的状态

3.子弹动画

通过观察:利用循环的思想实现动画效果,需要使用到时钟控件timer

这个时钟控件里面做什么事情?

举例僵尸:

我们通过不断循环图片来实现。

通过实现的代码:

代码语言:javascript
复制
i = i + 1
If i > 22 Then i = 1
Image1.Picture = LoadPicture(App.Path & "\img\c (" & i & ").jpg")
  • 制作一个人物动画效果的思想

界面采用image控件和timer控件

在timer控件的的timer事件中实现图片的切换。

图片的加载使用Loadpicture来实现

loadpicture函数用法:

loadpicture(图片路径)

图片路径可以用字符串表示。

图片的切换使用变量的递增来实现。

因为图片的个数是有限的,所以一定要注意在切换完图片最后一定要重置到第一张图片,使得图片能不断循环。

同样的,僵尸和植物都是可以采用以上方法来实现的。

注意:代码中的App.Path代表项目工程文件vbp文件所在的目录。

  • 载入背景音乐

鼠标在工具栏右键---部件---选择“windows media player”

把调出的音乐控件拖入界面上面

在form_load事件中设置控件的url属性代表音乐路径

代码语言:javascript
复制
i = 1
j = 1
WindowsMediaPlayer1.URL = App.Path & "/" & "a.mp3"
  • 设置子弹

使用shape控件来设计子弹,fillestyle填充为solid绿色

通过timer控件来控制子弹的运动

在timer控件中设置shape1.left=shape1.left+100

设置子弹默认情况为visible属性为false代表隐藏

时钟控件enabled属性默认为false

当点击空格键后,打开时钟控件,让子弹运动。

  • 碰撞模型

通过使用function函数实现一个通用的碰撞模型。

代码语言:javascript
复制
Function PZ(A As Shape, B As Image)
Dim r As Boolean
r = False '默认为不碰撞,如果碰撞,就置为true
'第一个条件检测左右碰撞情况,第二个条件检测上下碰撞情况
If (A.Left + A.Width > B.Left And A.Left < B.Left + B.Width) _
   And (A.Top + A.Height > B.Top And A.Top < B.Top + B.Height) Then
   
    r = True
End If

PZ = r
   
End Function

三、整个游戏所有源代码

代码语言:javascript
复制
Dim i As Integer
Dim j As Integer

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 32 Then
Shape1.Visible = True
Timer4.Enabled = True
End If
End Sub

Private Sub Form_Load()
i = 1
j = 1
WindowsMediaPlayer1.URL = App.Path & "/" & "a.mp3"
End Sub

Private Sub Timer1_Timer()

i = i + 1
If i > 22 Then i = 1
Image1.Picture = LoadPicture(App.Path & "\img\c (" & i & ").jpg")
End Sub

Private Sub Timer2_Timer()
j = j + 1
If j > 7 Then j = 1
Image2.Picture = LoadPicture(App.Path & "\img\b (" & j & ").jpg")

End Sub

Private Sub Timer3_Timer()
If Image1.Left < Image2.Left + Image2.Width Then
    Image1.Left = Image2.Left + Image2.Width
    Timer3.Enabled = False
    Timer1.Interval = 1
Else
    Image1.Left = Image1.Left - 30
End If
End Sub

Private Sub Timer4_Timer()
Shape1.Left = Shape1.Left + 100



End Sub


Function PZ(A As Shape, B As Image)
Dim r As Boolean
r = False

If (A.Left + A.Width > B.Left And A.Left < B.Left + B.Width) _
   And (A.Top + A.Height > B.Top And A.Top < B.Top + B.Height) Then
   
    r = True
End If

PZ = r
   


End Function

Private Sub Timer5_Timer()
If PZ(Shape1, Image1) Then
    Timer4.Enabled = False
    Shape1.Left = 1200
    Shape1.Visible = False
End If
End Sub
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程创造城市 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档