В этом примере показано, как реализовать игру Тетриса при помощи графика 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
