Занятие 6.3 Сборка логики первого задания

Цель: разработать первую сцену образовательного проекта "Урок английского".

 Задачи:

- Закрепить знания о таком понятии как список

-  Закрепить навыки работы с логическими блоками ботов в Blockly

- Закрепить навыки настройки логики ботов

- Закрепить навыки тестирования своих проектов

- Создать необходимые функции для реализации проекта

- Реализовать логику задания первой сцены

- Научиться работать с активацией/деактивацией объектов в Blockly

- Сформировать понимание как использовать функции для создания простейших циклов

 В момент инициализации.

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

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

  1. Во первых нам необходимо объявить переменные Ответ (1) и Результат (2). Ответ будет соответствовать нашему ответу на вопрос бота. При правильном Ответе Результат будет увеличиваться на один. Пока положим в них значение “0”.
  2.  Далее мы создаем список вопросов (3). Чтобы создать список необходимо создать переменную (в нашем случае это переменная Список вопросов) и далее выбрать блок “Создать список из”.

И после следует добавить туда английские наименования числительных от 1 до 9.

Примечание: чтобы расширить список дополнительными элементами необходимо нажать на “Шестеренку” и подставить вспомогательный блок “Элемент” в список как на картинке ниже.

Далее Бот будет обращаться к этому списку, чтобы задавать нам вопросы.

3. Перейдем к блокам Бота.

Разберем их на нашем примере.

Блок “Задать расстояние остановки перед объектом” (4) уже встречался нам в таблице стандартной логики, он присутствует и у Бота.

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

Блок “Двигаться в сторону объекта X” (5) несколько отличается от стандартного логического блока перемещения в сторону определенного объекта тем, что здесь мы можем задать анимацию перемещения Шагом или Бегом.

Блок “Задать тип скрываемого текста” (6) дублирует свойство объекта, которое можно установить в инспекторе, что мы и сделали ранее сняв флажок “Скрывать текст автоматически” в Desktop-редакторе. Этот блок здесь для наглядности.

4. Последнее действие в момент инициализации - нам необходимо деактивировать блоки UI “Готов!” и “Результат” (7), они будут появляться в момент, когда бот подбежит к нам и произнесет начальную фразу.

Начало задания и уникальные логические блоки объекта Бот.

 Итак, в момент инициализации Бот начинает двигаться в сторону объекта игрок.

В момент когда он достигает целевого объекта (при расстоянии остановки 4 метра перед целевым объектом), Бот должен произнести фразу с постановкой задачи перед Игроком, в нашем случае формулировка такая: “Давай разберемся с числительными от 1 до 9. Играем до 5ти правильных ответов! Я буду называть число по английски, а ты выбирать правильное на клавиатуре. Готов?”.

После этого мы активируем UI “Готов!”.

Блок “Сказать” является уникальным для Бота, он активирует облако текста над головой Бота с заданным текстом.

Совет: мы только что собрали базовую часть нашего приложения. Протестируйте, все ли работает так, как вы задумали. Если это действительно так, то вы увидите примерно такую картинку:

Создание необходимых функций.

Вы помните, что после того как Бот подбежал к нам и произнес фразу с постановкой задачи у нас должен активироваться UI “Готов!”.

Далее нам необходимо собрать блок с логикой того, что происходит после использования этого UI:

Как видите, здесь уже присутствуют функции “Случайный вопрос” и “Обновление результата”. Разберем их последовательно.

 Функция Случайный вопрос.

Данная функция выглядит так:

  1. Для начала разберемся со случайными числами. Объявим переменную Случайный выбор вопроса и выберем блок в категории “Математика” Случайное целое. Установим диапазон от 1 до 9.

Этот блок будет генерировать случайное число от 1 до 9 каждый раз при активации этой функции для выполнения требования из ТЗ.

2. Далее нам необходимо присвоить новое значение переменной Вопрос (именно этот вопрос будет задавать Бот). Для этого в категории “Списки” выберем блок В списке взять # (индекс) X.

Наш список автоматически пронумерован от 1 до 9.

Подробно механика работает так: генератор случайных чисел из блока “Случайное целое” генерирует случайное число от 1 до 9, далее блок “В списке взять # (индекс) X” берет из списка текст с индексом, соответствующий этому случайному числу и присваивает этот текст в качестве значения переменной Вопрос. Далее этот вопрос задает игроку Бот.

3. Последний блок отвечает за фразу, которую произнесет Бот.

Здесь мы познакомимся с расширенным использованием блоков из категории “Текст”.

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

В этом нам поможет блок из категории “Текст” Создать текст из.

В нашем случае мы создаем текст из фразы “Переведи:” и второй элемент - это переменная Вопрос.

Примечание: при работе с текстом важно, чтобы все элементы были одного типа. Переменная Вопрос сейчас у нас числового типа, поэтому необходимо привести ее к текстовому типу, используя блок “Привести к строке” из категории “Текст”, иначе это может привести к логической ошибке. Обращайте на это внимание!

Мы закончили работать с этой функцией, перейдем к следующей.

Функция Обновление результата.

Эта функция отвечает за обновление информации на UI “Результат” и выглядит так:

 

Здесь используется уже знакомый нам блок “Создать текст из”, но здесь важно реализовать возможность переноса строки.

 Для этого используем блок ¶:

При использовании блока “Создать текст из” он будет просто размещать элементы друг за другом в одной строке.

Блок ¶ отвечает за многострочный ввод. То есть, если мы напишем “Твой результат”, а после нажмем Enter и оставим пустую строку, то это будет восприниматься программой как перенос строки. Таким образом можно вводить текст, каждое предложение которого будет начинаться с новой строки.

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

 Настройка взаимодействия и Функции Проверка ответа.

Итак, сейчас по логике у нас получается следующая картина: после того как мы получили задание и нажали на кнопку “Готов!”, бот задаст нам первый случайный вопрос, например “Переведи: One”. Далее нам необходимо нажать на кнопку “1”, чтобы дать верный ответ.

Давайте настроим эту логику. Для начала возьмем блок “Объект начали использовать”:

Вы видите, что при использовании UI “1” мы присваиваем переменной Ответ значение “1”, что совершенно логично, и активируется уже знакомая функция Случайный вопрос, которая заставляет бота задать следующее задание и еще незнакомая функция Проверка ответа. Давайте разберем последнюю.

Функция выглядит так:

Логика здесь следующая: мы помним, что первоначально генератор случайных чисел выбирает индекс из списка Список вопросов, соответственно, если наш Ответ равен этому индексу, то мы увеличиваем переменную Результат на 1 (инкрементируем) и активируем функцию Обновление результата, чтобы актуализировать информацию на UI “Результат”.

А после нашего ответа активируется функция Случайный вопрос, которая продолжает этот цикл.

Самостоятельная работа: соберите все события для всех UI с числами, чтобы у вас получилась следующая картина:

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

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

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

  1. Что такое списки и в каких случаях их применяют?
  2. Зачем создавать пустой список?
  3. Какие логические блоки есть в категории «Список»?
Последнее изменение: Четверг, 1 Февраль 2024, 17:45