Занятие 7.2 Сборка сцены Луна

Цель: разработать сцену образовательного проекта "Космическая миссия" и подготовить ее для применения логики, инициализировать переменные.

Задачи:

  • Закрепить навык расстановки объектов на локации
  • Закрепить навык тестирования своих проектов
  • Закрепить навыки работы с UI/UX - дизайном
  • Закрепить навыки работы с логическими блоками ботов в Blockly
  • Закрепить навыки работы с вкладками логики в Blockly
  • Закрепить навыки работы с техническим заданием
  • Закрепить навыки работы с переменными и их инициализацией

Техническое задание:

Необходимо создать приложение для Varwin, которое будет воспроизводить лунную миссию, состоящую из трех шагов:

  1. Подвести ровер к маяку для получения координат (избегайте столкновений!).
  2. Вычислить оптимальный угол радара для отправки сообщения.
  3. Установить контакт с инопланетной цивилизацией, повернув радар на оптимальный угол.

Специальные требования:

  1. Препятствия должны генерироваться случайным образом при каждом запуске приложения.
  2. Должен быть реализован интерфейс для управления ровером.
  3. Требуется реализовать шкалу здоровья для ровера, которая будет уменьшаться при столкновении с препятствиями. При обнулении шкалы здоровья миссия должна начинаться сначала.
  4. Оптимальный угол должен рассчитываться автоматически из случайно сгенерированных координат и быть равен среднему арифметическому координат.
  5. UI должен информировать игрока об основных шагах выполнения миссии и о сгенерированных и вычисленных данных.
  6. Радар должен поворачиваться на вычисленный оптимальный угол, который задается случайным образом при каждом запуске приложения.

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

Сборка сцены Космической миссии

В качестве основной сцены в нашем случае выбрана локация “Луна.

Разместим на ней основные объекты:

  1. Ровер, который будет двигаться к маяку.
  2. С помощью Проводов зададим границы перемещения ровером в целях создания добного UX-дизайна. Для удобства создадим для проводов Иерархию.
  3. Радар, который будет поворачиваться на Оптимальный угол для установления контакта с инопланетной цивилизацией.
  4. И Маяк, к которому необходимо будет подвести ровер для получения координат.

 Самостоятельная работа: разместите на локации дополнительные пропсы, которые будут служить ограничителями игровой зоны, при этом они должны выглядеть естественно. В нашем случае, это лунная станция и солнечная батарея. Но вы можете найти больше объектов из этой тематики в пакете “Астрономия”.

Совет: плохой пример UX-дизайна для ограничения игрового пространства - это использование невидимых стен, старайтесь избегать такого метода ограничения перемещения игрока, лучше использовать в качестве препятствий объекты, вписывающиеся в тематику локации.

Далее нам необходимо разместить на сцене препятствия, которые должен будет объехать Ровер, управляемый игроком, чтобы добраться до маяка для генерации Координат.

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

Наконец, разместим на сцене UI, которые будут отвечать за постановку задания и окончание миссии (UI “Конец”) и информацию от маяка (UI “Координаты”):

На самом деле нам еще понадобятся дополнительные объекты на этой сцене, которые будут отвечать за интерфейс взаимодействия с ровером и маяком, но мы дополним этими UI сцену в момент, когда дойдем до сборки логики этих этапов выполнения задания, чтобы сформировать целостную картину сборки данного кейса.

Сборка логики Космической миссии.

Создадим вкладки в редакторе логики для реализации каждой из основных механик, согласно ТЗ:

Из ТЗ: Препятствия должны генерироваться случайным образом при каждом запуске приложения.

Во первых создадим вкладку Начало миссии (1), в которой опишем то, что происходит в Момент инициализации и условия старта. Одним из интересных условий является случайная генерация препятствий при начале миссии в Момент инициализации, здесь мы впервые столкнемся с циклами, поэтому сделаем на этом отдельный акцент.

Из ТЗ: Подвести ровер к маяку для получения координат (избегайте столкновений!).

Должен быть реализован интерфейс для управления ровером.

Для этих пунктов создадим вкладку Управление ровером (2), где соберем основные события и функции для интерфейса управления.

Из ТЗ: Подвести ровер к маяку для получения координат (избегайте столкновений!).

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

Все, что описано в данных пунктах относится к столкновениям ровера с препятствиями или целевым объектом (Маяк), выделим для этой логики отдельную вкладку Логика столкновений (3).

Из ТЗ: Вычислить оптимальный угол радара для отправки сообщения.

Установить контакт с инопланетной цивилизацией, повернув радар на оптимальный угол.

Оптимальный угол должен рассчитываться автоматически из случайно сгенерированных координат и быть равен среднему арифметическому координат.

UI должен информировать игрока об основных шагах выполнения миссии и о сгенерированных и вычисленных данных.

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

Все, что описано в данных пунктах так или иначе сводится к финалу миссии - это вычисление Оптимального угла, интерфейс управления Маяком и Радаром, для вычисления Оптимального угла и поворота Радара, а также UI для информирования игрока.

Итак, начнем собирать логику в данном порядке - по вкладкам.

Вкладка Начало миссии.

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

Примечание: в процессе разработки сложного приложения часто приходится возвращаться к началу, чтобы объявить новые переменные, которые требуются для реализации логики и часто сложно превентивно понять, какие именно переменные нам понадобятся. Но поскольку мы разбираем уже собранное приложение, то для наглядности мы упростим этот момент. Однако в будущем не забывайте, что часто сложно спрогнозировать конечную архитектуру вашего приложения.

  1. Переменная Оптимальный угол - это переменная будет вычисляться в процессе выполнения логики приложения, пока зададим ей значение по умолчанию “0”.
  2. Переменная Здоровье ровера - эта переменная отвечает за максимальное количество столкновений Ровера с препятствиями, до его разрушения и перезапуска приложения.
  3. Переменная Текст с координатами - это переменная, которая будет отвечать за отображение случайно сгенерированных координат на UI “Координаты”.
  4. Список Координат - с помощью этой переменной мы создаем список с одинаковыми элементами, чтобы в будущем его перезаполнить случайно сгенерированными числами. Очень важно на старте определиться с длиной списка, независимо от элементов, которые будут его наполнять, зато в будущем мы сможем быстро поменять количество этих элементов одним кликом для оптимизации нашего приложения.
  5. Список Препятствий - здесь мы формируем список Препятствий, которые ранее расставили на локации (в нашем случае это бочки и контейнеры, но у Вас может быть другой список этих объектов).

На пункте 5 остановимся подробнее.

Как вы видите, мы можем формировать списки не только из абстрактных чисел или текста, но и из объектов, которые находятся на сцене.

Для того, чтобы это сделать выберите категорию объектов “Любой”, а далее назначьте необходимый объект из выпадающего списка:

Этот список нам понадобится для создания случайной генерации препятствий в начале Космической миссии. С этого и начнём следующее занятие.

Контрольные вопросы (выборочно можно использовать на этапе рефлексии, для проверки усвоения знаний, полученных на занятии):

  1.  Из каких объектов можно создавать списки в Varwin?
  2. Что делает блок «в момент инициализации»?
  3. Что нужно сделать чтобы сформировать список из объектов? 
Последнее изменение: Четверг, 1 Февраль 2024, 20:15