Проектируйте игру при помощи Stateflow

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

  • Параллельное разложение для отделения задач предварительной и последующей обработки от основной логики управления игрой.

  • Иерархия состояний и субдиаграмм для обеспечения семантических абстракций, которые упрощают проект графика.

  • Измените операторы обнаружения, чтобы запросить вход с клавиатуры.

Разделите подкомпоненты при помощи параллельного разложения

В график TetrisLogic реализована логика игры. График состоит из трех параллельных состояний, которые выполняются в этом порядке:

  • WaitingArea выполняет задачи предварительной обработки, такие как случайное генерирование следующего тетронимо (форма, состоящая из четырех квадратов). Во время симуляции меньший квадрат справа от пользовательского интерфейса игры отображает это тетронимо.

  • MainArea реализует основную логику управления для игры. Чтобы представлять арену игры, это состояние использует массив 21 на 12 arena. На каждом шаге симуляции график обновляет массив на основе состояния игры и входов игрока.

  • Draw выполняет постобработку, например вызывает скрипт MATLAB ® sf_tetris_gui. Этот скрипт отображает арену как изображение и захватывает нажатия клавиш от игрока.

Упрощение проекта графика при помощи иерархии и субдиаграмм

При помощи иерархии состояний и субдиаграмм можно графически абстрагировать игровую логику, представить высокоуровневый обзор потока игры и скрыть внутреннюю сложность каждого этапа игры. Для примера каждое подсостояние параллельного состояния MainArea представляет отдельный этап в потоке игры.

  • Игра начинается с генерации нового тетронимо (substate NewShape).

  • Тетронимо движется вниз или сбоку, в зависимости от входа игрока (substate Moving).

  • Когда тетронимо касается дна арены или более раннего тетронимо под ней, тетронимо перестает двигаться (substate Stopped).

  • Если тетронимо останавливается в слишком высокой точке на арене, игра заканчивается (substate GameOver). В противном случае график замораживает тетронимо (substate FreezeShape), корректирует счет (subsate Score), при необходимости переходит на следующий уровень (substate NextLevel) и переходит к следующему тетронимо (substate NewShape).

Захват входа клавиатуры посредством обнаружения изменений

The Moving субдиаграмма перемещает тетронимо на основе входов от игрока. По умолчанию subsate MoveSlowly активно. Тетронимо медленно перемещается вниз по игровой арене, в то время как параллель подсоединяется к MoveSlowly контролировать вход с клавиатуры. Если игрок нажимает пробел, subsate MoveFast становится активным. Тетронимо быстро опускается на дно арены.

Чтобы собрать вход с клавиатуры, субдиаграмма использует оператор обнаружения изменений hasChanged. Каждый раз, когда игрок нажимает клавишу, sf_tetris_gui увеличивает вход на графике, что делает соответствующий hasChanged оператор возвращает значение true. Потому что MoveSlowly имеет параллельное разложение, график может обрабатывать несколько нажатий клавиш каждый временной шаг.

Ключевые Отображения

Для взаимодействия с игровым пользовательским интерфейсом используйте следующие клавиши:

  • Движение налево: влево стрела или J

  • Перемещение вправо: Стрела вправо или L

  • Вращайте по часовой стрелке: Вверх стрела или я

  • Вращайте против часовой стрелки: Вниз стрела или K

  • Падение на дно: Пробел

  • Пауза и возобновление игры: P

  • К выходу: Q

См. также

Похожие темы