主要内容

通过使用Stateflow设计一个游戏

这个例子展示了如何实现俄罗斯方块的游戏使用Stateflow®图表。这个模型是一个重新设计的版本的经典Stateflow演示sf_tetris。新的设计包含这些编程范例:

  • 并行分解分离预处理和后期处理任务的主要控制逻辑游戏。

  • 国家层次和子图表提供语义抽象简化图的设计。

  • 变化检测运营商查询从键盘输入。

单独的子组件通过使用并行分解

图表TetrisLogic实现游戏背后的逻辑。图表包含三个平行的状态,在这个顺序执行:

  • WaitingArea执行预处理随机生成等任务tetronimo(一个形状组成的四个方块)。在仿真中,右边的小广场这个tetronimo游戏界面显示。

  • MainArea实现了游戏的主要控制逻辑。代表打竞技场,这种状态使用21-by-12数组竞技场。在每个模拟步骤,图表更新数组基于游戏的状态和输入的球员。

  • 执行后处理等任务调用MATLAB®脚本sf_tetris_gui。这个脚本显示领域作为一个形象和捕获按键的球员。

简化图表设计通过使用层次结构和子图表

通过使用国家层次和子图表,可以图形化抽象的游戏逻辑,提出了流的高级概述的游戏,和隐藏的内在复杂性的每一个阶段的比赛。例如,每个亚态平行的状态MainArea代表一个单独的阶段的比赛。

  • 在比赛开始通过生成一个新的tetronimo(亚态NewShape)。

  • tetronimo或横向移动,根据输入的球员(亚态移动)。

  • 当tetronimo触动竞技场的底部或早期tetronimo下面,tetronimo停止移动(亚态停止)。

  • 如果tetronimo停在舞台太高了一点,游戏结束(亚态游戏结束)。否则,图表冻结tetronimo(亚态FreezeShape),调整分数(亚态分数必要时),进展到下一个级别(亚态NextLevel),下一个tetronimo(亚态NewShape)。

通过变化检测捕获键盘输入

移动子图表移动tetronimo根据输入的球员。默认情况下,亚态MoveSlowly是活跃的。tetronimo移动慢慢打竞技场在并行亚态MoveSlowly监控从键盘输入。如果玩家按下空格键,亚态MoveFast变得活跃。tetronimo下降迅速的底部。

收集从键盘输入,子图表使用变化检测算子焕然一新。每次玩家按下一个键,sf_tetris_gui增加一个输入图表,使相应的焕然一新操作符返回一个值真正的。因为MoveSlowly有一个并行分解,每个时间步图表可以处理多个按键。

键映射

与游戏交互界面,使用这些键:

  • 左:移动左箭头键J

  • 移动:右箭头l

  • 顺时针旋转:向上箭头键

  • 逆时针旋转:向下的箭头K

  • 下降到下:空格键

  • 暂停和恢复播放:P

  • 退出:

另请参阅

相关的话题