Вопросы:
· Сенсоры.
· Блок «Если».
· Умный спрайт.
Ранее мы научились составлять последовательности команд для спрайтов Scratch. Однако практически все они выполняются всегда одинаково, независимо от начальных условий. В жизни дело обстоит иначе. Мы постоянно принимаем какие-то решения в зависимости от окружающих обстоятельств. Например, если на улице холодно, то мы одеваемся теплее, а если жарко – легче. Или если на пешеходном переходе горит красный свет – мы ждём, а если зелёный – переходим.
Подумаем, с чего начинается принятие любого решения в реальной жизни. Принятие любого решения начинается с получения и анализирования информации. Для получения информации человек использует органы чувств, такие как глаза, уши и другие... Как и человек в реальной жизни, спрайт Scratch сначала получает информацию и анализирует её. Правда, пользуется для этого другими инструментами. Посмотрим на них. Для этого в среде Scratch, на вкладке «Скрипты» спрайта царапки, перейдём в категорию «Сенсоры». Именно сенсоры помогают спрайтам получать и анализировать информацию.
Рассмотрим некоторые из блоков в этой категории. Сперва обратим внимание, что здесь большинство блоков имеют необычную форму. У большинства блоков в этой категории нет элементов для того, чтобы закрепить их в скрипте. Интересно, почему? Проведём небольшой опыт. Немного изменим фон сцены и нарисуем на нём небольшой зелёный квадрат. Теперь вернёмся к спрайту Царапки и перейдём на вкладку «Скрипты», в категорию «Сенсоры». Выберем из категории блок «Касается цвета...» и перетащим его в рабочее поле спрайта. Щёлкнем по окошку цвета в блоке левой кнопкой мыши. Курсор принял вид руки с вытянутым указательным пальцем. Наведём его на квадрат, изображённый на сцене. И щёлкнем по нему левой кнопкой мыши. Цвет окошка в блоке стал таким же, как и цвет квадрата на сцене. Установим спрайт Царапки так, чтобы он касался квадрата, и щёлкнем по блоку в рабочем поле. Над блоком появилась рамка с надписью «true» на английском языке. Установим Царапку так, чтобы он не касался квадрата, и снова активируем блок, щёлкнув по нему левой кнопкой мыши. Теперь высветилась рамка с надписью «false».
Возможно, некоторые из вас знают, что в переводе с английского языка слово «true» означает «Истина», а слово «false» – «Ложь». Можно сделать вывод о том, что этот блок даёт ответ на вопрос «Касается ли спрайт заданного цвета?». Если касается – ответ «истина», иначе – «ложь». Так как этот блок лишь отвечает на вопрос, и при этом спрайт ничего не делает, этот блок не является командой. Именно поэтому его форма не даёт установить его в скрипт. А что же тогда делать с такими блоками? Их можно устанавливать в другие блоки. Удалим блок из рабочего поля и составим небольшой скрипт. Пусть он запускается при нажатии на зелёный флажок. И повторяется, пока не будет остановлен пользователем. У становим внутри цикла «Всегда» блок «Сказать» из категории «Внешность». Затем перейдём в категорию «Сенсоры». На этот раз выберем первый блок «Касается». Перетащим его прямо в окошко блока «Сказать». В блоке «Касается» можно выбрать, какое касание он должен проверять: касание края или указателя мыши. Оставим вариант с указателем. Запустим скрипт на выполнение. Над спрайтом сразу появилась рамка со словом «false». Наведём на спрайт указатель мыши. Текст в рамке сменился на «true».
Итак, с помощью сенсоров спрайт может отвечать на некоторые вопросы, но толку от этого не много, так как мы сами легко можем ответить на эти вопросы, просто взглянув на сцену. Так для чего же на самом деле нужны сенсоры? Большинство сенсоров выполняют проверку некоторых условий. А это нужно для такой конструкции, как ветвление. Ветвление – это алгоритмическая конструкция, которая в зависимости от некоторого условия выполняет одну из двух последовательностей команд. Звучит немного сложно, но это проще, чем кажется. Посмотрим, как ветвление изображается на блок-схеме. Сначала идёт ромб с условием, от которого идут две ветви, каждая из которых содержит свои команды. Если условие, которое указано в ромбе выполняется, то будет выполнена последовательность команд из одной ветви. Если же условие не выполняется, то будет выполнена последовательность команд из другой ветви. Рассмотрим пример. Просыпаясь утром, мы вспоминаем, а не выходной ли сегодня день. И если день выходной, то мы идём гулять, в противном случае – идём в школу.
Ветвление, схему которого мы рассмотрели, называется полной формой ветвления. Кроме полной формы, бывает ещё сокращённая. В блок-схеме сокращённой формы ветвления, если условие выполняется, то выполняется некоторая последовательность команд, а в противном случае ничего не происходит. Например, если солнце через окно светит прямо в глаз, мы завесим штору, в противном случае ничего делать не будем.
Многие из вас уже наверняка поняли, что роль блока с условием в Scratch могут выполнять рассмотренные нами сенсоры. Осталось только узнать, как в скрипте Scratch описывается ветвление. Для этого на вкладке «Скрипты» перейдём в категорию «Управление». В ней есть целых два блока «Если...». Первый блок имеет ту же форму, что и блоки циклов. Он содержит место всего для одной последовательности команд. Легко догадаться, что он используется для сокращённой формы ветвления. Второй блок содержит промежутки для двух серий команд, разделённые словом «Иначе». Он используется для полной формы ветвления.
Решим задачу с использованием ветвления. Нужно составить скрипт для автомобиля. Автомобиль должен ехать по дороге прямо и, проехав мимо флага, должен сразу останавливаться.
Удалим со сцены спрайт Царапки, в этой задаче он не нужен. Подготовим сцену и спрайты. Начнём со сцены. Выделим её и перейдём на вкладку «Фон». Нарисуем дорогу. Для этого выберем инструмент «Линия» и серый цвет. Ширина линии регулируется этим ползунком. Перетащив его правее, увеличим ширину линии. Теперь одной линией поперёк сцены нарисуем дорогу.
Теперь подготовим спрайты. Загрузим спрайт автомобиля из библиотеки Scratch. Он находится в категории «Транспорт». Выберем вот такой зелёный кабриолет. С помощью кнопок отрегулируем его размер и установим на дороге, в левой части сцены. Также в библиотеке спрайтов можно найти флаг. Он находится в категории «Предметы». Установим нужный для него размер и разместим его на дороге, только в её правой части, так, чтобы при проезде машина коснулась флага. Цвет флага у нас совпадает с цветом автомобиля. Это не очень хорошо. Изменим это. Перейдём на вкладку «Костюмы». В ней выберем инструмент «Линия» и установим коричневый цвет. Установим нужную толщину линии и обведём древко флага. Теперь с помощью инструмента «Заполнить цветом» сделаем полотно флага красным.
Теперь, когда мы подготовили спрайты, составим скрипты для них. Начнём с флага. Его скрипт будет начинать работу при нажатии на зелёный флажок. Флаг должен оказаться на дороге. Для этого перейдём в категорию «Движение» и выберем в ней блок «Установить игрек в...». Откроем окно информации о спрайте и посмотрим на его координаты. Координату игрек перенесём в окошко блока. После того как флаг окажется на дороге, повернём его в направлении по умолчанию, то есть девяносто градусов.
Теперь приступим к скрипту автомобиля. Он также будет запускаться при нажатии на зелёный флажок. Условимся, что автомобиль будет ближе к зрителю, чем флаг. Чтобы так и было, начнём скрипт с блока «Перейти в верхний слой» из категории «Внешность». Установим автомобиль на дорогу и повернём его в нужном направлении так же, как мы сделали это для флага. Дальше добавим цикл «Всегда». Автомобиль должен остановиться сразу за флагом, но в начале сделаем так, чтобы он двигался до флага. На каждом шаге мы должны проверять, достиг ли автомобиль флага. Для этого из категории «Управление» добавим в рабочее поле блок «Если» для полной формы ветвления. В окошко блока нужно добавить условие. В качестве условия используем сенсор касания объекта. В его окошке с помощью выпадающего списка укажем имя спрайта флага «Green Flag». Теперь после слова «Иначе» добавим блок «Идти 3 шага». Он будет работать, пока машина не коснётся флага. Мы можем проверить это, запустив скрипт на выполнение.
Автомобиль двигается вперёд, но, как только касается флага, останавливается. Остановим скрипт. Ещё раз посмотрим на него и разберёмся, как он работает. В начале, пока автомобиль не касается флага, условие ветвления не выполняется. Это значит, что выполняется серия команд, которая располагается после слова «Иначе». Как только автомобиль касается флага, условие ветвления начинает выполняться, а значит, начинает выполняться и часть ветвления до слова «Иначе». Пока она пуста, поэтому автомобиль попросту останавливается.
По условию задачи автомобиль должен остановиться после флага, поэтому продолжим работу над его скриптом. Чтобы оказаться за флагом, автомобиль должен продолжить движение ещё какое-то время с прежней скоростью. Для этого установим в ветвление перед словом «Иначе», блок цикла «Повторить», в котором разместим блок «Идти 3 шага». Сколько раз должен повториться этот цикл, мы определим подбором. В начале установим двадцать повторений.
Посмотрим, что у нас получилось, для этого установим автомобиль левее флага и запустим скрипт на выполнение. Теперь, пройдя мимо флага, автомобиль поехал дальше, до самого края сцены. Подумаем, почему так произошло. Снова посмотрим на наш скрипт. Дело в том, что, как только автомобиль проехал флаг, он перестал его касаться, а значит, перестало выполняться условие ветвления, соответственно, снова начала выполняться часть ветвления после слова «Иначе». Чтобы это исправить, нужно добавить в ветвление перед словом «Иначе» команду для завершения скрипта, тогда автомобиль остановится. Для этого в категории «Управление» найдём блок «Стоп». Установим его в скрипт перед словом «Иначе». Рассмотрим выпадающий список в этом блоке. В нём можно выбрать, какие скрипты нужно остановить: все скрипты, только этот скрипт или другие скрипты этого спрайта. Нам подойдут первые два варианта, так как этот скрипт будет остановлен, а выполнение скрипта флага к этому времени будет закончено.
Снова установим автомобиль левее флага и запустим скрипт. Теперь автомобиль останавливается после флага, как было сказано в задаче. Задача решена. Сохраним проект в нашей рабочей папке под именем «Автомобиль и флаг».
Мы узнали:
· Cенсоры в Scratch проверяют условия.
· Ветвлением называется алгоритмическая конструкция, в которой в зависимости от некоторого условия выполняется одна из двух последовательностей команд.
· Ветвление в Scratch можно задать с помощью одного из двух блоков «Если».