Вопросы:
· Применение рычажка.
· Организация ввода переменной с помощью рычажка.
Составим в Scratch небольшой скрипт, который будет изменять размер Царапки на введённый пользователем в процентах. Пусть скрипт запускается при нажатии на зелёный флажок. Добавим в скрипт цикл «Всегда». В цикле установим блоки «Спросить и ждать» и «Установить размер в процентах». В блоке установки размера на место числового значения установим сенсор «Ответ». В блоке «Спросить и ждать» введем запрос на ввод размера в процентах.
Запустим скрипт на выполнение. Введём новый размер в 10 процентов от оригинала. Котёнок уменьшился. Введём размер в 300 процентов от оригинала. Теперь котёнок занимает практически всю сцену. Но предположим, что пользователь решил задать размер в тысячу процентов от оригинала. На столько котёнок не увеличивается. Или же пользователь решит ввести текст в поле ввода. Тогда размер спрайта не изменится. Нужно как-то ограничить возможности пользователя, чтобы можно было ввести только числа и только в определённом промежутке.
В обычной жизни в таких случаях используются всякие вращающиеся ручки, рычаги и другие манипуляторы. Так, с помощью вращающейся ручки в микроволновке можно задать время готовки, или у фена температура воздуха может задаваться с помощью ползунка. Похожий инструмент есть и в Scratch. Он называется «рычажок» и используется для ввода в переменную чисел из заданного промежутка. Нам такой способ ввода подходит. Изменим для этого скрипт Царапки. Удалим блок «Спросить и ждать», а из блока «Установить размер» удалим сенсор ответа. В категории «Данные» создадим новую переменную, которую назовём «Размер». На сцене появился индикатор, который отображает значение переменной. Нажмём на нём правой кнопкой мыши. В появившемся контекстном меню выберем пункт «Рычажок». Под индикатором появился рычажок. Мы можем перетаскивать бегунок, изменяя таким образом значение переменной в пределах от 0 до 100. Эти пределы можно изменить. Для этого щёлкнем по индикатору правой кнопкой мыши и в появившемся контекстном меню выберем пункт «Установить максимальные и минимальные значения бегунка». В появившемся окне можно задать минимум и максимум промежутка. Установим минимум равный 1, а максимум – 300. Теперь, передвигая рычажок, можно установить значение переменной от единицы до трёхсот. Наконец установим значение переменной в качестве числового значения в блок «Установить размер». Запустим скрипт на выполнение. Теперь, как только мы изменим значение переменной с помощью рычажка, то соответствующим образом изменится и размер Царапки на сцене.
Мы поняли, как можно использовать рычажок. Используем его, немного усовершенствовав нашу самую первую игру «Автомобиль на дороге». Загрузим её из нашей рабочей папки, запустим её и вспомним, о чём она. Нужно довести автомобиль до красной линии. Если автомобиль выйдет за пределы трасы, то есть коснётся белого цвета, – путь придётся начинать сначала. Как можно усовершенствовать эту игру? Сейчас у неё есть несколько проблем. Не хватает какого-то соревновательного элемента. Чтобы его внести, сделаем так, чтобы рассчитывалось время, за которое пройдена трасса. И сохранялось имя лучшего игрока и время, за которое тот прошёл трассу. Также управление автомобилем совсем нереалистично. Машина мгновенно набирает скорость и останавливается, как будто она невесома. Добавим машине вес, сделав набор и сброс скорости постепенными. А чтобы было ещё интереснее, сделаем, чтобы максимальную скорость автомобиля можно было регулировалась с помощью рычажка. Так при высокой максимальной скорости машиной будет управлять сложнее.
Сперва добавим в игру нужные переменные. Создадим переменные «Лучший игрок», «Лучшее время», «Текущее время», «Максимальная скорость» и «Скорость». При этом сделаем так, чтобы на сцене не отображались значения переменных «Текущее время» и «Скорость», а индикаторы оставшихся переменных разместим на сцене так, чтобы они не мешали игре. Для расчёта времени можно использовать один из сенсоров. Он называется «Таймер». Выведем его значение на экран. Дальше сделаем, чтобы значение максимальной скорости можно было задать с помощью рычажка. Зададим пределы максимальной скорости. Установим минимальное значение равным единице, а максимальное – десяти. Пока мы выставили ограничения примерно. Когда попробуем поиграть – возможно их подкорректируем.
Сперва сделаем так, чтобы игра рассчитывала время, за которое игрок пройдёт трассу. Пусть таймер запускается в начале игры, как только автомобиль окажется на старте. Для этого нужно, чтобы в начале игры таймер обнулился. В категории «Сенсоры» для этого есть блок «Перезапустить таймер». Установим его в скрипт автомобиля перед циклом «Всегда». В конце игры нужно зафиксировать время прохождения трассы. Для этого в цикле найдём ветвление, которое срабатывает в конце игры, то есть при касании автомобилем красной линии. В его начало добавим из категории «Данные» блок, который будет задавать переменной «Текущее время» значение, равное значению «Таймера». Так в конце заезда в переменной «Текущее время» будет сохранено время прохождения трассы.
Дальше сделаем, чтобы игра сохраняла имя лучшего игрока и лучшее время прохождения трассы. Для этого добавим перед циклом блок «Спросить и ждать». В нём укажем вопрос «Как вас зовут?». Чтобы вопрос выводился над полем ввода, а не задавался автомобилем, будем на время запроса прятать автомобиль. Для этого добавим в скрипт блоки «Спрятаться» и «Показаться» из категории «Внешность». Дальше блоки будем добавлять в ветвление, определяющее конец игры, после сохранения времени трассы. Добавим блок ветвления, который будет срабатывать, если текущее время меньше лучшего. В этом случае для переменной «Лучшее время» установим значение переменной «Текущее время», а для переменной «Лучший игрок» – содержимое сенсора «Ответ». Так игра будет запоминать лучшее время и лучшего игрока.
Попробуем сыграть. Для этого в режиме презентации запустим игру. Введём имя. При запуске таймер обнулился. Пройдём всю трассу до конца. В результате мы не установили новый рекорд. Сложно пройти трассу за время меньшее, чем ноль секунд. При этом, когда мы прошли трассу, игра началась заново, но таймер не был сброшен. Исправим это. Завершим игру. В конец ветвления, которое срабатывает, когда игра закончена, добавим блок «Перезапуск таймера». Теперь таймер будет обнуляться при новом запуске игры. Также зададим начальное значение для лучшего времени. С помощью соответствующего блока зададим его достаточно большим, чтобы его легко было побить. Установим время в 1000 секунд.
Снова запустим игру и зададим имя. Полностью пройдём трассу. Мы показали время меньшее, чем тысяча секунд. Игра сохранила наше имя в качестве лучшего игрока, а также время, которое мы показали. После перезапуска игра обнулила таймер. Пока всё работает верно.
Теперь сделаем управление автомобилем более реалистичным. За движение автомобиля в его скрипте отвечает вот это ветвление. Извлечём его из скрипта и переделаем. Из первой части ветвлений извлечём блоки, которые реагируют на нажатие стрелки вправо и стрелки влево. И установим их ниже ветвления. Они останутся неизменны. Дальше установим во второй части ветвления ещё один блок для полной формы ветвления, который будет срабатывать при нажатии стрелки вниз. Остальные блоки из верхнего ветвления удалим.
При нажатии на стрелки вверх и вниз автомобиль должен изменять свою скорость. Подумаем, как это должно быть. При нажатии на стрелку вверх скорость будет постепенно увеличиваться, пока не достигнет максимальной скорости. При нажатии на стрелку вниз скорость будет постепенно уменьшаться до максимального значения со знаком минус. Если же стрелки вверх и вниз не нажаты, то скорость должна постепенно стремиться к нулю, пока автомобиль не остановится.
Продолжим составление скрипта. При нажатии на стрелку вверх с помощью блока для сокращённой формы ветвления будем проверять, что скорость меньше максимальной скорости. В этом случае увеличим значение скорости на 0,2. При нажатии на стрелку вниз проверим, больше ли скорость максимальной скорости, взятой со знаком минус. Чтобы взять максимальную скорость со знаком минус используем блок оператора разности, в левой ячейке которого запишем 0, а в правой – значение максимальной скорости. В случае если ветвление сработает, уменьшим скорость на 0,2. Наконец если не нажата ни одна из этих клавиш, будем проверять, не равна ли скорость нулю. Для этого установим в блок ветвления из категории «Операторы» блок «Не», в который установим блок равенства. В нём будет значение блока скорости и ноль. Внутрь этого блока ветвления установим другой блок для полной формы ветвления, который будет работать при условии, что скорость больше 0. В этом случае будем уменьшать скорость на 0,1. В противном случае, то есть если скорость меньше 0, увеличим скорость на 0,1. Таким образом, скорость будет стремиться к 0.
Мы описали изменение скорости при нажатии соответствующих клавиш. Остаётся задать движение с этой скоростью. Для этого добавим в отдельную часть блок «Идти», в котором в качестве количества шагов используем значение скорости. Так блок будет двигаться с заданной скоростью. Добавим также блоки, которые будут обнулять скорость при запуске игры, при завершении игры и при выходе за пределы поля.
Теперь попробуем поиграть. Для этого установим нужное значение максимальной скорости и в режиме презентации запустим игру. Введём имя игрока. Попробуем пройти трассу до конца. Это теперь не так легко потому, что автомобиль при отпускании клавиши останавливается не сразу, а замедляется постепенно. При этом скорость обнуляется при перемещении на начальную позицию. Машина разгоняется по-разному при изменении максимальной скорости. Так управление машиной стало реалистичнее. При достижении финиша, так как время прохождения трассы больше лучшего, имя лучшего игрока не меняется. Игра работает правильно. Сохраним её.
Мы узнали:
· Рычажок используется для ввода в переменную чисел из заданного промежутка.
· Рычажок позволяет ограничить возможности для ввода пользователем данных, так как с помощью рычажка нельзя ввести ничего, кроме чисел из заданного промежутка.