Урок 4. Интерактивность, условия и переменные

Интерактивность

Под интерактивностью будем понимать возможность взаимодействия между объектами, принадлежащими разным средам. Например, если в написанной нами программе задано, что кот из Scratch догоняет мышь из Scratch, а она реагирует на него и убегает, то это не будем считать интерактивностью. И кот и мышь - объекты одной среды. А вот если кот из Scratch реагирует на действия реального человека (например, нажатие пользователем определенной клавиши), то это уже интерактивность, т.к. объекты принадлежат разным "средам обитания".

Пусть требуется сделать так, чтобы человек мог управлять поведением кота на холсте Scratch. Если написать такой сценарий

mousebutton.png

, то после его запуска, объект будет преследовать указатель, если зажать левую кнопку мыши.

Команда мышка нажата? находится в разделе сенсоры, где сгруппированы команды, назначение которых — проверять наличие заданных изменений в окружающей среде объекта. Например, команда мышка по x отслеживает, где находится курсор мыши по оси x.

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

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

Переменные и условный оператор

Усложним программу следующим образом. Пусть объекты перемещаются не вместе, а врозь: сначала один бегает за курсором, потом — другой. Переключение "активности" между объектами пусть происходит с помощью клавиши пробел. Как организовать такую программу?

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

Создадим ячейку-переменную под именем идущий. Для этого нужно нажать на кнопку переменные и, затем, в ячейке команд Scratch нажать Создать переменную; в открывшемся диалоговом окне ввести ее имя и нажать ОК. После чего у нас появится сама переменная и несколько команд для ее изменения.

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

Изменение значения переменной в Scratch

Вместо пробела можно выбрать другую клавишу в раскрывающемся списке первой команды сценария. Далее идет сложная инструкция если — или. Она работает так: если условие в части если истинно, то выполняются вложенные команды после если, иначе — будут выполняться вложенные команды после или. Обе "ветки" никогда вместе не выполняются, они взаимно исключают друг друга.

Теперь рассмотрим условие при инструкции если. Зеленые команды относятся к операторам. Операторы — это такие команды, которые что-то делают с данными. Например, выполняют математические операции или сравнивают числа между собой. В данном случае выбран оператор сравнения на равенство. Он проверяет равно ли выражение слева от знака "=" выражению справа. Если — да, то будет работать код после если, если — нет, то код после или. В нашем случае сравниваются значение переменной идущий и 0.

Мы ничего не "клали" в переменную, однако по-умолчанию ей и так присваивается значение 0, поэтому нам это было делать не обязательно. К тому же, если вдруг изначально в переменной будет не ноль, то ничего страшного: сработает ветка или.

Что же все-таки делает этот скрипт? Если значение переменной равно 0, то оно меняется на 1. Если же нет, то меняется на 0. Получается, что нажатие клавиши пробел попеременно меняет значение переменной идущий. Однако при выполнении программы мы не увидим никаких изменений. Действительно, ведь объекты еще "не знают", к какому значению переменной привязаны их действия. Составьте вышеприведенный скрипт и переключитесь на первый объект.

Требуется организовать проверку значения переменной. Для этой цели прекрасно подойдет простая инструкция если. Вот такие сценарии получаются для первого и второго объектов.

Измененные скрипты объектов

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

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

Интерактивное изменение свойств объектов

Можете попробовать свои варианты.

Самостоятельная работа

Составьте программу в среде Scratch, при выполнении которой пользователь может управлять объектом с помощью стрелок на клавиатуре, а при нажатии каких-нибудь других клавиш, объект "думает" разные "мысли".

Создано