Меню
Видеоучебник

Ввод переменных

Урок 25. Творческие задания в Sсratch 5-6 классы

Ученики уже умеют создавать управляемые спрайты, которые реагируют на нажатия клавиш и другие действия пользователя. Однако иногда в скрипт нужно передать какое-нибудь значение. На этом уроке ученики изучат инструменты, с помощью которых это можно сделать.
Плеер: YouTube Вконтакте

Конспект урока "Ввод переменных"

Вопросы:

·     Ввод переменных.

·     Блоки ввода.

·     Применение ввода переменных.

Ранее мы взаимодействовали со спрайтами Scratch с помощью мыши и клавиатуры. Спрайты реагировали на нажатие кнопок, если реакция на это была прописана в их скриптах, но что, если нужно каким-то образом передать сообщение спрайту? Допустим, нам нужно сделать так, чтобы Царапка выполнял команды, которые пользователь будет вводить с клавиатуры. В простейшем варианте научим Царапку выполнять всего две команды: «Шаг» и «Поворот». По команде «Шаг» Царапка будет смешаться на некоторое расстояние в текущем направлении спрайта. По команде «Поворот» Царапка будет менять направление своего спрайта на противоположное.

Прежде всего Царапка должен как-то принять команду. Здесь нам помогут два блока из категории «Сенсоры». Первый блок «Спросить и ждать». Узнаем, как он работает. Для этого нажмём на него левой кнопкой мыши. Царапка произнёс вопрос, который записан в блоке, а внизу сцены появилась строка для ввода. Мы можем изменять сообщение, которое произносит Царапка, меняя содержимое блока. Теперь давайте введём что-нибудь в строку снизу сцены. Как только мы нажали на кнопку после строки ввода, строка ввода исчезла, а Царапка перестал произносить вопрос. Вместе со строкой исчезло и то, что мы ввели. Однако исчезло введённое сообщение не бесследно. Оно было загружено в оперативную память компьютера, и к нему всё ещё можно обратиться. Для этого обратимся к блоку-датчику «Ответ». Нажмём на ячейку перед ним. Содержимое ответа совпадает с введённым сообщением. Сам блок «Ответ» можно использовать, вставляя его в ячейки других блоков.

Теперь уберём со сцены лишний блок и составим скрипт для решения задачи. Сделаем так, чтобы он запускался при нажатии на зелёный флажок. После выполнения одной команды Царапка сразу будет запрашивать новую, поэтому добавим цикл «Всегда». В цикл добавим блок «Спросить и ждать». В качестве текста, произносимого Царапкой, зададим «Введите команду». Дальше добавим блок для полной формы ветвления. В условии ветвления будем проверять ответ. Если в ответе записано значение «Шаг», тогда пусть Царапка выполняет блок «Идти 10 шагов». Почему не один шаг? Чтобы было хорошо видно, что Царапка изменил местоположение. После слова «Иначе» добавим ещё один блок для полной формы ветвления. В его условии, как и в прошлом, будем проверять, не записано ли в ответе значение «Поворот». Если да, то нужно повернуть Царапку. Для этого используем блок «Повернуть по часовой стрелке на 180 градусов». В этом случае Царапка повернется в направлении, противоположном текущему. Только изменим стиль вращения спрайта на «Относительно центральной оси». В этом блоке ветвления часть после слова «Иначе» сработает, только если значение ответа не «Шаг» и не «Поворот». В этом случае сделаем, чтобы Царапка в течение двух секунд говорил, что команда введена неверно.

Скрипт завершён. Запустим его на выполнение. Царапка запрашивает команду на ввод. Введём слово «Шаг». Царапка сместился вправо и запрашивает новую команду. Зададим команду «Поворот». Царапка повернулся в противоположном направлении и запрашивает новую команду. Зададим вместо команды случайный текст. Теперь Царапка говорит, что команда введена неверно. Скрипт работает правильно.

Немного поэкспериментируем. Удалим из цикла все блоки, кроме «Спросить и ждать». В нём попросим ввести количество шагов. Дальше добавим в цикл блок «Идти», в котором в качестве количества шагов используем датчик ответа.

Запустим скрипт на выполнение. Введём число 20. Царапка сместился на 20 шагов. Так датчик ответа тоже можно использовать. Царапка снова запрашивает количество шагов на ввод. Зададим то же число двадцать, только теперь словом. Ничего не произошло, при этом Царапка снова запросил количество шагов. Если пользователь задаст некорректные данные, например слова вместо чисел, то скрипт проигнорирует блоки, которые нельзя из-за этих данных выполнить. Поэтому для правильной работы скриптов нужно следить за корректностью введённых данных.

Рассмотрим ещё один пример с запросом на ввод данных. Научим Царапку резать пиццу на заданное число равных кусков. Начнём решение задачи. Сперва нужно разместить пиццу на сцене. Для этого выделим сцену и изменим её фон. Выберем из библиотеки Scratch из категории «Прочее» фон в мелкую клетку. Дальше импортируем на фон пиццу из нашей рабочей папки из файла «Пицца». Растянем пиццу до вертикального размера сцены. Установим пиццу в центр сцены, ориентируясь на клеточки фона. Царапка не может разрезать пиццу голыми лапами, поэтому дадим ему нож. Для этого изменим костюм Царапки. Импортируем из нашей рабочей папки из файла «Нож» изображение ножа. Уменьшим его размер и вложим в лапу Царапки так, как это показано на экране. Установим центр костюма на остриё ножа.

Теперь подумаем, как Царапка будет резать пиццу. Конечно, никто ничего резать не будет. Царапка просто проведёт линии отреза. Нужно разрезать пиццу на заданное количество равных кусков. Пицца представляет собой круг. Пусть Царапка режет пиццу из центра к краям. После каждого разреза Царапка будет возвращаться в центр и поворачиваться на угол, необходимый для отреза нового куска. На какой угол должен поворачиваться Царапка между отрезами? Полный оборот составляет 360 градусов. Чтобы определить угол поворота, нужно триста шестьдесят градусов разделить на количество кусков.

Начнём составление скрипта. Удалим все блоки, кроме блока запуска. Вначале очистим сцену от следов предыдущих попыток. Теперь пусть Царапка запрашивает количество кусков. Создадим переменную «Угол» и вычислим в ней угол поворота. Отрезы будут рисоваться пером чёрного цвета. Поэтому становим нужный цвет пера. Дальше Царапка должен начать резать пиццу. Количество необходимых отрезов будет совпадать с количеством кусков, поэтому добавим в скрипт блок цикла повторить, в котором в качестве количества повторений установим датчик ответа.

В цикле Царапка должен сначала переместиться в центр пиццы, который совпадает с центром сцены. Используем для этого блок «Перейти в...». Повернём Царапку на угол для отреза с помощью блока «Повернуть по часовой стрелке на...», в качестве величины угла используем датчик переменной «Угол». Опустим перо. Какой длины нужно сделать отрез, можно определить, наведя на левый или правый край сцены. Длина отреза должна быть сто восемьдесят шагов. Поэтому добавим блок «Идти» с соответствующим количеством шагов. Остаётся только поднять перо. Царапка вернётся в центр при выполнении первой команды нового витка цикла.

Запустим скрипт на выполнение. Введём количество кусков равным 6. Царапка разрезал пиццу на 6 равных кусков. Снова запустим скрипт и теперь зададим 15 кусков. Царапка разрезал пиццу на 15 равных кусков. Царапка научился делить пиццу на нужное количество кусков.

Кто-то спросит, а как же можно использовать ввод переменных в играх. Это довольно просто. Загрузим одну из наших старых игр «Отбивание мяча». Мы уже усложняли её с помощью дополнительной платформы, но теперь появилась возможность сделать её ещё интереснее. Можно ввести в игру счёт очков и не просто так. Сделаем так, чтобы игра запоминала лучший счёт и имя лучшего игрока.

Перейдём на вкладку «Данные» и создадим три переменных. Назовём их «Лучший игрок», «Лучший счёт» и «Текущий счёт». Расположим их показания возле нижнего края сцены, при этом платформу игрока поднимем чуть выше, чтобы её было хорошо видно. Сделаем, чтобы вначале игра запрашивала имя игрока. Соответствующие блоки добавим в скрипт мяча. Сперва добавим сразу после запуска скрипта блок «Спросить и ждать», в котором изменим вопрос на «Как вас зовут?». Запустим скрипт на выполнение. Теперь мяч вначале спрашивает имя игрока. Говорящий мяч – это, конечно, хорошо, но не в нашем случае. Чтобы это изменить, перед блоком «Спросить и ждать» установим блок «Спрятаться», а после – «Показаться». Снова запустим скрипт. Теперь в начале игры просто появляется рамка с вопросом. Это нас устроит. Остановим игру.

Подумаем, как будут начисляться очки. Можно начислять игроку одно очко при каждом отскоке мяча от платформы игрока. Для этого найдём в скрипте мяча блок ветвления, который срабатывает при касании платформы игрока. В него добавим блок «Изменить на...». В блоке укажем переменную «Текущий счет», а число оставим единицей. Также не забудем в начале новой игры обнулить текущий счёт. Так при отскоке мяча от платформы текущий счёт должен увеличиваться на 1.

Запустим игру и проверим это. Введём имя игрока и немного поиграем. Вы можете заметить, что часто при отскоке мяча текущий счёт увеличивается не на одно очко, а на два. Остановим игру и подумаем, почему так происходит. Дело в том, что после первого срабатывания блока ветвления мяч не успевает отскочить от платформы и на следующем витке цикла этот блок срабатывает ещё раз. Чтобы это исправить, немного ускорим отскок мяча. Для этого после увеличения текущего счёта мяча добавим блок «Идти 5 шагов».

Снова запустим игру. Теперь при отскоке мяча от платформы текущий счёт увеличивается на единицу, как и должен. Остановим игру. Теперь сделаем так, чтобы игра запоминала лучшего игрока и его счёт. Для этого найдём в скрипте мяча ветвление, которое отвечает за конец игры. В нём перед блоком «Стоп» добавим блок для сокращённой формы ветвления, который будет срабатывать, если текущий счёт больше лучшего счёта. В этом случае установим для переменной «Лучший счёт» значение, равное значению переменной «Текущий счёт». Для переменной «Лучший игрок» установим значение датчика ответа, в котором находится имя текущего игрока. Так в конце игры, если текущий счёт превысил лучший счёт, игра сохранит имя текущего игрока и его текущий счёт.

Запустим игру. Введём имя игрока и попробуем сыграть. Игра закончена, и, так как лучший счёт был равен нулю, игра сохранила имя игрока и его счёт. Игра работает правильно. Сохраним её в рабочей папке. Проведём ещё один небольшой эксперимент. Создадим новый файл проекта в Scratch. Так старый проект будет закрыт. Загрузим сохранённый проект из рабочей папки. Как видим, значения всех переменных сохранились, то есть игра всё ещё помнит лучший счёт и лучшего игрока. Запустим игру, введём имя игрока и снова немного поиграем. У нас снова лучший счёт. Снова создадим новый проект, не сохраняя при этом текущий. Загрузим игру. Счёт такой же, как был при предыдущем запуске, то есть новый лучший счёт не был сохранён. Это произошло потому, что мы в последний раз не сохранили файл проекта при создании нового, а значит, не сохранились изменённые значения переменных.

Мы узнали:

·     Блок «Спросить и ждать» из категории «Датчики» запрашивает на ввод с клавиатуры значение, которое сохраняется в оперативной памяти компьютера.

·     Блок-датчик «Ответ» из категории «Датчики» позволяет просмотреть значение, заданное пользователем с помощью предыдущего блока.

·     Текущие значения переменных, как и всё остальное, сохраняются в файле проекта.

501

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт

Вы смотрели