Ранее мы создали свою первую игру, в которой автомобиль должен проехать всю трассу. Эта игра положила начало нашей собственной коллекции игр. Сегодня мы сделаем ещё несколько игр для коллекции.
Все наверняка знают о таком развлечении, как отбивание мяча от стены. Сделаем похожую игру в Scratch. Мяч будет отскакивать от краёв сцены и от платформы, которой управляет пользователь. Платформа будет двигаться вдоль нижнего края сцены. Если игрок не успеет отбить мяч платформой до того, как он коснётся нижнего края сцены, то игрок проигрывает.
Для начала рассмотрим, как пользователь будет управлять платформой. Пусть платформа перемещается при нажатии на стрелки вправо и влево. Соответственно, при нажатии на стрелку влево платформа будет двигаться влево, а при нажатии на стрелку вправо – вправо. Реализуем платформу в Scratch.
Удалим со сцены спрайт Царапки. В игре он не нужен. Теперь добавим спрайт платформы. Нарисуем его сами. Платформа будет представлять собой длинный прямоугольник зелёного цвета. Центр спрайта будет находиться в середине прямоугольника. С помощью кнопок установим подходящий размер и положение спрайта. Теперь напишем скрипт для управления платформой. Игра будет начинаться при нажатии на зелёный флажок. Тогда же и начнёт своё выполнение скрипт. Пусть в начале платформа находится в горизонтальной середине игрового поля, то есть координата икс её центра должна быть равна нулю. Для этого добавим в скрипт из категории «Движение» блок «Установить x в 0».
Дальше идут блоки для управления спрайтом. Они будут работать до конца игры. Сделаем так, чтобы платформа двигалась влево при нажатии на нужную клавишу. Для этого добавим в цикл блок для сокращённой формы ветвления. В качестве условия установим сенсор нажатия на клавишу, в котором укажем стрелку влево. Так как платформа будет двигаться по горизонтали, будет меняться только её координата x, поэтому для перемещения платформы используем блок «Изменить x на...» из категории «Движение». Так как платформа будет перемещаться влево, её координата x будет уменьшаться, поэтому в блоке укажем число -3.
Для перемещения вправо продублируем предыдущий блок ветвления. Изменим в его сенсоре клавишу на стрелку вправо. При движении вправо координата x платформы будет увеличиваться, поэтому в блоке для её изменения укажем число 3. Протестируем наш скрипт. Для этого запустим его. Как только мы запустили скрипт, платформа переместилась в горизонтальный центр сцены. Теперь попробуем управлять платформой. При нажатии на клавиши со стрелками она двигается влево и вправо. Однако у нашего скрипта есть недостаток. Мы можем легко увести платформу за край сцены. Чтобы это изменить, в конец цикла управления добавим блок «Если на краю, оттолкнуться». Платформа вышла из-за края сцены. Попробуем снова увести её за край. Теперь этого сделать не получится. Как только платформа касается края сцены, она останавливается.
Теперь добавим на сцену спрайт мяча. Загрузим его из библиотеки Scratch. В категории «Предметы» выберем мяч с названием «ball». Установим для него подходящий размер и перетащим его в центр сцены. Начнём составление скрипта для него. Как и скрипт платформы, он будет запускаться при нажатии на зелёный флажок. Вначале установим мяч в центре сцены. Для этого добавим в скрипт блок «Перейти в...» из категории «Движение», в котором укажем координаты центра сцены. Теперь запустим мяч в полёт. Для этого добавим в скрипт цикл «Всегда». В цикле установим блок «Идти пять шагов». Чтобы мяч отскакивал, добавим в цикл блок «Если на краю, оттолкнуться».
Запустим скрипт на выполнение. Мяч полетел вправо и теперь летает горизонтально между левым и правым краями. При этом меняет положение отблеск света на мяче. Чтобы этого не было, изменим стиль вращения мяча на «Без вращения». Ещё вы, наверное, догадались, почему мяч летает между левым и правым краями сцены. Так происходит потому, что по умолчанию спрайт направлен в направлении 90 градусов, а значит, по умолчанию он двигается вправо. Чтобы это изменить, перед циклом добавим блок «Повернуть в направлении». Направим мяч вертикально вверх, для этого укажем в блоке направление ноль градусов.
Снова запустим скрипт на выполнение. Теперь мяч летает вертикально между верхним и нижним краями сцены. Пока он игнорирует платформу, пролетая сквозь неё. Изменим это. Для этого в скрипт мяча, в цикл добавим блок для сокращённой формы ветвления. Установим в качестве условия сенсор касания, который будет реагировать, когда мяч коснётся спрайта платформы.
Теперь подумаем, как мяч должен вести себя при касании платформы. Казалось бы, здесь всё просто: мяч должен просто отскочить от неё, как от края сцены. Как мы можем это сделать? Для этого нужно лишь изменить направление мяча. Но как оно должно измениться? Если мы повернём мяч на 180 градусов, то есть изменим его направление на противоположное, он так и продолжит летать вверх и вниз, да и должен же как-то игрок управлять полётом мяча. Сделаем так, чтобы мяч отскакивал от платформы в направлении, противоположном её центру. Так игрок, принимая мяч на ту или иную часть платформы, сможет изменять направление его полёта так, как захочет.
Чтобы мяч отскакивал в направлении, противоположном центру платформы, сначала повернём его в направлении центра платформы с помощью блока «Повернуться к...» из категории «Движение». В выпадающем списке блока укажем спрайт платформы. Дальше развернём мяч в противоположном направлении, используем для этого блок поворота по часовой стрелке, в котором укажем поворот на сто восемьдесят градусов. Так мяч повернётся сначала в направлении центра платформы, а затем в противоположном направлении.
Запустим скрипт на выполнение. Теперь, двигая платформу, мы можем управлять полётом мяча. Однако остановим скрипт и снова запустим его. Просто не будем двигать платформу, и мяч будет бесконечно летать между ней и верхнем краем сцены. Чтобы это изменить, остановим скрипт и установим начальное направление мяча, не равное нулю. Наобум установим его равным 20 градусам. Снова запустим скрипт. Теперь игроку приходится так или иначе изменять направление полёта мяча. Остаётся только сделать так, чтобы, если пользователь не успеет отбить мяч с помощью платформы, он проиграл.
Сначала остановим скрипты. Нам нужно как-то среагировать на касание мячом нижнего края сцены. Пока мы не знаем, как это сделать, поэтому немного схитрим. Выделим сцену и перейдём на вкладку «Фон». Пририсуем на краю сцены красную линию. Теперь можно вычислять проигрыш при касании мячом этой линии. Изменим для этого скрипт мяча. Добавим в цикл блок для сокращённой формы ветвления. В качестве условия установим в нём сенсор касания цвета. Зададим блоку цвет нарисованной недавно линии. Если мяч коснётся линии, то игрок проиграет, а мы остановим все скрипты с помощью блока «Стоп».
Перейдём в режим презентации и запустим игру, нажав на зелёный флажок. Теперь игра в принципе готова. В неё уже можно играть. При этом мы можем легко изменять сложность игры, устанавливая платформу на разном расстоянии от верхнего края сцены и снова запуская скрипт.
Но давайте немного оживим нашу игру, добавив звуки. Так как все события игры анализирует скрипт мяча, все звуки будем добавлять именно сюда. Перейдём на вкладку «Звуки». Нам нужны звуки для отскакивания мяча от платформы и для проигрыша. У мяча уже есть какой-то звук c названием «pop». Прослушаем его. В переводе название этого звука означает «Хлопок», он прекрасно подойдёт для отскока мяча от платформы. Добавим из библиотеки звук для проигрыша. Для этого перейдём в категорию «Электроника» и прослушаем в ней звук «screech». Название звука переводится как «Визг». Этот звук подойдёт для проигрыша. Добавим его.
Теперь добавим звуки в скрипт. В блок ветвления, который срабатывает при касании мячом платформы, добавим из категории «Звук» блок «Играть звук pop». Блок «Играть звук до конца» здесь не подойдёт, так как он остановит выполнение скрипта до конца воспроизведения звука. В блок ветвления, срабатывающий в случае проигрыша, перед блоком сто добавим блок «Играть звук screech». Запустим игру в режиме презентации. Звуки при отскакивании от платформы работают как надо. А вот звук при проигрыше начинает воспроизводиться и сразу прерывается. Это происходит потому, что звук ещё не успевает воспроизвестись и при этом срабатывает следующий блок, который останавливает все скрипты. Исправим это, заменив блок для воспроизведения этого звука блоком «Играть звук screech до конца».
Снова запустим игру. Теперь и при поражении сначала полностью проигрывается звук, и только потом скрипт прерывается. Наша игра полностью готова. Сохраним её в нашей рабочей папке под именем «Отбивание мяча». Однако мы с ней ещё не закончили. Играть одному – это, конечно, здорово, но может скоро наскучить. С друзьями играть всегда веселее!
Немного изменив нашу игру, можно получить из неё замечательный электронный пинг-понг, в который смогут играть двое игроков за одним компьютером. Для этого достаточно добавить вторую платформу, которая будет двигаться вдоль верхнего края и управляться другими клавишами.
Просто продублируем спрайт платформы. Новый спрайт называется «Спрайт 2». Установим его около верхнего края сцены. Изменим цвет новой платформы на синий, а в её скрипте изменим клавиши управления. Вместо стрелки влево установим клавишу с английской буквой A, а вместо стрелки вправо – клавишу с буквой D. Отредактируем фон сцены и добавим на верхнем краю линию того же цвета, что и на нижнем. Это нужно, чтобы скрипт останавливался, когда мяч пропустит второй игрок. Теперь запустим игру, но сперва убедимся, что на компьютере включена английская раскладка клавиатуры, иначе второй игрок не сможет управлять своей платформой.
Мяч игнорирует платформу второго игрока, и игра заканчивается, когда мяч касается верхнего края поля. Так происходит потому, что мы забыли добавить в скрипт мяча действия при касании второй платформы. Добавим их. Для этого в скрипте мяча продублируем блок ветвления для касания первой платформы, а в его сенсоре укажем спрайт второй платформы.
Запустим игру в режиме презентации. Теперь в неё можно играть вдвоём. Проиграет игрок, пропустивший мяч. С друзьями играть куда веселее! Сохраним новую игру в рабочей папке под именем «Пинг-понг».
Сегодня мы неплохо поработали и создали целых две новых игры для своей коллекции. Это «Отбивание мяча», в которую играет один игрок, и «Пинг-понг», в который можно поиграть с другом.