基于LabVIEW的飞机大作战小游戏(可做毕设)

一、前言

Python是目前相当流行的一门编程语言,网上有人用Python做了一个《飞机大作战》的小游戏,并且出了一份视频教程,很有意思。“基于Python的飞机大作战小游戏“的视频教程、素材及源码详见:https://www.bilibili.com/video/BV1bq4y1Q7TY/

“飞机大作战小游戏”这个小游戏用其他编程语言也可以完成,不同的编程语言都有自己的特色。我用LabVIEW也编写了这个“飞机大作战小游戏”,功能和界面和Python的一模一样。本文将介绍制作这个小游戏的过程。大家在用LabVIEW做完这个小游戏后,可以跟Python的小游戏对比一下,就会发现LabVIEW作为图像化编程语言非常好用,跟Python比起来也毫不逊色!

二、功能介绍

1、主界面,按任意键开始游戏

基于LabVIEW的飞机大作战小游戏(可做毕设)_第1张图片

图1 主界面

2、左右键移动飞机;

3、空格键发射子弹;发射子弹有音效;

4、石块碰到飞机:血条减少(石块越大,减血越多)、有爆炸效果、有音效;

5、血条到0,命减1条,一局游戏3条命;3条命用完,游戏结束;

6、子弹打到石块:分数增加(石块越大,加分越多)、有爆炸效果、有音效;

7、石块随机出现,石块掉落,分数减少(尽量打爆所有出现的石块);

基于LabVIEW的飞机大作战小游戏(可做毕设)_第2张图片

图2 游戏界面1

8、子弹打爆石块有一定概率掉落礼品:强化(飞机攻击力增强)、血包(用于回血)

9、飞机碰到“强化”后,发射子弹有单发变为双发;双发N次后,强化效果消失;飞机碰到石块后,强化效果消失;

10、飞机碰到“血包”后,血条增加;

基于LabVIEW的飞机大作战小游戏(可做毕设)_第3张图片

图3 游戏界面2

11、游戏结束后,会显示得分,按Escape键退回到初始界面

基于LabVIEW的飞机大作战小游戏(可做毕设)_第4张图片

图4 结束界面

三、编程思路

Python调用了pygame模块,用于完成“飞机大作战小游戏”小游戏的制作。LabVIEW没有专门的游戏工具包,所以我们直接编写,不借助外力,也很简单!

课外小知识

Python非常火的一个非常重要的原因之一就是它有非常丰富的、成熟高效的资源库(官方模块+第三方模块),Python只是完成调用,开发效率大大提高。因为Python非常火,所以第三方模块也非常多、非常完善。像刚才提到的pygame模块就是第三方模块。

我们回到LabVIEW,LabVIEW非常好用的一个非常重要的原因之一也是它有非常丰富的、成熟高效的资源库(官方模块+第三方模块)。LabVIEW是为了工业领域设计的,使用群体主要是工业设计人员及高校师生,所以用户群体不大(相对于互联网群体),所以LabVIEW的资源库主要是以官方模块为主,第三方模块相对来说比较少。好在NI公司(LabVIEW的设计公司)比较给力,推出的官方模块相当丰富,也非常好用。

前面说了,LabVIEW是为了工业领域设计的,像游戏类模块,LabVIEW目前还没有,但是LabVIEW是一门图像化编程语言,上手及编程速度非常快,我们这儿直接用LabVIEW编写这个小游戏,没有借助第三方模块。即使在这样的情况下,跟Python比也毫不逊色!

3.1 飞机、石块、子弹、血包、强化是怎么做出来的?

答:用自定义控件制作的。把bool控件制作成自定义控件。飞机、石块、子弹、血包、强化只是替换的图片的不同,本质都是bool控件。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第5张图片

图5 自定义控件

3.2 爆炸及碰撞效果是怎么做出来的?

答:给二维图片控件连续赋值爆炸效果图片,形成爆炸效果

基于LabVIEW的飞机大作战小游戏(可做毕设)_第6张图片

图6 爆炸及碰撞效果实现方式

3.3 音效是怎么做出来的?

答:LabVIEW是支持标准wav格式音频播放的。如果你的音频是非wav格式、 LabVIEW无法播放wav格式,可以用“格式工厂”软件转换一下。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第7张图片

图7 音频播放程序框图

3.4 飞机、石块、子弹是怎么移动的?

答:通过给控件的“位置属性”赋值不同的数值,控件在前面的位置就会产生变化。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第8张图片

图8 通过位置属性控制飞机移动

图9 通过位置属性控制飞机移动

3.5 如何检测按键输入?

答:LabVIEW本身有专门的函数可以实现键盘输入采集。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第9张图片

图10 按键采集函数

基于LabVIEW的飞机大作战小游戏(可做毕设)_第10张图片

图11 按键采集程序框图

3.6 如何检测碰撞?

答:

(1)首先通过控件的位置属性获取控件的位置,然后通过控件的边界属性获取控件的长度和宽度。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第11张图片

图12 控件边界属性

图13 控件位置属性和边界属性

基于LabVIEW的飞机大作战小游戏(可做毕设)_第12张图片

图14 控件位置和边界

(2)然后计算两个控件(比方说:子弹、石块;飞机、石块)之间的位置。一般采用两种方法:

方法1:石块和飞机等效为圆,通过控件位置坐标、宽度、高度三个信息可以计算出控件等效圆的圆心坐标、和圆半径。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第13张图片

图15 控件等效为圆

若两个控件的圆心距离小于两个控件的半径之和,则认为产生碰撞!

基于LabVIEW的飞机大作战小游戏(可做毕设)_第14张图片

图16 石块碰撞飞机示意图

若两个控件的圆心距离大于等于两个控件的半径之和,则认为没有产生碰撞!

基于LabVIEW的飞机大作战小游戏(可做毕设)_第15张图片

图17 非碰撞示意图

方法2:石块和子弹等效为方形,通过控件位置坐标、宽度、高度三个信息,就可以知道控件上下左右的位置。

图18 控件等效为方形

如果:子弹位于石块的左右范围内 并且 (子弹的顶部位于石块上下范围内 或 子弹的中部位于石块上下范围内 或 子弹的尾部位于石块上下范围内),则认为产生碰撞!

基于LabVIEW的飞机大作战小游戏(可做毕设)_第16张图片

图19 子弹打到石头示意图

3.7 不同界面如何切换

答:此游戏共有3个界面。都比较简单,这儿没有用界面跳转,而是采用了一个小技巧。这三个界面是叠在一起的,界面3位于最底层,界面1与2位于上层;界面3始终处于可见状态;需要界面1显示的时候,界面2隐藏;需要界面2显示的时候,界面1隐藏;需要界面3显示的时候,界面1、2隐藏。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第17张图片

图20 游戏界面

那么界面是怎么实现隐藏和显示的呢? 界面1、2有二维图片控件、按钮、字符串控件组成,这些控件都可以通过控件的属性节点设置为可见或隐藏。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第18张图片

图21 二维图片控件

基于LabVIEW的飞机大作战小游戏(可做毕设)_第19张图片

图22 通过控件的可见属性控制控件显示与隐藏

基于LabVIEW的飞机大作战小游戏(可做毕设)_第20张图片

图23 通过控件的可见属性控制控件显示与隐藏

四、编程技巧

4.1 多个类似控件操作

游戏中要同时操作(主要是移动)多个子弹或者石块,最直接的方法是挨个操作控件的属性节点。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第21张图片

图24 移动控件

需要操作的控件比较多(子弹16个、石块8个),这样操作非常耗费时间,也容易误操作或漏操作。这儿介绍一种比较简单的操作方法。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第22张图片

图25 子弹和石头控件

遍历前面板所有的控件,只要是控件的标签文本前两个字为“石头”,就认为是石头控件(这儿要注意,非石头控件命名的时候,前两个字不要包含石头),然后统一对石头控件操作接可以了。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第23张图片

图26 控件批量移动

同理子弹控件也是同样的操作。

4.2 提高执行速度

因为程序中需要对30多个控件位置进行判断、移动,有些地方需要特殊处理,提高执行速度,不然整个游戏运行会很慢,影响游戏体验!程序里使用了两种方法提高执行速度,游戏界面100ms刷新一次,游戏体验还可以。

方法1:尽量实用局部变量,减少使用属性节点的方式调用控件的值。属性节点执行速度比较慢。

方法2:不要实时刷新前面板,可以定时刷新。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第24张图片

图27 界面停止刷新代码

基于LabVIEW的飞机大作战小游戏(可做毕设)_第25张图片

图28 界面启动刷新代码

五、实现讲解

整个程序总体上分为8部分:

基于LabVIEW的飞机大作战小游戏(可做毕设)_第26张图片

图29 游戏的整体程序界面

下面就这8部分做一个简单介绍:

1、 系统初始化

2、 主程序1

循环实现以下功能(100ms一个循环):

(1) 石块下降、子弹上升、礼品下降

(2) 出界判断

(3) 碰撞检

基于LabVIEW的飞机大作战小游戏(可做毕设)_第27张图片

图30 主程序1

3、 点击按钮弹广告

通过调用DOS命令行打开网页。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第28张图片

图31 点击按钮弹广告

基于LabVIEW的飞机大作战小游戏(可做毕设)_第29张图片

图32 点击按钮弹广告程序

4、 主程序2

按键检测,主要有三项功能:

(1) 通过左右键控制飞机移动

(2) 通过空格键控制子弹发射

(3) 控制界面切换

基于LabVIEW的飞机大作战小游戏(可做毕设)_第30张图片

图33 界面切换示意图

5、 游戏初始化

6、 爆炸效果

7、 碰撞效果

8、 音频播放

5、6、7、8的程序实现方式都是一样的。5、6、7、8有主程序控制执行,且只执行一次。如需再次执行需要主程序再次进行控制。

下面以声音播放为例给大家讲解一下:

主程序需要音频播放的时候,置“声音控制”为True,声音播放程序进行声音播放,播放完毕后,“声音控制”置为False,音乐只播放一遍。如果需要再次播放,主程序需要再一次置“声音控制”为True。

基于LabVIEW的飞机大作战小游戏(可做毕设)_第31张图片

图34 声音播放程序框图

六、视频教程及源码

http://blog.eeecontrol.com/FJZZ/

你可能感兴趣的:(LabVIEW)