Занятие 6.3 Сборка логики первого задания
Цель: разработать первую сцену образовательного проекта "Урок английского".
Задачи:
- Закрепить знания о таком понятии как список
- Закрепить навыки работы с логическими блоками ботов в Blockly
- Закрепить навыки настройки логики ботов
- Закрепить навыки тестирования своих проектов
- Создать необходимые функции для реализации проекта
- Реализовать логику задания первой сцены
- Научиться работать с активацией/деактивацией объектов в Blockly
- Сформировать понимание как использовать функции для создания простейших циклов
В момент инициализации.
Для начала давайте определимся с логикой, которая будет активироваться в момент инициализации проекта, т.е. в самом начале работы приложения при запуске.
На картинке ниже мы видим событие “В момент инициализации”, теперь давайте пошагово разберемся, что значит каждый блок в теле этого события:
- Во первых нам необходимо объявить переменные Ответ (1) и Результат (2). Ответ будет соответствовать нашему ответу на вопрос бота. При правильном Ответе Результат будет увеличиваться на один. Пока положим в них значение “0”.
- Далее мы создаем список вопросов (3). Чтобы создать список необходимо создать переменную (в нашем случае это переменная Список вопросов) и далее выбрать блок “Создать список из”.
И после следует добавить туда английские наименования числительных от 1 до 9.
Примечание: чтобы расширить список дополнительными элементами необходимо нажать на “Шестеренку” и подставить вспомогательный блок “Элемент” в список как на картинке ниже.
Далее Бот будет обращаться к этому списку, чтобы задавать нам вопросы.
3. Перейдем к блокам Бота.
Разберем их на нашем примере.
Блок “Задать расстояние остановки перед объектом” (4) уже встречался нам в таблице стандартной логики, он присутствует и у Бота.
Этот блок необходим, чтобы Бот остановился за 4 метра до игрока, иначе он будет пытаться пройти сквозь нас.
Блок “Двигаться в сторону объекта X” (5) несколько отличается от стандартного логического блока перемещения в сторону определенного объекта тем, что здесь мы можем задать анимацию перемещения Шагом или Бегом.
Блок “Задать тип скрываемого текста” (6) дублирует свойство объекта, которое можно установить в инспекторе, что мы и сделали ранее сняв флажок “Скрывать текст автоматически” в Desktop-редакторе. Этот блок здесь для наглядности.
4. Последнее действие в момент инициализации - нам необходимо деактивировать блоки UI “Готов!” и “Результат” (7), они будут появляться в момент, когда бот подбежит к нам и произнесет начальную фразу.
Начало задания и уникальные логические блоки объекта Бот.
Итак, в момент инициализации Бот начинает двигаться в сторону объекта игрок.
В момент когда он достигает целевого объекта (при расстоянии остановки 4 метра перед целевым объектом), Бот должен произнести фразу с постановкой задачи перед Игроком, в нашем случае формулировка такая: “Давай разберемся с числительными от 1 до 9. Играем до 5ти правильных ответов! Я буду называть число по английски, а ты выбирать правильное на клавиатуре. Готов?”.
После этого мы активируем UI “Готов!”.
Блок “Сказать” является уникальным для Бота, он активирует облако текста над головой Бота с заданным текстом.
Совет: мы только что собрали базовую часть нашего приложения. Протестируйте, все ли работает так, как вы задумали. Если это действительно так, то вы увидите примерно такую картинку:
Создание необходимых функций.
Вы помните, что после того как Бот подбежал к нам и произнес фразу с постановкой задачи у нас должен активироваться UI “Готов!”.
Далее нам необходимо собрать блок с логикой того, что происходит после использования этого UI:
Как видите, здесь уже присутствуют функции “Случайный вопрос” и “Обновление результата”. Разберем их последовательно.
Функция Случайный вопрос.
Данная функция выглядит так:
- Для начала разберемся со случайными числами. Объявим переменную Случайный выбор вопроса и выберем блок в категории “Математика” Случайное целое. Установим диапазон от 1 до 9.
Этот блок будет генерировать случайное число от 1 до 9 каждый раз при активации этой функции для выполнения требования из ТЗ.
2. Далее нам необходимо присвоить новое значение переменной Вопрос (именно этот вопрос будет задавать Бот). Для этого в категории “Списки” выберем блок В списке взять # (индекс) X.
Наш список автоматически пронумерован от 1 до 9.
Подробно механика работает так: генератор случайных чисел из блока “Случайное целое” генерирует случайное число от 1 до 9, далее блок “В списке взять # (индекс) X” берет из списка текст с индексом, соответствующий этому случайному числу и присваивает этот текст в качестве значения переменной Вопрос. Далее этот вопрос задает игроку Бот.
3. Последний блок отвечает за фразу, которую произнесет Бот.
Здесь мы познакомимся с расширенным использованием блоков из категории “Текст”.
Текст можно не только вводить вручную, но и создавать из нескольких элементов, в том числе используя переменные.
В этом нам поможет блок из категории “Текст” Создать текст из.
В нашем случае мы создаем текст из фразы “Переведи:” и второй элемент - это переменная Вопрос.
Примечание: при работе с текстом важно, чтобы все элементы были одного типа. Переменная Вопрос сейчас у нас числового типа, поэтому необходимо привести ее к текстовому типу, используя блок “Привести к строке” из категории “Текст”, иначе это может привести к логической ошибке. Обращайте на это внимание!
Мы закончили работать с этой функцией, перейдем к следующей.
Функция Обновление результата.
Эта функция отвечает за обновление информации на UI “Результат” и выглядит так:
Здесь используется уже знакомый нам блок “Создать текст из”, но здесь важно реализовать возможность переноса строки.
Для этого используем блок ¶:
При использовании блока “Создать текст из” он будет просто размещать элементы друг за другом в одной строке.
Блок ¶ отвечает за многострочный ввод. То есть, если мы напишем “Твой результат”, а после нажмем Enter и оставим пустую строку, то это будет восприниматься программой как перенос строки. Таким образом можно вводить текст, каждое предложение которого будет начинаться с новой строки.
Мы закончили работать с начальными функциями. Теперь нам необходимо настроить взаимодействие игрока с интерфейсом и проверку правильности ответа.
Настройка взаимодействия и Функции Проверка ответа.
Итак, сейчас по логике у нас получается следующая картина: после того как мы получили задание и нажали на кнопку “Готов!”, бот задаст нам первый случайный вопрос, например “Переведи: One”. Далее нам необходимо нажать на кнопку “1”, чтобы дать верный ответ.
Давайте настроим эту логику. Для начала возьмем блок “Объект начали использовать”:
Вы видите, что при использовании UI “1” мы присваиваем переменной Ответ значение “1”, что совершенно логично, и активируется уже знакомая функция Случайный вопрос, которая заставляет бота задать следующее задание и еще незнакомая функция Проверка ответа. Давайте разберем последнюю.
Функция выглядит так:
Логика здесь следующая: мы помним, что первоначально генератор случайных чисел выбирает индекс из списка Список вопросов, соответственно, если наш Ответ равен этому индексу, то мы увеличиваем переменную Результат на 1 (инкрементируем) и активируем функцию Обновление результата, чтобы актуализировать информацию на UI “Результат”.
А после нашего ответа активируется функция Случайный вопрос, которая продолжает этот цикл.
Самостоятельная работа: соберите все события для всех UI с числами, чтобы у вас получилась следующая картина:
Вы еще раз можете убедиться для чего нужны функции - они выполняют повторяющиеся операции, что позволяет оптимизировать логику, ведь без функций нам бы пришлось описывать логику задавания случайного вопроса и проверки ответа в каждом из этих блоков выше.
Таким образом мы зацикливаем процесс задавания вопросов ботом с помощью этих функций, но до какого момента?
Контрольные вопросы (выборочно можно использовать на этапе рефлексии, для проверки усвоения знаний, полученных на занятии):
- Что такое списки и в каких случаях их применяют?
- Зачем создавать пустой список?
- Какие логические блоки есть в категории «Список»?