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