分享
分享赚钱 收藏 举报 版权申诉 / 9

类型基于labview的贪吃蛇游戏程序设计基础.doc

  • 上传人:精品资料
  • 文档编号:10357073
  • 上传时间:2019-11-03
  • 格式:DOC
  • 页数:9
  • 大小:233KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    基于labview的贪吃蛇游戏程序设计基础.doc
    资源描述:

    1、基于 labview 的贪吃蛇游戏程序设计一、 程序设计背景本程序是基于常看到的一款小游戏贪吃蛇而设计的,即有一条小蛇不停地在屏幕上游走,吃各个方向上出现的苹果(姑且称它为“苹果” ) ,越吃越长,只要蛇头碰到屏幕四壁或者碰到自己的身子,游戏就立刻结束。本程序基于传统贪吃蛇游戏的特点利用 LabVIEW 制作的一款完整的迷你贪吃蛇游戏。本程序的主要实现如下功能:1.小蛇在屏幕上不停的游走;2.用键盘方向键可控制小蛇的移动方向;3.吃过一个苹果后小蛇长度增加并随机产生另一个蛋;4.小蛇碰到四壁或者碰到自己的身体时游戏结束并给出得分和提示是否继续;5.游戏可以有多种难度选择等。二、程序介绍(一)前

    2、面板的设置采用 LabVIEW 中提供的“Express XY 图”作为游戏界面,显示蛇和苹果,这样就可以通过方向键来移动小蛇到想要去的地方。对 XY 图的属性做如下修改:1.去除标尺及标签,设置标尺为 0:1000;2.去除两个方向的网格,使最终屏幕全黑;3.修改各条曲线的宽度、颜色和点样式,使小蛇苹果能够以不同样式显示。结果如右图所示:方形红色的为苹果,圆形长条的为小蛇。2(二)程序框图设计如何控制蛇移动去吃苹果同时避免碰到自己的身体或者撞墙是一个复杂的程序。特此将程序分成多个子程序来编写使程序简单明了。下面分别介绍贪吃蛇程序中的各个子程序。1.XY 坐标子程序此程序的作用是把蛇的活动按有

    3、无蛇身、苹果赋值。通过 XY 坐标来显示蛇移动的轨迹,同时删除已走过的轨迹路径,避免与新的路径混淆使程序出错。程序框图见下面:3图一 输入 XY 坐标图二 删除 XY 坐标2.小蛇的移动控制由于蛇本身是一个可增加元素的数组,所以用一个含两个一维方向数组的簇来进行操作。每次读取坐标或者增添完坐标后都要用簇解绑及簇捆绑来处理,这样也便于在 XY 图中显示。控制小蛇游走的方法是给定一个方向 direction,然后利用这个 direction的值来控制当前点与下一点的变换。小蛇不停的移动,为了使之与苹果碰撞后能便捷的增加长度,这里采用这样的方法实现:小蛇每按 direction 移动一个,就在小蛇数

    4、组的开头添加一个点(此时这两个点是相邻的) ,然后将添加的点与苹果所在坐标比较,如果不同,就将蛇数组的最后一个元素删除,表示没有吃到苹果;如果相同,就保留这个元素(此时,相对于前一个位置时,小蛇的长度增加了) ,并且删除这个苹果,重新随机产生另一个苹果。循环往复(在while 循环上添加移位寄存器)直到游戏结束。插入蛇头新坐标的子程序框图如下:43.苹果增减的控制对于苹果的操作主要是判断当前苹果的位置与蛇头位置是否相同,在相同的情况下,需要将苹果的位置重新赋值,这是处理一个苹果的时候。如果要设计多个苹果,只需判断当前苹果的个数是否减少,并在减少后随机产生一个新的苹果。程序里一次性最多可以产生

    5、20 个苹果,用数组存储。当苹果的数量明显少于最大值时就随机产生一个苹果。当蛇头与苹果的位置相同时消掉该苹果,否则保留该苹果。为了便于苹果与蛇同时在屏幕上显示,特将苹果套用蛇数组的格式绑定为簇,然后与蛇数组合并为一个数组后同时显示在 XY 图上。程序框图如下:4.撞墙事件把蛇当前所在的位置的坐标与围墙的宽度作比较,如果超出了宽度范围则视为撞墙事件游戏结束,否则游戏继续。在设计程序中运用了两个、两个和一个逻辑与运算符号参与编辑,通过 X、Y 坐标与 World Size 作比较,最后结果为真则游戏继续,否则游戏结束。程序框图如下:55.自杀事件自杀事件比撞墙事件复杂,不过思路都一样,都是通过坐标

    6、的比较来判断。不同是的自杀事件是通过判断蛇头的坐标与蛇身的坐标是否一致,如果一致则认为发生了自杀事件,并跳出循环结束游戏,否则游戏继续。再此 VI 中运用了两个条件结构来判断是否结束程序;运用一个 WHILE 循环比较蛇头与蛇身的坐标,当蛇头坐标与蛇身坐标一致时跳出循环游戏结束(只有当蛇的位移坐标有两个以上时才开始判断是否发生自杀事件) 。以下是本 VI的程序框图:6.主程序程序框图主程序程序框图运用平铺式顺序结构,第一帧是游戏介绍,第二帧是程序主程序。在主程序的上半部分采用一个 while 循环、一个事件结构和一个条件结构来设置游戏的输入循环,根据按键以否来判断游戏的下步动作方向。在主程序6

    7、的下半部分运用 while 循环来控制游戏的循环。游戏结束时通过用户的输入指令来决定游戏是否循环,输入“Yes”指令时游戏继续,否则游戏结束跳出循环。在 while 循环里再运用一个 while 循环来控制游戏的运动循环,当发生“自杀”事件或者“撞墙”事件时游戏结束跳出循环,否则游戏继续循环。程序框图如下:三、程序改进1.控制方向的改进在整个程序运行中我发现一个问题,即在游戏运行过程中想要准确控制蛇的移动方向不是很方便,因为原程序仅仅采用两个方向键“left”键和“right”键来控制。他把方向按不同的象限分成八个部分,沿逆时针方向依次分布为 0、1、2、3、4、5、6、7,其中 X 轴正半轴

    8、是 0 负半轴是 4,Y 轴正半轴是 2 负半轴是 6。根据这样的划分当按下不同的键时有不同的反应。当按下“left”键时,程序自动把当前蛇的方向值加 1(设为 X)后与程序允许的最大方向值 Y 做比较。如果 XY 则返回值“true” ,蛇向 X 值所指向的方向移动;否则返回值“false” ,蛇向 0 值所指向的方向移动。程序框图如下:7当按下“right”键时,蛇移动方向控制与“left”键相似,不同的是把蛇当前的方向值减 1 后的值 X 与方向值 0 做比较。如果 X0 则返回值“true” ,蛇向方向值为 7 的方向移动;否则返回值 “false”,蛇向反向值为 X 的方向移动。程序

    9、框图如下:这样的设置不是很理想,需要用户在游戏过程中不断的准确计算好下一步的方向值。话说这样设计可以让用户在游戏过程中锻炼思维的反应力和脑计算力,但是同时给用户在游戏过程中带来很大的不便,不利于游戏的继续进行。我构思着如果把方向键从复杂的左右两键改成简单的上下左右四个键,不仅可以形象的描述各个方向的控制移动,而且可以提高用户的玩游戏的速度,有一个好的心情。为此我经过大量的实验和改进,最后终于把自己的构想用程序表达出来了。下面简单介绍我修改的程序。8我的构思主要是得益于原作者的程序思路,是在他的基础上修改的。即把方向按坐标系中坐标轴的方向分为“0-right” 、 “2-up”、 “4-left

    10、”和“6-down”四个方向。在方向控制程序中运用了一个 while 循环、事件结构和条件结构。运用事件结构是因为需要运用事件结构中事件数据节点的“V 键”节点来控制方向的改变,而事件结构是与 while 循环配套使用的。运用条件结构是便于不同方向键按下时激活不同的条件状态控制蛇的移动。下面仅就“down 键”来说明我的思路。当按下“down 键”时,把当前的方向值 X 与下方向值 6 做比较,如果结果为“true”时输出方向为“down” ,如果结果为“false”时输出方向为“down” ,即强制性的向下移动。其他方向上的控制跟“down”方向的控制相同,中心思想是强制性实施动作。2.添加

    11、了“游戏暂停”按钮我觉得在原程序中没有暂停按钮是一个很大的缺憾,假设发生这种情况即用户使用这个程序的过程中可能会有急事需要离开可是又不想结束掉正在运行的程序,这样的设计就不够人性化。如果添加一个“暂停”按钮这个问题就可以迎刃而解了。为此我在“运动循环”中添加了一个“暂停”按钮。即在一个 while 循环中添加一个“等待下一个整数倍毫秒”来控制等待时间,一个“非”来激活命令。程序框图见图:四、程序存在的一些不足(一) 、可能是时间太过仓促,本程序在设计上存在一些不足。我把自己看到的一些不足列举如下:91.程序初始化时蛇身过长。虽说在设计程序时有专门控制蛇身长度的控件,可是在修改初始化时蛇身长度的

    12、数值后蛇身的长度依然没有太多的变化。2.蛇身长度无节制的增长。蛇在移动过程中蛇身长度会增长,即使是在没有吃掉苹果时蛇身的长度也会增长,这些都有悖常理。3.感觉把 collision_self.vi 程序弄的复杂化了。(二) 、我看不懂的部分程序由于程序很复杂,我有很多看不懂的地方,列举如下:1.我不知道子 VI 是如何运用的。在程序中常用子 VI,这虽然便于简化程序框图,却给我读程序造成很大的不便。不便的原因主要是在上课实践过程中没有运用过子 VI 完成作业或者做练习,虽然我在潜意识里知道子 V I 的用途很大。看着遍布程序框图的子 VI 我不知道它怎么运用、为什么这样运用,练习子VI 的原程

    13、序框图了解该子 VI 后我还是不知道如何运用。2.我不知道两个 while 循环是如何合作的。在主程序的第二帧中的那两个子 while 循环没有任何的联系,我不知道它们是怎么合作的。3.我不知道“delete when we have not ate an apple in the last 5 moves”是如何运行的。4.为什么要设置“last index ate apple at”这一步,这一步有什么作用吗?5.collision_self.vi 很复杂我看不懂。我不知道为什么要把 XY 分成ABCDEF 六个数据来处理。程序来源范例的网址:http:/ l?from=like论文参考:http:/

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:基于labview的贪吃蛇游戏程序设计基础.doc
    链接地址:https://www.docduoduo.com/p-10357073.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开