LabVIEW编程基础之生产者消费者结构 -- Simon小游戏(以羊了个羊为背景)

       LabVIEW在工业控制及仪器测量领域中用的会比较多,那么就经常会涉及到数据采集、分析和处理的问题,为了提高效率,往往会在数据采集的同时就进行数据分析和处理,这时就需要用多线程来处理,多线程的概念如果有不了解的,可以参考这位博主的讲解多线程(Thread、线程创建、线程池) - 作巴 - 博客园

       那么LabVIEW是支持多线程编程的,但是很多人在编程的时候喜欢使用局部变量和全局变量的方式来执行程序,这样的坏处就是可能会产生竞争冒险的问题,也就是说有可能出现在读取某一个变量的数据的时候正好发生了对该变量写入的操作,那读出来的数据就不确定是不是自己想要的数据了,当然在软件编程中我们可能会使用Lock的机制来避免这一问题,这里可以参考这位博主讲解C#中Lock的使用C#之lock_故里2130的博客-CSDN博客_c# lock,但是我想说的是,在LabVIEW中为了解决竞争冒险的问题以及能及时相应前面板操作的问题,生产者消费者结构不失为一种性价比很高的结构。

        生产者结构负责记录事件到队列中,而消费者负责从队列中将事件一个个取出并执行该事件,队列遵循先入先出的规则,整个过程可以有条不紊地进行。下面就以我自己编程做的这个Simon小游戏来做示例演示该结构的用法。

       下面是这个小游戏的文件夹中的文件,Control包括自己做的大量的自定义控件,file中存放游戏中保存的数据,Picture和music都是游戏中用到的素材,SubVI是游戏中调用的一些子VI,.lvpoj是工程文件,Main.vi是程序的入口。

       下面是游戏的主界面,游戏开始时界面动画会播放,左右的四个图标分别是排行榜、名片、联系我们和更多消息,点开分别有各种信息,界面中间填写用户名密码并选择游戏难度即可点击开始游戏,开始游戏后进入游戏界面,点击退出游戏退出主界面并关闭游戏。

       然后是游戏程序面板,上面一个while循环是生产者循环,主要用于记录操作者的操作事件,事件消息记录在队列中,下面这个循环是消费者循环,主要用于消息事件的处理。

 处理过程如下图所示

扫描二维码关注公众号,回复: 16524204 查看本文章

Simon游戏曾经一度风靡西方数十年,游戏规则如下图所示

       这部分消息是游戏处理过程,第一部分是AI操作,在我设计这款游戏中四个小羊分别会按顺序行走到自己的食物上并返回;第二部分是玩家操作,玩家需要按照AI执行的顺序点击小羊,小羊走到自己的食物上并返回,每点对一次小羊加一分。

       关于生产者消费者这个结构在使用的过程中还是会出现很多bug的,程序我放在下边供大家参考使用,使用过程中如果碰到什么问题,欢迎大家私信我一起交流学习!

链接:https://pan.baidu.com/s/1FD4JE42akpyF9G1pHGX79g 
提取码:53n9     复制这段内容打开「百度网盘APP 即可获取」

猜你喜欢

转载自blog.csdn.net/gougouainiuniu/article/details/128547412
今日推荐