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