В этом примере показано, как реализовать игру Тетриса при помощи графика Stateflow®. Эта модель является перепроектированной версией классической демонстрации Stateflow sf_tetris. Новый проект включает эти парадигмы программирования:
Параллельное разложение, чтобы отделиться пред - и задачи последующей обработки от основной логики пульта управления игрой.
Иерархия состояния и подграфики, чтобы обеспечить семантические абстракции, которые упрощают проект графика.
Измените операторы обнаружения, чтобы запросить для входа с клавиатуры.

График TetrisLogic реализует логику позади игры. График состоит из трех параллельных состояний, которые выполняются в этом порядке:
WaitingArea выполняет задачи предварительной обработки, такие как случайная генерация следующего tetronimo (форма, состоящая из четырех квадратов). В процессе моделирования меньший квадрат справа от игры пользовательский интерфейс отображает этот tetronimo.
MainArea реализует основную управляющую логику для игры. Чтобы представлять арену проигрывания, это состояние использует 21 12 массив arena. На каждом шаге симуляции график обновляет массив на основе состояния игры и входа от игрока.
Draw выполняет задачи последующей обработки, такие как вызов скрипта MATLAB® sf_tetris_gui. Этот скрипт отображает арену как изображение и получает нажатия клавиш от игрока.

При помощи иерархии состояния и подграфиков, можно графически абстрагировать игровую логику, представить общий обзор потока игры и скрыть внутреннюю сложность каждого этапа игры. Например, каждое подсостояние параллельного MainArea состояния представляет отдельный этап в потоке игры.
Игра запускается путем генерации нового tetronimo (подутвердите NewShape).
Движения вниз tetronimo или боком, в зависимости от входа от игрока (подутверждают Moving).
Когда tetronimo достигает низшей точки арены или более раннего tetronimo ниже ее, tetronimo прекращает перемещаться (подутвердите Stopped).
Если остановки tetronimo в слишком высокой точке на арене, игровые концы (подутверждают GameOver). В противном случае график замораживается, tetronimo (подутвердите FreezeShape), настраивает, счет (подутвердите Score), переходит к следующему уровню при необходимости (подутвердите NextLevel), и доходы к следующему tetronimo (подутверждают NewShape).
Moving подграфик перемещает tetronimo на основе входа от игрока. По умолчанию, MoveSlowly подсостояния активно. tetronimo перемещает медленно вниз арену проигрывания, в то время как параллель подутверждает в MoveSlowly контролируйте вход с клавиатуры. Если проигрыватель нажимает клавишу "пробел", MoveFast подсостояния становится активным. tetronimo понижается быстро к нижней части арены.
Чтобы собрать вход с клавиатуры, подграфик использует оператор обнаружения изменения hasChanged. Каждый раз, когда проигрыватель нажимает клавишу, sf_tetris_gui постепенно увеличивает вход к графику, который делает соответствующий hasChanged оператор возвращает значение true. Поскольку MoveSlowly имеет параллельное разложение, график может обработать несколько нажатий клавиш каждый временной шаг.

Чтобы взаимодействовать с игрой пользовательский интерфейс, используйте эти ключи:
Перемещение оставлено: Стрелка влево или J
Переместите вправо: Стрелка вправо или L
Вращайтесь по часовой стрелке: Стрелка вверх или я
Вращайтесь против часовой стрелки: Стрелка вниз или K
Спад до нижней части: Клавиша "пробел"
Приостановить и возобновить игру: P
Выходить: Q
