Занятие №29 "Стоп-команды "
Как сообщить Scratch, что цикл нужно прервать и остановить скрипт?
Представьте, что вы пишете команду для поиска первого целого числа меньше 1000, которое без остатка делилось бы на 3, 5 и 7. Вы можете создать скрипт, который будет одно за другим проверять числа 999, 998, 997 и т. д. При этом нужно остановить поиск после того, как вы найдете подходящее число (в данном случае 945).

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

Вы не можете прикрепить никакие другие команды после блока стоп, если вы использовали один из этих вариантов.

Третий вариант позволяет спрайту или Сцене остановить все свои скрипты, за исключением того, который обратился к команде стоп. К этому блоку вы можете добавить другие блоки снизу, чтобы они были выполнены после того, как спрайт приостановит работу других скриптов. Посмотрим на эту команду в действии на примере простой игры
В этой игре игрок перемещает ведьму по Сцене, пытаясь увернуться от двух мячей
Два мяча перемещаются по Сцене и преследуют ведьму. Игрок перемещает спрайт Ведьма при помощи клавиатуры и пытается избежать столкновений с двумя мячами. Если красный мяч в любой момент коснется Игрока, игра закончится. Если зеленый мяч коснется игрока, он перестанет преследовать его, но красный мяч будет двигаться быстрее — и убегать от него станет труднее.

Скрипты для перемещения спрайта Ведьма те же, что и в предыдущем занятии. Скрипты для двух мячей показаны ниже — изучим их внимательнее.
УПРАЖНЕНИЕ 29.1

Загрузите игру и сыграйте в нее, чтобы понять, как она работает. Посмотрите, что происходит с желтой рамкой вокруг двух скриптов, когда зеленый и красный мячи касаются Игрока.
Когда зеленый мяч касается Игрока, он увеличивает переменную скорость (обозначает скорость движения красного мяча) и запускает команду стоп этот скрипт, чтобы остановить свой скрипт. Все другие скрипты работают нормально. Здесь оптимальна команда стоп этот скрипт: мы хотим всего лишь однократно ускорить красный мяч. А когда игрока касается красный мяч, он запускает команду стоп все, которая останавливает все работающие скрипты программы.
Завершение вычислительного цикла

Предположим, мы хотим найти первую степень числа 2, значение которой превышает 1000. Мы напишем процедуру, которая будет циклично проверять значение 2^1, 2^2, 2^3, 2^4 и т. д. Когда мы найдем нужное число, мы хотим, чтобы программа сообщила нам ответ и остановила процедуру. Рисунок демонстрирует два пути реализации этого подхода.
Процедура слева задает переменной результат значение 2 (первая степень двойки, которую нужно проверить) и запускает бес- конечный цикл в поисках ответа. Она проверяет значения переменной при каждой итерации цикла. Если результат больше 1000, процедура запускает команду стоп этот скрипт, чтобы остановить скрипт и вернуть управление команде, вызвавшей его. Иначе будет выполнена команда, следующая после блока если (она умножает предыдущее значение переменной результат на 2), и начнется новая итерация. В первой итерации блок если задает переменной значение 2, во второй — 4, в третьей — 8 и т. д. Это продолжается до тех пор, пока значение переменной не превысит 1000. В этот момент процедура остановится и вернется к вызывающей его команде, которая отображает значение переменной результат при помощи блока сказать.

Рисунок справа демонстрирует другой способ применения процедуры.

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

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

Предположим, вы создаете игру с двумя уровнями и хотите дать игроку выбрать один из них. Единственными применимыми ответами в данном случае будут цифры 1 и 2. Если пользователь введет другую цифру, нужно предложить ему ввести приемлемый ответ.
Процедура ПолучитьУровень просит пользователя ответить еще раз и проверяет ответ внутри цикла всегда. Если он неприемлем, цикл про- сит пользователя ввести новый ответ. Если ответ корректен, процедура запустит команду стоп этот скрипт, чтобы остановить цикл и закончить процедуру. Тогда основной скрипт, ожидающий результатов процедуры ПолучитьУровень, переходит к выполнению команды сказать. На рисунке показано, как достичь того же результата при помощи команды повторять пока не.

Процедура на рисунке просит пользователя ввести ответ и ждет. Если тот вводит 1 или 2, условие в шапке блока повторять пока не оказывается верным, цикл останавливается, процедура завершается. А если пользователь вводит любой другой символ, условие цикла оценивается как ложь, выполняется команда спросить внутри цикла. Она снова ждет ввода данных, а команда повторять пока не будет просить ответа до тех пор, пока пользователь не введет корректное значение. Этот вариант также не требует использования команды стоп.

Scratch - Учись играя!
This site was made on Tilda — a website builder that helps to create a website without any code
Create a website