基于LabVIEW的贪吃蛇小游戏
这个贪吃蛇小游戏是在b站上看到的,逻辑挺简单的,加上自己的思路和优化了下改了些小BUG,总体玩起来还可以。
这个贪吃蛇小游戏程序主要有程序的初始化,确认贪吃蛇的位置信息,贪吃蛇的移动,贪吃蛇的food随机产生,判定food被吃掉,判定游戏失败,改变贪吃蛇的移动方向等。
游戏前面板如下图所示

前面板控件对应的程序框图如下图所示。

一、程序初始化
该程序的初始化主要有游戏界面,按键是否可以按下,贪吃蛇移动方向,贪吃蛇位置、长度,随机food,游戏状态的初始化。
一、游戏界面的初始化
使用初始化数组生成一个30*30的游戏界面
在游戏界面初始化应提前于贪吃蛇的位置信息和food随机位置信息的初始化之间,同时初始化了贪吃蛇的移动方向、速度、游戏状态和按键许可。
二、贪吃蛇的位置信息初始化
使用索引数组、for结构、替换数组子集产生一个长度为4的贪吃蛇。
在这里初始化的是一个长度为4的贪吃蛇,按这游戏规则一般贪吃蛇出现的位置是固定的,所以蛇的位置信息应提前于food,根据蛇的位置信息来判断food随机出现的位置。
三、food的位置信息初始化
通样使用替换数组子集产生随机food。
food的产生都是随机性的,同时不可以于蛇的位置信息重叠。同时使用簇来记录food的位置信息和状态信息,以方便得到贪吃蛇是否吃到food和food的再次随机刷新。
二、确认贪吃蛇的位置信息
想要贪吃蛇能够做到移动,我们需要确认贪吃蛇的头位置信息和长度信息
这里使用了数组大小和索引数组分别获得贪吃蛇的长度信息和头位置信息
三、贪吃蛇的移动和是否吃到food
贪吃蛇的移动就根据贪吃蛇的移动方向信息进行判断,控制对行或列进行加1或减1的操作。主要是在是否吃到food进行贪吃蛇的长度控制,这里就是进行头的位置信息和food的位置信息进行对比从而确定是否吃到food,当没有吃到food如上图所示进行使用替换数组子集将下一个位置信息点亮,同时熄灭最后一个位置信息。当吃到food就不进行熄灭操作,同时改变food的状态信息如下图所示。
当贪吃蛇移动一次为了避免快速按键操作这里有一个按键是否按下的布尔赋值来控制按键操作。
四、贪吃蛇的按键操作
这里直接是使事件中的本VI,键按下,V键来控制贪吃蛇的运动方向,在这里改变方向否不可以直接再次改变移动方向这里就要使用移动中的按键是否按下标志信号,只有当改变方向后运动一次后才能再次改变方向,同时当贪吃蛇向一个方向运动时不能改变到相反的方向进行操作如上转下,下转上,左转右,右转左。
一、上
二、下
三、左
四、右
五、再次获得贪吃蛇的位置信息
当贪吃蛇位置改变后应马上获取其位置信系,否则可能出现数据错误
六、贪吃蛇吃点food后产生随机dood
这里就根据food状态信息,通过0-1随机数产生与贪吃蛇不重叠的food,同时更新food的位置信息和状态信息。
七、游戏失败
这个游戏失败有两种可能一是撞墙,二是头碰到的身体。
一、撞墙判定
这里是30*30的游戏界面只要头位置信息小于0或大于29贪吃蛇就相当于撞墙。
二、头触碰身体判断
这里就是贪吃蛇头没碰墙时,使用for结构获取除头以外的位置信息,与头的位置信息作比较当有相同的信息就说明贪吃蛇头碰到了身体。
七、游戏难度控制
这里直接是根据贪吃蛇的长度来改变游戏难度。
八、BUG说明
吃到食物卡死问题
程序链接已更新,架构大体一致
蛇迟到食物后程序会根据食物是否存在生成新的食物,在下图中的条件结构中判断新生成的食物坐标是否会与蛇的身体重叠,这个索引数组生成的条件和条件结构的条件不一致导致程序一直在此处卡死;
九、VI分享
链接
https://blog.csdn.net/li_lys/article/details/124870664?spm=1001.2014.3001.5501