Списки в Scratch

В Scratch в категории блоков кода "Переменные" есть кнопка "Создать список". В отличие от обычной переменной, список может хранить не одно значение, а много.

Например, мы создаем обычную переменную "число" и связываем ее с хранящимся в памяти компьютера числом 5. Но если мы создаем список "числа", то можем связать его с несколькими числами, расположенными в памяти друг за другом. Пусть это будут числа 3, 8, 1, 5.

У элементов принадлежащих одному списку есть порядковые номера. Так в нашем примере число 3 имеет номер 1, число 8 – номер 2, число 1 – номер 3, число 5 – номер 4. Таким образом, используя номера элементов, мы можем извлекать значения элементов. Например, команда "элемент 2 в числа" вернет нам 8.

В программировании часто используется понятие массива. Списки и массивы – близкие понятия. Однако обычно их различают следующим образом. В массиве могут содержаться только данные, принадлежащие одинаковому типу. Например, только слова или только числа. Элементами одного и того же массива не могут быть и числа и слова.

А вот в случае со списком такое может быть. Например, список [3, А, 4, 5.2, Кот] содержит целые числа, дробное число, букву и слово.

Зачем вообще нужны списки и массивы? В первую очередь для удобства обработки данных. Представьте, что вам надо изменить нескольких чисел. Если каждое число будет храниться в своей переменной, то придется помнить имена всех переменных и обращаться к каждой индивидуально.

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

Рассмотрим пример. Заполним список "Координата X" числами и отобразим список на сцене, установив флажок у переменной.

Также у нас здесь есть обычная переменная "счетчик".

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

Справа на изображении показан список после нажатия пробела.

Сколько оборотов делает цикл "повторить … раз"? Столько, какова длина списка. А чему равна длина списка? В списке 5 элементов, значит, длина равна пяти.

Что происходит с переменной "счетчик" на каждом обороте цикла? Она увеличивается на единицу. Если исходное значение счетчика 0, то на первом обороте цикла он получит значение 1, на втором 2, на третьем 3, на четвертом 4, на пятом 5.

Что происходит внутри зеленого блока, который суммирует два числа? Сначала из списка "Координата X" извлекается значение элемента, номер которого равен счетчику. Например, при первом обороте цикла счетчик равен 1, значит из списка будет извлечено число 100.

К этому числу добавляется 10. Получиться 110. После этого будет выполняться команда "заменить элемент … в … на …", которая заменит число 100 в позиции, на которую указывает счетчик, на число 110.

Рассмотрим следующий пример. Есть два спрайта-игрока, каждый из которых должен получить имя и начальные координаты. Их задает пользователь. В данном случае имеет смысл хранить данные о каждом игроке в отдельных списках – "Первый игрок" и "Второй игрок".

Договоримся, что первым элементом каждого списка будет имя игрока, вторым – координата X, а третьим – координата Y.

Заполняющие списки скрипты спрайтов.

Обратите внимание, что добавление элементов происходит в конец списка. Поэтому имя будет иметь порядковый номер 1, а координата Y – номер 3.

В процессе игры у спрайтов могут выполняться сценарии, извлекающие данные из списков.

Можно заподозрить, что мы сделали много бессмысленных вещей. Зачем добавлять данные в список, если можно сразу использовать "ответ" для команд "думать …" или перемещения? Однако если данные будут требоваться неоднократно, то надо сохранять их. Причем мы обошлись только двумя переменными типа список – "Первый игрок" и "Второй игрок, а не шестью, как если бы пользовались обычными переменными.

Чтобы приведенная выше программа правильно работала во второй и последующий разы, надо удалять элементы, помещенные в списки ранее.

Задание

  1. Заполните список десятью случайными числами.

  2. Отобразите числа на сцене, установив флажок у переменной списка.

  3. Спросите у человека номер элемента, значение которого он хотел бы заменить.

  4. Спросите у человека новое значение.

  5. Замените в списке старое значение новым в указанной позиции.

PDF-версия курса с ответами к заданиям


Программирование в Scratch. Курс




Все разделы сайта