LabVIEW期末大作业——————————
贪吃蛇游戏
制作人:****************
摘要:LabVIEW是由NI公司研制开发的一种程序开发环境,它使用的是图形化编程语言G语言编写程序,产生的程序是框图形式。本程序利用LabVIEW的图形化编程特点,结合所学知识,编写了一个趣味贪吃蛇游戏,仅供休闲娱乐。
关键词:LabVIEW 图形化编程 贪吃蛇
引言:
手机中有一款小游戏叫“贪吃蛇”,就是有一条小蛇,不停地在屏幕上游走,吃各个方向上出现的蛋,越吃越长。只要蛇头碰到屏幕四壁或者碰到自己的身子,游戏就立刻结束。本程序基于传统贪吃蛇游戏的特点,并适当增加一些趣味因素,最终利用LabVIEW制作一款完整的迷你贪吃蛇游戏。本程序的主要实现如下功能:小蛇不停游走,键盘方向键可控制小蛇移动
方向,吃过一个蛋后小蛇长度增加并随机产生另一个蛋,小蛇碰到四壁或者碰到自己时游戏结束并给出得分提示是否继续,游戏可以有多种难度选择,并设置暂停按钮。
1. 界面设置
设置贪吃蛇的界面主要包括这几方面,游戏屏幕的设置(包括小蛇和蛋的颜形状)、开始后提示对话框及结束后得分对话框设置等。
1.1 屏幕设置
我们采用LabVIEW中提供的‘Express XY图’,这样就可以通过给定点的坐标来移动小蛇和显示小蛋。我们对XY图的属性做如下修改:去除标尺及标签,设置标尺为50×50,去除两个方向的网格,使最终屏幕全黑,然后修改各条曲线的宽度、颜和点样式,使小蛇小蛋
能够以不同样式显示。结果如右图所示:方形黄的为蛋,圆形长条的为小蛇(刚开始只是一个点)。
1.2 对话框设置
设置对话框,我们采用编程->对话框与用户界面中的‘单按钮对话框’和‘双按钮对话框’。前者主要是在点击开始游戏时给出操作提示,后者是在游戏失败时给出得分,并提示用户是否继续游戏,两者需要结合平铺顺序结构以及一些循环结构使用。制作的效果如下:
2. 小蛇控制
小蛇的控制主要有这几方面构成,开始游戏后小蛇就要按照一定的方向不停地移动,通过键盘方向键控制小蛇移动方向(由于设置上、下、左、右四个方向,其中有两对是互斥的
方向,需要加以控制以禁止,否则小蛇在反向的时候会撞到自己),遇到蛋时,需要增加蛇身长度。
2.1小蛇游走
由于蛇本身是一个可增加元素的数组,所以用一个含两个一维方向数组的簇来进行操作。每次读取坐标或者增添完坐标后都要用簇解绑及簇捆绑来处理,这样也便在XY图中显示。
控制小蛇游走的方法是给定一个方向direction(右(0)上(1)左(2)下(3)),然后利用这个direction的值来控制当前点与下一点的变换。具体来讲是,假设蛇头的当前点为(x0,y0),那下一点坐标为
利用以上思想就可以制作一个小蛇自动不停移动的程序,然而为了使之后与小蛋碰撞后能便捷的增加长度,这里采用这样的方法实现:小蛇没按direction移动一个,就在小蛇数组的开头添加一个点(此时这两个点是相邻的),然后将添加的点与蛋所在坐标比较,如果
不同,就将蛇数组的最后一个元素删除,表示没有吃到蛋;如果相同,就保留这个元素(此时,相对于前一个位置时,小蛇的长度增加了),并且删除这个蛋,重新随机产生另一个蛋。循环往复(在while循环上添加移位寄存器)直到游戏结束。插入蛇头新坐标的子程序如下:
删除蛇数组末尾点子程序:
2.2键盘控制小蛇游走方向
这部分采用一个事件结构,当键按下时,判断按下键的方向后修改direction值(比如原来小蛇向左移动,按向上后,修改direction值为1),当然这需要进行一个判断,即去除反向的可能,可以选用‘选择’进行判断,如果出现按键为小蛇移动的反方向,则保持原有的direction值(比如原来小蛇向左移动,按向右后,direction值仍保留为2)。
2.3撞墙和自杀
这里讲一下我们对于小蛇撞墙或者自杀的情况。撞墙的意思是小蛇碰到了周围的墙壁,这需要从蛇数组中获取当前新添加的元素,然后与边缘(0,50)比较,当超过这个边缘时,就跳出一级循环,游戏结束。自杀的情况比撞墙较复杂,获取添加了新元素的蛇数组,然后删除第一位点,并将删除后的数组与第一位点比较,如果剩余数组中存在与第一
位点一致的点,就认为发生了自杀,并跳出循环结束游戏。上面两部分可以采用公式节点进行C语言编程,同样很方便,这里采用前者。
3. 小蛋控制
对于蛋的操作主要是判断当前蛋的位置与蛇头位置是否相同,在相同的情况下,需要将蛋的位置重新赋值。这是处理一个蛋的时候,如果要设计多个蛋,只需判断当前蛋的个数是否减少,并在减少后随机产生一个新蛋。在这里为了界面简洁,只产生一个蛋,所以不需要用数组存储,单个数值即可,然而这样在XY图上显示这个点的时候需要将它套用蛇数组的格式绑定为簇,然后与蛇数组合并为一个数组后显示多条曲线。
3.1蛋与蛇头距离判断
这只需要判断两者坐标是否相同,相同则触发条件重新生成蛋,否则保留原蛋。
3.2在XY图上显示蛋
这需要首先套用蛇数组的格式,可以在输入簇上加入如下格式,也可以直接套用蛇数组格式。
转换之后就可以在XY图上同时显示蛋与蛇了。
4. 暂停
实现暂停比较简单,在一个适当的位置,使程序进行一个封闭的循环,期间不执行任何操作,直到手动解除暂停效果。其中按钮的触发方式选为单击时转换即可。
5. 难度选择
为了使游戏不显得单调,这里加上一些选项控制。难度分为4中,简单(100)、普通(70)、困难(40)以及变态模式(50)。前三种主要是改变了游戏初始时的速度,并设置游戏中速度与得分相关,得分越多速度越快。子程序如下(最低速度设为20):
在上面的几种模式中有一种变态模式,或者可以称为趣味模式,除了速度较快(不是最快)
外,还设置了一些特别的效果,如:每隔两秒随机改变一次蛇移动方向,每吃到一个蛋也随机改变一个方向,在屏幕中增加一些石头,只要蛇碰到游戏就结束等等。
产生石头部分还是简单采用列举的方法,并没有随机的产生,后者显得比较乱而不均。(屏幕范围为(0~50×0~50))
蛇头碰撞石头采用了C语言编写:
改变方向的子程序如左下,右边一张为子程序的连接方法,一个为布尔量,另一个为VI服务器引用,是direction的局部变量。
6. 总结
作为一种图形编程工具,LabVIEW让我们对编程的印象耳目一新。通过这学期的学习,我们不仅了解了LabVIEW的基本使用方法,还对以前学习过的编程思想用了更深刻的理解。其实不管是c,还是图形编程,本质上都是一样的,只是具体操作时各有优劣。
虽然前面做了很多的练习,但是在面对这一份所谓的大作业的时候还是觉得有一些无从下手。毕竟先前都是有题目的,可以照着例题方法,是一种复刻;但是,创造往往是最困难的。一开始准备等老师给课题,然而又觉得有些心有不甘。听说有其他组的同学准备做一些小游戏,于是我们着手开始了我们的snake。
开头往往是最难的,当我们终于解决了如何让一个点在XY图上动起来之后,一切都是那么的顺其自然了。我们想到了一个又一个问题,如何显示蛋,如何吃掉蛋,如何吃掉蛋之后让蛇加一截,如何让蛇撞墙之后结束游戏…..发现问题和解决问题的过程都是艰辛且快乐的。我们并不满足于传统的贪食蛇游戏,希望可以做出自己的特,于是我们给他附上我们自己的烙印,比如变速,比如设置难度等级,又比如添加障碍物等等。对于最后的成品,已经基本上达到了我们的预期。另外,这款游戏的后续开发空也间很大,可以添加很多想法,比如可以增加蛋的数量,可以增加蛋的品种,对于不同的蛋产生不同的特效,可以有突然改变方向、突然改变速度、增长蛇身长度、无敌小蛇(无死亡限制)、突然隐身蛇身、旋转石头模式等等,由于时间有限,这些想法没有一一去实现,但我们仔细考虑下这些都是可行的。比如增长蛇身长度,可以根据当前得分,在蛇尾按direction方向反方向增加蛇数组元素,当然这可能导致小蛇立刻死亡,当然这可以作为游戏的一个难度,需要玩家在适当的方向吃小蛋;对于无敌小蛇模式,那也比较简单,可以采用一个计数值并使用一个条件结构,在这段计数值内使程序不执行蛇头位置的比较;而隐身小蛇只需要使蛇身在一段计数值内不在XY图上显示,然而小蛇实际是继续运动的;旋转石头是基于变态难度中产生的石头,让其围绕中心旋转,增加游戏难度等等。可以说只要想得到,没有做不到,LabVIEW的强大功能就在于此。
贪食蛇只是一个简单的休闲游戏,但是c语言游戏贪吃蛇源码LabVIEW给我们的不仅仅是贪食蛇,如果深入的掌握好这一门技艺,那么在以后的学习或工作中,一定会给我么更多的帮助。
最后感谢两位老师这个学期对我们的殷勤指导,感谢你们为学生的付出,您的课上得十分生动有趣。真诚的感谢!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论