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

Если у Вас в руках оказался микрокомпьютер Raspberry Pi, а тем более если рядом есть дети или школьники, то с помощью этого руководства Вы буквально в одном шаге от того, чтобы стать программистом и понять одно из напрвлений IT-индустрии, которые так популярны сейчас в мире и для многих становятся любимой и высокооплачиваемой професией. Давайте начнём!

Scratch представляет собой визуальный язык программирования, созданный в Массачусетском Технологическом Институте (Massachusetts Institute of Technology (MIT). В то время, как обычные языки программирования требуют от пользователей писать текстовый код-инструкции, язык Scratch предлагает воспользоваться стандартным набором инструкций, обернутых в красивые графические оболочки и имеющих внешний вид разноцветных блоков-паззлов, которые переплетаясь и соединяясь позволяют реализовать требуемый план действий. Таким образом, нет необходимости изучать сложный синтаксис языка, а можно сразу приступить к составлению программ, просто перетаскивая нужные блоки на рабочую область экрана, что под силу даже ребёнку. Но пусть внешняя простота работы со Scratch Вас не вводит в заблуждение! С помощью этого простого инструмента можно составлять программы начиная от уровня простейших игр и вплоть до сложнейших интерактивных проектов для робототехники.

 

Интерфейс Scratch 3

Прежде чем мы начнем обзор интерфейса программы, необходимо уточнить, что мы будем рассматривать 3-ю версию Scratch. На момент написания этого обзора выпущены 1-я, 2-я и 3-я версии Scratch. В Raspbian все они включены в раздел "Программирование" Главного меню. Эта часть обзора Raspberry Pi написана для Scratch 3, который работает только на Raspberry Pi 4. Scratch 1 работает на всех моделях; Scratch 2 —  начиная с модели Raspberry 2. 

АStage Area (Сцена)  — как актеры в пьесе, ваши спрайты перемещаются по сцене под управлением вашей программы.

BSprite (Спрайт) — персонажи или объекты, которыми вы управляете в программе Scratch, называются спрайтами и находятся на сцене.

CStage Controls (Элементы управления сценой)  — вашу сцену можно изменить, включая добавление собственных изображений в качестве фона, с помощью элементов управления сценой.

DSprites List (Список спрайтов)  — все спрайты, которые вы создали или загрузили в Scratch, появятся в этом разделе окна.

EBlocks Palette (Палитра блоков)  — все блоки, доступные для вашей программы, отображаются в палитре блоков, имеющей категории с цветовой кодировкой.

FBlocks (Блоки)  — это заранее написанные фрагменты программного кода в виде блоков, которые позволяют строить вашу программу шаг за шагом.

GCode Area (Область кода)  — область кода — это место, где ваша программа создается путем перетаскивания блоков из палитры блоков для формирования сценариев.

 

 

Ваша первая программа Scratch: Hello, World!

Scratch 3 загружается, так же, как и любая другая программа на Raspberry Pi: щелкните значок "Малинка" (Пуск), чтобы загрузить меню Raspbian, переместите курсор в раздел программирования и нажмите Scratch 3. Буквально через несколько секунд загрузится пользовательский интерфейс Scratch 3. Scratch отличается от большинства языков программирования тем, что в отличие от письменных инструкций, он предлагает нечто своё. Давайте изучим эту магию!

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

Посмотрите на форму блока, который вы только что переместили: в нем есть впадина вверху и соответствующая часть выступает снизу — как кусок мозаики. Это показывает, что блок ожидает, что что-то будет выше и что-то ниже. Для этой программы указанное выше является триггером (trigger).
Щелкните категорию "События" на палитре блоков, окрашенную в золотой цвет, затем щелкните и перетащите блок , известный как блок hat, в область кода. Расположите его так, чтобы выступающая из нижней части форма соединялась с впадиной в верхней части блока , пока не увидите белый контур, затем отпустите кнопку мыши. Необязательно быть точным; если блок будет достаточно близко, он встанет на место, как кусок мозаики. Если этого не произошло, нажмите и удерживайте снова, чтобы отрегулировать положение, пока оно не изменится.

Должно получиться так:

Вот и всё! Ваша первая программа создана! 

Чтобы заставить её работать — запустить (run) — щёлкните значок зелёного флажка в верхнем левом углу рабочей области. Если все прошло хорошо, спрайт кота на сцене встретит вас радостным "Привет!" — ваша первая программа выполнена! 

Некоторые блоки в Scratch могут менять своё содержимое. Например, попробуйте кликнуть на слове "Hello!" и вписать что-то своё, а затем нажать на иконку зелёного флага для запуска программы. 

Прежде чем двигаться дальше, задайте имя и сохраните свою программу. Щелкните меню "Файл" (File), затем "Сохранить на свой компьютер" (Save to your computer). Введите имя и нажмите кнопку "Сохранить" (Save).

 

 

Последовательности

Хотя ваша программа состоит из двух блоков, в ней есть только одна настоящая инструкция: говорить "Привет!" Каждый раз, когда щелкают флаг и программа запускается. Чтобы сделать больше, вам нужно знать о последовательностях (sequencing). Компьютерные программы в простейшем виде представляют собой список инструкций, подобный рецепту. Каждая инструкция следует из предыдущей в логической последовательности, известной как линейная последовательность (linear sequence).
Начните с нажатия и перетаскивания из области кода обратно в палитру блоков. Это удаляет блок, удаляя его из вашей программы и оставляя только блок триггера.

Щелкните категорию "Движение" (Motion) на палитре блоков, затем нажмите и перетащите блок , чтобы он зафиксировался под блоком триггера в области кода. Как следует из названия, это говорит вашему спрайту-кошке  сделать несколько шагов в том направлении, в котором он сейчас смотрит.

Добавьте в свою программу дополнительные инструкции, чтобы создать последовательность. Нажмите на палитру "Звук" (Sound), выделенную розовым цветом, затем нажмите и перетащите блок  чтобы он заблокировался под блоком . Продолжайте: нажмите снова на категорию "Движение" и перетащите другой блок под вашим звуковым блоком, но на этот раз кликните указателем мыши на '10', чтобы выбрать его, и введите '-10', при этом создастся блок . Последовательность блоков будет выглядеть следующим образом:

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


Поздравляем: вы создали последовательность инструкций, которые Scratch выполняет по очереди, сверху вниз. Хотя Scratch будет запускать только одну инструкцию из последовательности, он делает это очень быстро: попробуйте удалить блок , щелкнув и перетащив нижний блок , чтобы отсоединить его, перетащив на палитру блоков, затем заменив его более простым блоком  перед перетаскиванием блока обратно в нижнюю часть вашей программы. Изменённая программа будет выглядеть так:

Щелкните зеленый флаг, чтобы снова запустить программу, и окажется, что спрайт кошки не двигается. Фактически, спрайт движется, но он снова движется назад так быстро, что кажется, что он стоит на месте. Это связано с тем, что при использовании блока  процесс не дожидается окончания воспроизведения звука перед следующим шагом; поскольку Raspberry Pi «думает» так быстро, следующая инструкция выполняется еще до того, как вы сможете увидеть движение кошачьего спрайта. Есть другой способ исправить это, помимо использования блока : щелкните светло-оранжевую категорию управления Control на палитре блоков, затем щелкните и перетащите блок между блоком   и блоком . Теперь программа будет выглядеть так:

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

 

ЗАДАЧА: ДОБАВЬТЕ ЕЩЕ ШАГИ
Попробуйте добавить больше шагов в вашу последовательность и изменить значения в существующих шагах. Так Вы сможете ответить на такие вопросы:

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

 

Зацикливание

Последовательность, которую вы создали до этого, выполняется только один раз: вы нажимаете зеленый флаг, спрайт кошки двигается и мяукает, а затем программа останавливается, пока вы снова не щелкнете зеленый флаг. Но если поставлена задача его не останавливать, то Scratch предусмотрел для этого тип блока управления, известный как цикл (loop).
Щелкните категорию Control на палитре блоков и найдите блок . Щелкните и перетащите его в область кода, затем поместите под блоком и над первым блоком. Схема программы будет теперь выглядеть так:

Обратите внимание, как С-образный блок автоматически увеличивается, чтобы окружить другие блоки в вашей последовательности. Теперь щелкните зеленый флаг, и вы быстро увидите, что делает блок : вместо того, чтобы ваша программа запускалась один раз и заканчивалась, она будет выполняться снова и снова — буквально навсегда. В программировании это известно как бесконечный цикл (infinite loop) — буквально, цикл, который никогда не заканчивается.
Если звук постоянного мяуканья становится слишком сильным, щелкните красный восьмиугольник рядом с зеленым флажком над сценой, чтобы остановить вашу программу. Чтобы изменить тип цикла, щелкните и перетащите первый блок  и вытащите его и блоки под ним из блока , затем поместите их под блоком . Щелкните и перетащите блок  на палитру блоков, чтобы удалить его, затем щелкните и перетащите блок  и разместите его под блоком , чтобы он обошел другие блоки. Получится так:

Щелкните зеленый флаг, чтобы запустить новую программу. Сначала кажется, что она делает то же самое, что и ваша исходная версия: повторяет последовательность инструкций снова и снова. На этот раз, однако, вместо того, чтобы продолжаться бесконечно, цикл закончится после десяти повторений. Это называется заданный цикл (definite loop): вы определяете, когда он закончится.

Циклы - это мощные инструменты, и большинство программ — особенно игры и сенсорные программы — интенсивно используют как бесконечные, так и заданные циклы.

 

Задание: поменяйте число в окошке блока с количеством повторений в большую или меньшую сторону. Посмотрите к чему это привело при новом запуске программы. Попробуйте подставить '0' в количестве повторений. Что получилось?

 

 

Переменные и условные выражения

Последние концепции, которые необходимо понять, прежде чем начинать всерьез программировать Scratch-программы, тесно связаны: переменные и условные выражения. Переменная, как следует из названия, представляет собой значение, которое может изменяться — другими словами, изменяться со временем и под контролем программы. У переменной есть два основных свойства: имя и значение, которое она хранит. Это значение не обязательно должно быть числом: оно может быть числами, текстом, истинным или ложным или полностью пустым, что называется нулевым значением.
Переменные - мощные инструменты. Подумайте о вещах, которые вам нужно отслеживать в игре: здоровье персонажа, скорость движущегося объекта, текущий уровень и счет. Все они отслеживаются как переменные.

Сначала щелкните меню "Файл" и сохраните существующую программу, щелкнув "Сохранить на свой компьютер". Если вы уже сохранили программу ранее, вас спросят, хотите ли вы перезаписать ее, заменив старую сохраненную копию новой актуальной версией. Затем нажмите "Файл", а затем "Создать", чтобы начать новый пустой проект (нажмите "ОК", когда вас спросят, хотите ли вы заменить содержимое текущего проекта). Щелкните темно-оранжевую категорию переменных на палитре блоков, затем нажмите кнопку "Создать переменную". Введите 'loops' в качестве имени переменной, затем нажмите OK, чтобы на палитре блоков появилась серия блоков.

Щелкните и перетащите заданные блок в область кода. Это говорит вашей программе инициализировать (initialise) переменную значением '0'. Затем щелкните категорию Looks палитры блоков и перетащите блок  под блок . Получится так:

Как вы выяснили ранее, блоки типа  заставляют спрайт кошки говорить все, что в них написано. Однако вместо того, чтобы писать сообщение в блоке самостоятельно, вы можете использовать переменную. Вернитесь к категории "Переменные" на палитре блоков, затем щелкните и перетащите закругленный блок , называемый блок-репортер (reporter block), который находится вверху списка с флажком рядом с ним, на слово 'Hello!' в вашем блоке . Это создает новый комбинированный блок: .

Щелкните категорию «События» на палитре блоков, затем щелкните и перетащите блок , чтобы поместить его поверх вашей последовательности блоков. Щелкните зеленый флаг над рабочей областью, и вы увидите, что спрайт кошки скажет '0' — то есть то значение, которое вы присвоили переменной 'loops'.

Однако переменные не неизменны. Щелкните категорию "Переменные" на палитре блоков, затем щелкните и перетащите блок  в конец своей последовательности. Затем щелкните категорию Control, затем щелкните и перетащите блок и отпустите его, чтобы он начинался прямо под блоком  и обертывался вокруг остальных блоков в вашей последовательности.

Еще раз щелкните зеленый флаг. На этот раз вы увидите, как кошка считает вверх от 0 до 9. Это работает, потому что ваша программа теперь изменяет или модифицирует саму переменную: каждый раз, когда цикл запускается, программа добавляет единицу к значению переменной 'loops'.

Обратите внимание! Хотя созданный вами цикл запускается десять раз, спрайт кошки считается только до девяти. Это потому, что мы начинаем с нулевого значения нашей переменной. Включая ноль и девять, есть десять чисел от нуля до девяти, поэтому программа останавливается до того, как кошка скажет «10». Чтобы изменить это, вы можете установить начальное значение переменной на '1' вместо '0'.

 

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

Этот блок Operators позволяет сравнивать два значения, включая переменные. Щелкните категорию "Переменные", перетащите блок репортера  в пустое место в блоке Operators , затем щелкните место с числом '50' и введите число '10'.

Щелкните зеленый флаг над рабочей областью, и вы увидите, что программа работает так же, как и раньше: спрайт кота считает от 0 до 9, а затем программа останавливается. Это связано с тем, что блок  работает точно так же, как блок , но вместо того, чтобы считать количество циклов, он сравнивает значение переменной 'loops' со значением, которое вы ввели в соответствующем окне блока. Когда значение переменной 'loops' достигает 10, программа останавливается.

Это называется оператор сравнения (comparative operator): он буквально сравнивает два значения. Щелкните категорию "Операторы" на палитре блоков и найдите два других ромбовидных блока над и под блоком со знаком "=". Это также операторы сравнения: "<" сравнивает два значения и запускается, когда значение слева меньше, чем значение справа, а ">" запускается, когда значение слева больше, чем значение справа.

Щелкните категорию Control на палитре блоков, найдите блок , затем щелкните и перетащите его в область кода перед . Он автоматически окружит блок , поэтому щелкните и перетащите его, чтобы переместить его, чтобы он вместо этого соединялся с нижней частью вашего блока . Щелкните категорию Looks на палитре блоков, затем щелкните и перетащите , чтобы поместить его внутрь вашего блока . Щелкните категорию "Операторы" на палитре блоков, затем щелкните и перетащите блок  в отверстие в форме ромба в блоке .

Блок является условным блоком, что означает, что блоки внутри него будут выполняться только при выполнении определенного условия. Щелкните категорию "Переменные" на палитре блоков, перетащите блок-репортер  в пустое место в вашем блоке , затем щелкните и вместо '50' и введите число '5'. Наконец, нажмите на слово 'Hello!' в блоке  и введите 'That’s high!'.

Нажмите на зеленый флаг. Сначала программа будет работать, как и раньше, при этом кошачий спрайт будет считать вверх с нуля. Когда число достигает 6, первое число больше 5, блок начнет срабатывать, и спрайт кота прокомментирует, насколько высоко становятся числа.

Поздравляем: теперь вы можете работать с переменными и условными операторами!

 

Задание на дальнейшее изучение: Попробуйте модифицировать программу, чтобы спрайт кошки указывал, насколько низкими являются числа ниже 5. Можете ли вы изменить её так, чтобы кот комментировал как высокие, так и низкие числа? Поэкспериментируйте с блоком , чтобы упростить задачу!

 

 

 

Теперь вы понимаете, как работает Scratch и наступило время сделать что-то более серьёзное и интерактивное: давайте рассмотрим пошаговую реализацию нескольких более сложных проектов для закрепления пройденного материала, а также изучения нового.

 

 

Проект 1: Таймер реакции астронавта

Этот проект создан в честь британского астронавта ЕКА (Европейского Космического Агентства) Тима Пика и его работы на борту Международной космической станции (МКС).

Внимание! Файлы данного проекта, реализованного в Scratch-2, можно скачать по ссылке:  rpf.io/astronaut-game

 

Давайте начнём с того, что создадим новый проект, нажав "Файл"(File)  и "Создать"(New). Зададим ему имя и сохраним на компьютер, нажав «Сохранить на свой компьютер» (Save to your computer): назовите его 'Astronaut Reaction Timer' (Таймер реакции астронавта).

В этом проекте используются два изображения — одно в качестве фона сцены, другое в качестве спрайта. Они не включены во встроенные ресурсы Scratch. Чтобы загрузить их, щелкните значок "Малинка"(Пуск), чтобы загрузить меню Raspbian, переместите указатель мыши в "Интернет" и щелкните веб-браузер Chromium. Когда браузер загрузится, введите в адресной строке rpf.io/astronaut-backdrop и нажмите клавишу ENTER. Щелкните правой кнопкой мыши изображение космоса и выберите «Сохранить изображение как…», затем нажмите кнопку «Сохранить». Щелкните снова в адресной строке и введите rpf.io/astronaut-sprite, а затем нажмите клавишу ВВОД. Повторите такие же действия по сохранению картинки.

Веб-браузер Chromium уже больше не нужен и его можно закрыть.

Вернитесь на открытое окно с проектом Scratch.

Щелкните правой кнопкой мыши спрайт кошки в списке и выберите "Delete"(удалить). Наведите указатель мыши на значок "Выбрать фон", затем щелкните значок "Загрузить фон"  в появившемся списке. Найдите файл Space-background.png в папке "Загрузки", щелкните его, чтобы выбрать, затем нажмите "ОК". Простой белый фон рабочей области изменится на изображение пространства, а область кода будет заменена областью фонов.

Здесь вы можете рисовать поверх фона, а пока просто нажмите на вкладку с пометкой «Код» в верхней части окна Scratch 3. Загрузите новый спрайт, наведя указатель мыши на значок "Выбрать спрайт" , а затем щелкнув значок "Загрузить спрайт"  в верхней части появившегося списка. Найдите файл Astronaut-Tim.png в папке "Загрузки", выберите его, затем нажмите "ОК". Спрайт появляется на сцене автоматически, но может оказаться не посередине: щелкните, перетащите его мышью и отпустите так, чтобы он оказался ближе к нижней части середины.

Создав новый фон и спрайт, мы готовы создавать свою программу. Начните с создания новой переменной под названием ‘time' (время), убедившись, что выбрано "Для всех спрайтов", прежде чем нажимать ОК. Щелкните свой спрайт либо в рабочей области, либо на панели спрайтов — чтобы выбрать его, затем добавьте блок из категории "События" в область кода. Затем добавьте в категории Looks, затем щелкните по нему, чтобы изменить его на фразу 'Hello! British ESA Astronaut Tim Peake here. Are you ready?' (Привет! Британский астронавт ЕКА Тим Пик здесь. Вы готовы?).

Текущее состояние программы:

Добавьте блок  (ожидать 1 секунду) из категории Control, затем блок . Измените этот блок: задайте в нём текст 'Hit Space!' (Нажми пробел!).  Затем добавьте блок (сброса таймера)  из категории Sensing. Он контролирует специальную переменную, встроенную в Scratch для определения времени, и будет использоваться для определения того, насколько быстро вы можете реагировать в игре. Текущее состояние программы:

Добавить ожидание с помощью блока управления , а затем перетащите из Sensing блок  на рабочую область. Задача этого блока — приостановить выполнение программы до тех пор, пока вы не нажмете клавишу SPACE на клавиатуре, но таймер продолжит работать, точно подсчитывая, сколько времени проходит между сообщением 'Hit Space!' И фактическим нажатием клавиши SPACE. Текущее состояние программы:

Теперь вам нужно, чтобы Тим сказал вам, сколько времени вам потребовалось, чтобы нажать клавишу ПРОБЕЛ, но так, чтобы это было легко читать. Для этого вам понадобится блок присоединения  из Operators. Он принимает два значения, включая переменные, и объединяет их одно за другим - это называется конкатенацией (concatenation).

Начните с блока приветствия , затем перетащите блок соединения  на слово 'Hello!'. Нажмите на "яблоко" и введите 'Your reaction time was ' (Ваше время реакции составляет), не забудьте добавить пробел в конце, затем перетащите другой блок соединения поверх "банана" во втором поле. Перетащите блок отчетов  таймер из категории Sensing в то, что сейчас является средним полем, и введите 'seconds ' (секунды) в последнее поле, не забывая добавить пробел перед первым символом в начале.

Мы уже почти закончили составлять код: теперь перетащите блок  из Variables в конец вашей последовательности. Щелкните стрелку раскрывающегося списка рядом с 'my variable '(моей переменной) и выберите 'time' (время) в списке, затем замените '0' блоком отчета  из категории Sensing (Обнаружение).

Ну что же, наша игра готова к тестированию. Нажимайте на зеленый флаг над сценой! Будьте готовы, и как только увидите сообщение 'Hit Space!', как можно быстрее нажать клавишу пробела (SPACE) — посмотрим, сможете ли вы побить наш рекорд!

 

Вы можете добавить функционал в этот проект, рассчитав приблизительно, как далеко пролетела по орбите Международная космическая станция за время, которое потребовалось вам, чтобы нажать клавишу ПРОБЕЛ, на основе опубликованной скорости станции в семь километров в секунду. Сначала создайте новую переменную под названием ‘distance’ (расстояние). Обратите внимание, как блоки в категории Variables (Переменные) автоматически изменяются, чтобы показать новую переменную, но существующие блоки переменных времени  в вашей программе остаются такими же, как и раньше.
Добавьте блок  (задать расстояние 0), затем перетащите блок Operators (операторов) , обозначающий умножение, на '0'. Перетащите блок отчетов о времени на первое пустое место, затем введите цифру '7' во второе поле. Когда вы закончите, ваш комбинированный блок будет выглядеть так:  (установите расстояние как время * 7). Теперь то время , пока вы не нажмете клавишу ПРОБЕЛ будет зафиксировано и умножено на семь для получения расстояния в километрах, которое пролетела МКС.

Добавьте блок  (ожидания 1 секунду) и измените его значение на '4'. Наконец, перетащите еще один блок  в конец вашей последовательности и добавьте два блока соединения , как вы это делали раньше. В первом пространстве над "яблоком" напечатайте ‘In that time the ISS travels around ’ (За это время МКС пролетела), не забудьте указать пробел в конце; в поле «банан» введите ‘ kilometres.’ (километров.), не забывая о пробеле перед словом в начале.

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

Щелкните зеленый флаг, чтобы запустить программу, и посмотрите, как далеко пролетит МКС за время, необходимое вам для нажатия клавиши ПРОБЕЛ. Не забудьте сохранить свою программу, когда вы закончите, чтобы вы могли легко загрузить ее снова в будущем, без необходимости начинать с самого начала!

 

Обучающее задание: Вы можете изменить картинку фона и сам спрайт на другую тематику, а последовательность действий на расчет других величин и таким образом трансформировать данную последовательность для определения данных, связанных с другой профессией. Кого будем испытывать? Может быть Стив Ирвин нам поможет поймать крокодила?

 

 

 

Проект 2: Синхронное плавание

В большинстве игр пользуются панелью клавиш управления ( ← ↑ ↓ → ) и в этом проекте мы начнем исследовать этот механизм, реализовав управление с помощью клавиш ← и → на клавиатуре.

Внимание! Файлы данного проекта, реализованного в Scratch-3 и Scratch-2, можно скачать по ссылке:  rpf.io/synchro-swimming

 

Создайте новый проект и сохраните его как ‘Synchronised Swimming’ (Синхронное плавание). Щелкните сцену в разделе управления сценой, затем щелкните вкладку Backdrops (Фоны) в верхнем левом углу. Нажмите кнопку 'Convert to Bitmap' (Преобразовать в растровое изображение) под фоном. Выберите похожий на воду синий цвет на палитре Fill (Заливка), щелкните значок Fill  (Заливка), а затем щелкните клетчатый фон, чтобы залить его синим.

Щелкните правой кнопкой мыши спрайт кошки в списке и выберите ‘Delete’ (удалить). Щелкните значок ‘Choose a Sprite’ (Выбрать спрайт) , чтобы просмотреть список встроенных спрайтов. Щелкните категорию Animals (Животные), затем ‘Cat Flying’ (Летящий кот), затем "ОК".


Этот спрайт также хорошо подходит для проектов по плаванию.
Щелкните новый спрайт, затем перетащите два блока Events (событий)  (при нажатии клавиши пробела) в область кода. Щелкните маленькую стрелку вниз рядом со словом ’space’ (пробел) в первом блоке и выберите ‘left arrow’ (стрелку влево)  из списка возможных вариантов. Перетащите блок движения  (повернуть на 15 градусов против часовой стрелки) под
 (при нажатии на блок со стрелкой влево) сделайте то же самое со вторым блоком событий, с поправкой на выбор ‘right arrow’ (стрелки вправо) из списка и использования
блокa движения (повернуть на 15 градусов по часовой стрелке).

Нажмите кнопку ← или →, чтобы протестировать вашу программу. Вы увидите, как спрайт кота поворачивается вместе с вами в соответствии с направлением, которое вы выбираете на клавиатуре. Обратите внимание, что на этот раз вам не нужно было нажимать на зеленый флажок; это связано с тем, что используемые вами триггерные блоки событий активны всегда, даже если программа не «работает» (‘running’) в обычном смысле.
Повторите те же действия дважды, но на этот раз выбрав ‘up arrow’ (стрелку вверх) и ‘down arrow’ (стрелку вниз) для блоков триггеров событий, затем блоки движения  (переместите на 10 шагов) и  (переместите на -10 шагов). Теперь нажмите клавиши со стрелками, и вы увидите, что ваша кошка может развернуться, а также плыть как вперед, так и назад!

 

Чтобы сделать движение кошачьего спрайта более реалистичным, вы можете изменить его внешний вид — в терминологии Scratch это называется 'costume' (костюм). Щелкните спрайт кошки, затем щелкните вкладку Costumes (Костюмы) над палитрой блоков. Нажмите на костюм ‘cat flying-a’ (летающий кот-а) и нажмите на значок  X-in-a-bin, который появляется в правом верхнем углу, чтобы удалить его. Затем нажмите на костюм ‘cat flying-b’ (кот летит-b) и используйте поле имени вверху, чтобы переименовать его в ‘right’ ("направо").

Щелкните правой кнопкой мыши только что переименованный ‘right’ ("направо") костюм и нажмите ‘duplicate’ (дублировать), чтобы создать копию. Щелкните эту копию, чтобы выбрать ее, щелкните значок Select (Выбрать) , щелкните Flip Horizontal  (Отразить по горизонтали), затем переименуйте ее в ‘left’ ("налево"). Вы закончите с двумя "костюмами" для своего спрайта, которые являются точными зеркальными отображениями: один называется "направо", когда кошка смотрит вправо, а другой называется "налево", когда кошка смотрит влево.

Щелкните вкладку Code "Код" над областью костюма, затем перетащите блоки из Looks  на поле событий под вашей стрелкой "налево" и со стрелкой вправо, изменив блок под блоком со стрелкой вправо, на , чтобы изменить направление на "направо". Попробуйте использовать клавиши со стрелками еще раз; кошка теперь должна поворачивается лицом в ту сторону, куда она плывет. Код выглядит так:

Однако для синхронного плавания в олимпийском стиле нам нужно больше пловцов, и нам нужен способ сбросить положение спрайта кошки. Добавьте блок событий , затем под ним добавьте блок Motion (Движения)   (переход к координатам x: 0 y: 0) — при необходимости измените значения — и блок движения  (отсметить в направлении 90) . Теперь, когда вы щелкнете по зеленому флажку, кошка переместится в середину сцены и будет указывать вправо.

Чтобы создать больше пловцов, добавьте блок — изменив значение по умолчанию ‘10’ - и добавьте внутри него блок управления . Чтобы все пловцы не плыли в одном направлении, добавьте блок  поворота на 60 градусов над блоком создания клона , но все еще внутри блока повторения . Щелкните зеленый флаг и попробуйте использовать клавиши со стрелками, чтобы увидеть, как ваши пловцы оживут!

Чтобы полностью соотвествовать олимпийскому духу, нужно добавить немного музыки! Щелкните вкладку Sounds (Звуки) над палитрой блоков, затем щелкните значок ‘Choose a Sound’ (Выбрать звук) . Щелкните категорию Loops (Циклы), затем просмотрите список музыкальных сэмплов, пока не найдете понравившуюся музыку. Мы для этого примера выбрали ‘Dance Around’. Нажмите кнопку ОК, чтобы выбрать музыку, затем щелкните вкладку Code (Код), чтобы снова открыть область кода.

Добавьте еще один блок событий в область кода, а затем добавьте блок управления  (навсегда). Внутри этого блока управления добавьте  (воспроизводить звук до тех пор, пока не будет выполнен блок) — не забывая указать название любого музыкального произведения, которое вы выбрали — и щелкните зеленый флаг, чтобы протестировать свою новую программу. Если вы хотите остановить музыку, щелкните красный восьмиугольник, чтобы остановить программу и отключить звук!

Наконец, вы можете смоделировать полноценную танцевальную программу, добавив в свою программу новый триггер события. Добавьте блок событий  (при нажатии клавиши пробела), а затем блок . Под ним добавьте блок повтора  (повторить 36 раз) — не забудьте изменить значение по умолчанию и внутри него блок поворота на 10 градусов и блок перемещения на 10 шагов .

Последовательность теперь выглядит так:

Щелкните зеленый флаг, чтобы запустить программу, затем нажмите клавишу ПРОБЕЛ, чтобы опробовать новую процедуру! Не забудьте сохранить свою программу, когда закончите.

 

 

 

Проект 3: Стрельба из лука

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

Внимание! Файлы данного проекта, реализованного в Scratch-3 и Scratch-2, можно скачать по ссылке:  rpf.io/archery

 

Начните с открытия веб-браузера Chromium и введите rpf.io/p/en/archery-go, а затем нажмите клавишу ENTER. Ресурсы для игры загружаются в виде zip-файла, поэтому вам нужно будет распаковать его (щелкните его правой кнопкой мыши и выберите "Извлечь сюда"). Вернитесь к Scratch 3 и щелкните меню "Файл", а затем "Загрузить с вашего компьютера". Щелкните ArcheryResources.sb3, а затем кнопку "Открыть". Вас спросят, хотите ли вы заменить содержимое текущего проекта: если вы не сохранили свои изменения, нажмите "Отмена" и сохраните их, в противном случае нажмите "ОК".

Только что загруженный проект содержит фон и спрайт, но не содержит фактического кода для создания игры: его добавление и будет наша задача в этой части. Начните с добавления блока  (при нажатии), а затем блока  (отправить сообщение1). Щелкните стрелку вниз в конце блока, затем ‘New Message’ (Новое сообщение) и впечатайте текст ‘new arrow’ (новая стрела) перед тем, как нажать кнопку "ОК". Ваш блок теперь выглядит так: .


Broadcast — это сообщение из одной части вашей программы, которое может быть получено любой другой частью вашей программы. Чтобы трансформировать сообщени в какое-то действие, добавьте блок  (когда я получаю сообщение1), и снова измените его на вид: (когда я получаю новую стрелу). На этот раз вы можете просто щелкнуть стрелку вниз и выбрать ‘new arrow’ из списка; вам не нужно создавать сообщение снова.

Под блоком , добавьте блок  (переход к координатам x: -150 y: -150) и блок  (установите размер 400%). Помните, что это не значения по умолчанию для этих блоков, поэтому вам нужно будет изменить их, как только вы перетащите их в область кода. Нажмите на зеленый флаг, чтобы увидеть, что вы сделали на данный момент: спрайт стрелки, который игрок использует для наведения на цель, переместится в нижний левый угол сцены и увеличится в четыре раза.

Чтобы усложнить жизнь игроку, добавьте движение, имитирующее раскачивание, когда лук натянут и лучник прицеливается. Перетащите блок  (навсегда), оберните им  (скольжение  1 секунду к координатам x: -150 y: -150). Измените первое белое поле, указав ‘0.5’ вместо ‘1’, затем поместите блок Операторов   (случайный выбор от -150 до 150) в каждое из двух других белых полей. Это будет означать, что стрела будет перемещаться по сцене в случайном направлении на случайное расстояние, что затрудняет попадание в цель!

Щелкните зеленый флаг еще раз, и вы увидите, что делает этот блок: теперь спрайт со стрелкой дрейфует по сцене, покрывая разные части цели. Однако на данный момент у вас нет возможности отправить стрелу в цель. Перетащите блок  (при нажатии клавиши пробела) в область кода, а затем добавьте блок управления  (остановите всё) . Щелкните стрелку вниз в конце блока и измените ее, чтобы добавить блок  (остановить другие скрипты в спрайте).

Если вы остановили свою программу, чтобы добавить новые блоки, щелкните зеленый флаг, чтобы запустить ее снова, а затем нажмите клавишу ПРОБЕЛ: вы увидите, что спрайт со стрелой перестал двигаться. Это начало, но вам нужно сделать так, чтобы стрела полетела к цели. Добавьте блок  (повтор 50) , и в него блок  (измените размер на -10), затем щелкните зеленый флаг, чтобы снова протестировать игру. На этот раз стрелка должна полететь от вас к цели.

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

Чтобы игрок знал, сколько очков он набрал, добавьте блок  (звукового приветствия) и блок  (сказать 200 очков в течение 2 секунд) внутри блока . Наконец, добавьте блок  в ​​самый низ стека блоков, ниже и вне блока , чтобы дать игроку еще одну стрелу каждый раз, когда он выстрелит. Нажмите на зеленый флаг, чтобы начать игру, и попытайтесь попасть в желтую мишень: когда вы это сделаете, вы будете вознаграждены одобрительными возгласами толпы и получите 200 очков!

Обучающее задание:

Попробуйте расширить программу, добавив баллы за попадание в другие части цели, кроме центра мишени: 100 баллов за красный круг, 50 баллов за синий и так далее.

 

 

В этой части обзора Raspberry Pi мы познакомились с визуальным языком программирования Scratch, который буквально за несколько часов с момента начала знакомства с ним может сделать из Вас программиста начального уровня и окунуть в огромный мир теперь уже более понятного программирования.

В следующей части мы расмотрим более сложное программирование на Raspberry Pi с использованием популярного языка Python.