Тетрис

Эта модель показывает пересматривание классической игры Тетриса, которая поставлялась с 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.

Похожие темы