exponenta event banner

Разработка игры с помощью Stateflow

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

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

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

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

Разделение подкомпонентов с помощью параллельной декомпозиции

Диаграмма TetrisLogic реализует логику, лежащую в основе игры. Диаграмма состоит из трех параллельных состояний, которые выполняются в следующем порядке:

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

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

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

Упрощение построения диаграмм с помощью иерархии и вложенных диаграмм

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

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

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

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

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

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

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

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

Сопоставления ключей

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

  • Переместить влево: стрелка влево или J

  • Переместить вправо: стрелка вправо или L

  • Повернуть по часовой стрелке: Стрелка вверх или I

  • Повернуть против часовой стрелки: Стрелка вниз или К

  • Опустить вниз: Пробел

  • Чтобы приостановить и возобновить воспроизведение: P

  • Выход: Q

См. также

Связанные темы