Переменные в Scratch
Переменные настолько важны в программировании, что оно без них немыслимо. Ведь несмотря на то, что программа – это в первую очередь алгоритмы и логика, они не могут обрабатывать пустоту. Алгоритмы работают с данными, которые хранятся в памяти компьютера и к ним надо как-то обращаться, связываться с ними.
Как раз эту задачу решают переменные. Переменная состоит из имени и значения. Значение – это и есть данные. Через имя переменной мы обращаемся к ячейкам памяти, чтобы получить оттуда данные или изменить их.
Данными может быть любая информация, любой объект. Например, число, слово, спрайт, список. В этом уроке мы будем связывать имена переменных только с числами.
В Scratch ярко-оранжевый раздел "Переменные" содержит несколько блоков:
В программе может быть множество переменных. Поэтому есть кнопка "Создать переменную", при нажатии на которую открывается диалоговое окно, куда надо ввести имя переменной и выбрать, будет ли она доступна всем спрайтам или только текущему. Во втором случае созданная переменная не будет видна остальным спрайтам. Ей сможет пользоваться только один спрайт.
После создания переменную можно выбирать в выпадающих списках блоков раздела "Переменные".
Имя переменной может быть любым. Однако желательно, чтобы оно было описательное. Например, если переменная предназначена для хранения количества мячей, ее лучше так и назвать: "количество мячей" или просто "мячи".
На изображении выше мы видим, что сначала в Scratch есть только одна переменная под именем "моя переменная". Если около нее установить флажок, то ее имя и значение отобразятся на сцене.
Если в процессе выполнения программы требуется то показывать на сцене переменную, то скрывать ее, следует использовать блоки "показать переменную …" и "скрыть переменную …".
Команда "задать <переменной> значение …" записывает в указанную переменную те или иные данные. Например, число 10.
Команда "изменить <переменную> на …" в случае чисел изменяет значение переменной на указанную величину. То есть, если переменная содержала число 10, а мы дали команду изменить ее на 2, переменная будет хранить значение 12, а не 2.
Если же переменная содержала 10, а мы хотим присвоить ей значение 2, надо воспользоваться командой "задать <переменной> значение …".
Рассмотрим как работать с переменными на примере. Пусть в нашем проекте по сцене ходят два спрайта – кот и краб. Ходить они будут в разных направлениях, но с одинаковой скоростью.
Мы пока не знаем точно, какую общую для спрайтов скорость хотим задать. Нам надо протестировать программу при разных скоростях. Если мы будем просто вписывать число в команду "идти … шагов", придется потом изменять ее два раза, у каждого спрайта. Это не совсем удобно, особенно если бы спрайтов было много. Для кого-то можно забыть изменить величину.
Использование переменной решает эту проблему. Достаточно задать ей значение в одном месте, а потом вставить имя переменной во все места, где она используется.
Создадим переменную под именем "скорость", доступную для всех спрайтов. Для этого надо нажать кнопку "Создать переменную" или переименовать существующую переменную, кликнув по ней правой кнопкой мыши и выбрав "Переименовать переменную".
Задать переменной значение можно у любого спрайта, второму значение будет доступно автоматически. Скрипты кота:
Скрипт краба:
Теперь если мы захотим поменять количество шагов за один оборот цикла, достаточно сделать это в одном месте. Там, где задается значение переменной.
Когда выполняются команды "идти <скорость> шагов", то на место переменной "скорость" на самом деле подставляется ее значение. Например, число 10. В результате получается команда "идти 10 шагов", хотя мы этого не видим.
Более того, с помощью арифметических операций можно видоизменить нашу программу. Пусть краб ходит в два раза медленнее кота. То есть, если у кота скорость 10, у краба она должна быть 5. Если же у кота скорость 8, у краба она должна стать 4.
Для этого воспользуемся блоком с делением из зеленого раздела "Операции". Слева от знака деления поставим переменную "скорость", а справа – число 2.
Получается, что хотя скорость одного спрайта отличается от другого, скорости обоих взаимосвязаны через общую переменную.
Усложним нашу программу. Пусть значение переменной "скорость" задает пользователь. Если он нажмет на клавиатуре число 1, то скорость будет иметь значение 5, а если нажмет на клавиатуре число 2, скорость будет иметь значение 10. Если же человек нажмет 0, скорость должна установиться также в 0, то есть спрайты попросту остановятся.
Тут нам потребуются условные операторы, а также цикл "повторять всегда", чтобы программа всегда ожидала ввода с клавиатуры.
Этот скрипт можно добавить любому спрайту.
Таким образом значение переменной может меняться в процессе выполнения программы в зависимости от тех или иных условий.
Обратите внимание на форму блока, который содержит только имя переменной. Это прямоугольник со скругленными углами. Блоки подобной формы мы уже встречали в других разделах вкладки "Код". Так в секции "Движение" это были блоки "положение x", "положение y", "направление":
Это тоже переменные, только встроенные в Scratch, уже готовые и привязанные к определенным значениям. В них записываются значения, которые извлекаются из каких-нибудь объектов. Так в переменную "положение x" записывается значение текущей координаты x спрайта. Мы можем извлекать это значение и использовать его в программе.
Задание 1
Составьте программу, в которой спрайт оказывается в том месте сцены, над которым была нажата клавиша мышки. При этом на сцене должны отображаться координаты клика (вместо клика также может быть зажатие клавиши мыши).
Задание 2 (сложное)
Во втором задании прошлого урока божья коровка меняла свой костюм, когда кот ее касался. Сделайте так, чтобы она еще при этом издавала звук. Он должен воспроизводиться один раз в момент касания, а не повторяться все время, пока кот соприкасается с жуком. Подсказка: вам понадобится переменная.
PDF-версия курса с ответами к заданиям