Занятие № 2. Движение
Упражнение № 1. Игра “Собери золото”
Создадим игру в которой пользователь будет перемещать спрайт при помощи стрелок на клавиатуре, чтобы собрать максимальное количество мешков с золотом. Мешки будут появляться в случайных точках сцены. Если игрок не успевает схватить мешок за три секунды, тот перемещается в другое место.
Открой файл Money_NoCode.sb2. Этот файл будет шаблоном будущей игры. Для этого создай новый проект, выбери пункт меню Файл - Загрузить с компьютера и выбери в появившемся окне нужный файл.
В библиотеке спрайтов выбери спрайт Player и добавь ему следующие скрипты.
Когда игрок кликает по зелёному флажку, спрайт перемещается в точку (-30, -30) 1
и поворачивается вправо 2
. Следующий скрипт отвечает за передвижение спрайта влево по нажатию на клавишу со стрелкой. После нажатия на стрелку, скрипт меняет направление спрайта 3
, проигрывает короткий звук 4
и передвигает спрайт на 60 шагов 5
. Спрайт отталкивается от краёв Сцены 6
, если это необходимо. Поскольку 60 шагов соответствуют одному квадрату в системе координат сцены, каждый раз спрайт с игроком перемещается на одну клетку.
Добавь скрипт с помощью которого спрайт сможет двигаться вправо после нажатия клавиши. Чтобы сделать это быстрее, нажми правой кнопкой на блок Когда клавиша стрелка влево нажата и выбери пункт Дублировать. К курсору мыши “прилипнет” копия блока и всех блоков, которые к нему присоединены. Щелкни мышью по рабочей области, чтобы разместить копию скрипта. Измени параметры блоков согласно следующему изображению:
Самостоятельно добавь скрипты, с помощью которых игрок сможет передвигаться вверх и вниз.
Запусти игру, нажав на зелёный флажок и проверь, передвигается ли спрайт Player.
Если всё работает правильно, выбери спрайт Gold, и составь для него следующий скрипт.
После нажатия на зелёный флаг, мешок с золотом будет каждые 3 секунды перемещаться в случайную часть поля. Количество собранных мешков сохраняется в переменную score.
Переменные позволяют сохранять информацию, чтобы использовать её позже в наших программах. Подробнее о переменных ты узнаешь на следующих занятиях.
В начале игры устанавливаем переменной score значение 0 1
. Затем запускаем цикл, который будет повторяться 20 раз 2
. После каждого цикла мешок с золотом будет появляться в другом случайном месте 3
, давая игроку немного времени, чтобы схватить его 4
, и увеличить счёт, если игроку это удалось 5
.
Нам нужно чтобы мешок появлялся в одном из 48 квадратов сцены в случайном порядке. Вернись к первому рисунку, и обрати внимание, что координата х мешка может быть такой: -210, -150, -90, …, 210. Эти цифры расположены на расстоянии 60 шагов друг от друга, так что мы сможем вычислить координату х начиная с -210:
\[ x=-210+(0*60) \]
\[ x=-210+(1*60) \]
\[ x=-210+(2*60) \]
Похожие выражения получаются и для координаты у. Мы можем установить координату х мешка, сгенерировав случайное число от 0 до 7, умножая его на 60 и прибавляя к результату -210.
У игрока будет 3 секунды на то, чтобы схватить мешок. Это время вы можете изменить, чтобы упростить или усложнить игру. Для отслеживания времени используется встроенный в Scratch таймер, который мы обнуляем каждый раз, когда игрок поймал мешок или прошло 3 секунды.
В среде Scratch есть таймер, который фиксирует, сколько времени прошло с момента начала работы. Это можно использовать при создании собственных игр, в которых есть отсчёт времени.
Если игрок поймал мешок, то выполнятся команды которые находятся внутри блока если, то. В этом случае будет воспроизведён звук, и к счёту прибавится 1.
Игра готова. Запусти её, нажав на зелёный флажок. Если программа работает неправильно, сверься со скриптами в этой инструкции, или позови преподавателя.
Сохрани проект. Для этого выбери пункт меню Файл
- Сохранить
. В открывшемся окне, выбери папку в которую нужно сохранить проект, а также укажи имя файла (Money.sb3). Нажми кнопку Сохранить
.
Задания для самостоятельной работы
Подумай, как можно повысить или понизить сложность игры? Какие значения в скриптах для этого нужно изменить?
Упражнение № 2. Игра “Поймай яблоки”
Создадим игру в которой пользователю нужно поймать наибольшее количество яблок, которые падают с дерева. Яблоки нужно ловить тележкой которая двигается горизонтально с помощью стрелок.
Открой файл CatchApples_NoCode.sb2. Для этого создай новый проект, выбери пункт меню Файл - Загрузить с компьютера и выбери в появившемся окне нужный файл. В нём находится заготовка будущей игры с двумя спрайтами - Cart и Apple. Также заранее создана переменная score для того, чтобы хранить количество пойманных яблок.
Выбери спрайт Cart и составь для него следующий скрипт:
Нажми зелёный флажок. Тележка передвинется в центр Сцены. Затем скрипт постоянно проверяет состояние клавиш со стрелками и в зависимости от того, нажаты они или нет, двигает тележку.
Выбери спрайт Apple и создай для него следующий скрипт:
Сначала сбросим счёт 1
. Затем спрячем спрайт с помощью блока спрятаться из раздела Внешность 2
. После этого запускаем блок повторить для того, чтобы упало 30 яблок 3
. После этого спрайт перемещается в позицию со случайной координатой у 4
. Блок создать клон создаёт копию яблока 5
. Таким образом нам достаточно написать скрипт для одного яблока а не дублировать 30 яблок со своими скриптами. После этого скрипт остановится на случайный промежуток времени 6
и опять перейдёт к первому шагу блока повторить.
Создадим скрипт для клонов яблока. Выбери спрайт Apple и добавь для него следующий скрипт:
Как только у спрайта Apple появляется клон, он начинает работать по скрипту записанному после блока когда я начинаю как клон 1
. После этого с помощью блока всегда и блока изменить у на мы двигаем спрайт вниз. Если клон яблока коснулся спрайта Cart, значит яблоко поймано. В таком случае мы увеличиваем счёт игрока на единицу и удаляем этот клон яблока 3
. Если же клон яблока опустился ниже спрайта Cart, то мы удаляем яблоко и не засчитываем игроку очки 4
.
Нажми на зелёный флажок, чтобы протестировать готовую игру.
Задания для самостоятельной работы
Подумай, как можно повысить или понизить сложность игры? Какие значения в скриптах для этого нужно изменить?