冰壶游戏更新:App Designer和statflow
最近有人向我提出挑战,要我对我们几年前发布的冰壶模拟器进行改造这篇文章和这篇文章),以利用当时没有的新功能:程序设计师和为MATLAB Stateflow.
你可以猜到,这不是我能拒绝的挑战!
你可以在这里找到最终的结果:冰壶游戏App
概述
下面是一个图表,说明了冰壶应用程序是如何实现的:
如果你下载了这个应用程序,下面是你将看到的文件的描述:
- TestCurling.m:属性创建的测试软件测试框架.这允许我以编程方式执行我的应用程序,并验证它的行为是否符合预期。
- curling.mlapp:主要的应用。
- curlingLogic.sfx:定义应用程序的所有逻辑和动作的状态流程图。
- curlingSimulator.slx:一个金宝appSimulink模型,模拟石头在冰上的动力学。
- msfcn_showTrack。m和msfcnsweeper.m:在Simulink模型中使用MATLAB S-Functio金宝appn来动画冰壶游戏的应用程序。
现在让我们分别来看每一部分
程序设计师
正如我在以前的文章,在MATLAB中执行的状态流图非常方便地定义MATLAB应用程序的行为。在这样的应用程序中,MATLAB应用程序本身只定义应用程序中的图形元素,并将应用程序的回调映射到状态流图中的事件。
以下是应用程序在设计视图中的样子:
就代码而言,这非常简单。我只是简单地定义了一个startupFcn回调来实例化状态流图,在那里我传递给它一个句柄给MATLAB应用程序。然后对于应用程序中的每个项目(按钮,轴等),我定义了一个回调来触发状态流图中的事件。
MATLAB Stateflow图表
这是定义所有应用功能的地方。这是它的样子:
这个逻辑将一次投掷分为4种状态:等待、选择目标、指定速度和旋转以及投掷。每个状态之间的转换都是由应用程序触发的,在每个状态中,我可以像在MATLAB代码中那样与应用程序的组件进行交互。在这篇文章的最后,你会看到更多关于石头动画的内容。
一旦用户点击应用中的“Go”按钮,状态流程图就会开始模拟并等待完成。为此,我定期检查模拟状态使用后函数。
对于图表中多个位置需要的一些实用程序,我在statflow中创建了MATLAB函数,可以从图表中的多个位置调用它们。这里是一个示例函数,每次我需要绘制一个新的石头。
金宝app仿真软件模型
和我在我的2018年后, Simu金宝applink模型没有太大变化。我唯一需要修改的是MATLAB S-Function,以便在模拟过程中使石头动画化。
为了让S-Function与应用程序交互,它需要一个手柄。在开始模拟之前,状态流图将这个句柄存储在S-Function中阻止用户数据.这样,s函数可以检索它,并在每个时间步骤中设置石头的位置。下面是Output方法的样子:
测试
在开发像这样的应用程序时,如果你需要一次又一次地手动点击相同的一系列按钮,那么测试和调试可能会很乏味。这就是软件测试框架发挥作用了。
我创建了一个函数,它以编程方式执行一次抛出。为,新闻应用程序测试框架的方法允许我按一个按钮或应用程序中的特定位置。
然后在测试中,我用不同的目标和速度调用这个方法。最后,我确认所有的石头都在预期的地方。
下面是我运行测试时屏幕的样子。请注意蓝色圆圈,这里发生了程序化的点击,以及statflow动画,使我可以很容易地验证它正在做正确的事情:
现在轮到你了
下载此最新版本的在MATLAB中心的冰壶游戏应用程序请在下面的评论中告诉我们你的想法。
- 类别:
- 有趣,
- Stateflow,
- 有什么新鲜事吗?
评论
要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。