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

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

Смотрите также

Похожие темы