Эта модель показывает пересматривание классической игры Тетриса, которая поставлялась с Stateflow®, чтобы использовать некоторые более современные парадигмы программирования и функции. Это показывает использование hasChanged
функциональный оператор, чтобы запросить изменения в значении входных параметров, функция MATLAB®, чтобы абстрагировать алгоритмические субкомпоненты и некоторые полезные семантические абстракции, такие как иерархические состояния и внутренние переходы.
Диаграмма Stateflow TetrisLogic реализует логику позади игры. Арена или игровая площадка представлены [21x12] массив, который представляет арену проигрывания. График обновляет этот массив на каждом шаге симуляции и только использует MATLAB, чтобы отобразить массив как изображение.
Игровой поток Тетриса представлен интуитивно MainArea
подсостояния, который представляет текущее состояние игровой площадки. Игра запускается путем получения "новой формы" (или tetronimo). Часть затем продолжает движение вниз (или боком) в зависимости от ввода данных пользователем. Когда часть касается чего-то снизу (условие isTouching
), затем часть прекращает перемещаться. Если часть остановилась слишком высоко, то игра закончена. В противном случае мы "замораживаем" форму, если необходимое перемещение к следующему уровню, получите новую форму и продолжите.
Графически абстракция игровой логики на этом уровне обеспечивает хороший способ скрыть детали на различных уровнях. Каждое из подсостояний может скрыть свою внутреннюю сложность.
Например, подсостояние Moving
ответственно за перемещение tetronimo на основе ввода данных пользователем. Еще раз мы можем абстрагировать игровой поток при помощи состояний. tetronimo или перемещается медленно (значение по умолчанию) или падает быстро (когда пользователь нажимает клавишу "пробел" и заставляет hasChanged(drop)
возвратить true).
Заметьте, что использование hasChanged
собирает ввод данных пользователем. Каждый раз, когда пользователь нажимает клавишу, пользовательский интерфейс MATLAB постепенно увеличивает вход к графику, который заставляет hasChanged
возвратить true в течение того такта.
Параллельные подсостояния MoveSlowly
получают то, что мы хотим обработать многопользовательские нажатия клавиш на временной шаг.
Наконец, пользовательский интерфейс реализован с помощью простого скрипта MATLAB, который также получает нажатия клавиш от пользователя.
'j' или Уехавший оставленное перемещение
'l' или RIGHT для того, чтобы переместить вправо
'i' или UP для вращения по часовой стрелке
'k' или DOWN для вращения против часовой стрелки
ПРОБЕЛ для отбрасывания очень быстро
'p' для вопроизводят/приостанавливают
'q' для выхода
Меньшая квадратная ось справа показывает следующий tetronimo.