Циклы в Scratch

Scratch для юных программистов

Как работать с новой темой

Циклы в Scratch

День сурка в компьютере: Как зациклить время и спасти пальцы от усталости

Представь, что тебе поручили суперважное задание: написать на школьной доске фразу «Я люблю программировать!» ровно сто раз. Ты берешь в руку белый мелок, подходишь к доске и начинаешь прилежно выводить первую строчку. Потом вторую. Потом третью... Уже на десятой строчке твои пальцы начнут жутко уставать. На двадцатой — тебе станет невероятно скучно. А к пятидесятой строчке ты, скорее всего, начнешь зевать и думать: «Почему же человек должен делать эту монотонную, одинаковую работу сам? Разве нельзя поручить ее роботу?».
В этот самый момент ты думаешь как настоящий, гениальный программист! Главный секрет всех создателей программ и компьютерных игр заключается в одной простой истине: люди рождены для того, чтобы придумывать классные идеи, творить и фантазировать. А вот компьютер создан для того, чтобы выполнять скучную, однообразную и повторяющуюся работу. Компьютер никогда не устает, у него не заболеют виртуальные пальцы, он не начнет зевать и не закричит: «Мне надоело!». Он будет выполнять одно и то же действие миллионы раз подряд с абсолютно одинаковой скоростью и точностью.
До сегодняшнего дня мы с тобой строили программы, которые двигались строго вперед, как поезд по рельсам или как строчки в книге — сверху вниз, шаг за шагом. Это были линейные алгоритмы. Но что делать, если нашему персонажу нужно не просто сделать десять шагов и остановиться, а ходить по экрану туда-сюда весь вечер, пока включена игра? Или если нам нужно нарисовать на экране забор из пятидесяти одинаковых деревянных дощечек?
Если бы мы пользовались старыми правилами, нам пришлось бы брать пятьдесят одинаковых синих блоков движения и выстраивать из них гигантскую, бесконечную башню, которая заняла бы все рабочее пространство экрана. Наш код стал бы похож на огромного неуклюжего монстра, в котором очень легко запутаться.
Чтобы спасти мир от скучных башен из одинакового кода, программисты придумали одну из самых мощных суперсил в цифровом мире — Циклы.
Цикл — это специальная команда, которая заставляет компьютер временно забыть про движение строго вниз по скрипту. Цикл заставляет программу свернуться в аккуратное колечко, вернуться назад к началу и повторить одни и те же блоки кода несколько раз подряд. Как только компьютер заходит внутрь цикла, он попадает в подконтрольную нам временную петлю. И пока эта петля не завершится, компьютер наружу не выйдет.

Оранжевые кольца Scratch: Знакомство с блоками повторений

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

Первый брат: Точный счетчик «Повторить ... раз»

Самый первый, простой и послушный блок цикла называется «Повторить [10] раз». На его верхней крыше вырезано маленькое белое круглое окошко, внутри которого изначально горит цифра 10. Ты можешь кликнуть по этому окошку мышкой и с клавиатуры написать туда абсолютно любое число: 5, 100, 1000 или даже миллион.
Этот блок работает как строгий военный командир, который умеет считать. Когда компьютер доходит сверху вниз до этого цикла, он смотрит на число в окошке и откладывает в своей электронной памяти ровно столько же невидимых жетонов. Затем компьютер заходит внутрь оранжевой буквы «С» и начинает выполнять команды сверху вниз.
Как только компьютер доходит до самой нижней «подставки» цикла, происходит магия: вместо того чтобы бежать дальше вниз к другим блокам программы, компьютер с силой отталкивается от подставки, как от батута, и взлетает обратно наверх — к крыше цикла! При этом он выбрасывает один невидимый жетон. Компьютер смотрит в окошко: жетоны еще остались? Да! Значит, мы снова бежим вниз по тем же самым командам.
Этот бег по кругу будет продолжаться до тех пор, пока жетоны в памяти компьютера не закончатся. Если в окошке было написано «3», компьютер совершит ровно три круга. На третьем круге он выбросит последний жетон, оттолкнется от батута-подставки, подлетит к крыше, увидит, что жетонов больше нет, и со спокойной совестью выйдет из оранжевого домика наружу, продолжив читать код, который идет ниже.
Для чего нужен этот цикл? Представь, что твой Кот должен сделать красивое сальто — повернуться вокруг своей оси на 360 градусов. Если мы просто поставим один синий блок «повернуть на 360 градусов», Кот крутанется так быстро, что наши глаза этого даже не заметят. Он мгновенно останется в том же положении. Но если мы возьмем цикл «Повторить 36 раз», а внутрь него положим блок «повернуть на 10 градусов», то Кот будет поворачиваться плавно и красиво. Он сделает 36 маленьких шагов-поворотов, и мы увидим потрясающую анимацию крутящегося героя!
Также этот цикл идеален, чтобы заставить персонажа плавно взлететь вверх при прыжке: мы просим компьютер «Повторить 10 раз: изменить Y на 10» (Кот взлетает), а затем сразу ниже ставим второй цикл «Повторить 10 раз: изменить Y на -10» (Кот плавно опускается на землю). Наша анимация прыжка готова, и она выглядит суперпрофессионально!

Второй брат: Бесконечный двигатель «Повторять всегда»

Второй оранжевый брат — это настоящий бунтарь, у которого полностью отсутствует тормозная система. Называется этот блок «Повторять всегда». Внимательно посмотри на его форму на экране: в отличие от своего брата-счетчика, у этого блока снизу нет привычной выемки-паза для крепления других блоков! Его нижняя подставка абсолютно гладкая. Это сделано специально: Scratch своим внешним видом подсказывает нам, что под этот блок физически невозможно прикрепить никакую команду. И это логично, ведь этот цикл никогда не закончится!
Когда компьютер попадает внутрь домика «Повторять всегда», он начинает кружиться по твоим командам бесконечно. Он доходит до нижней перегородки, взлетает к верхней крыше, снова бежит вниз, снова взлетает... И так будет продолжаться до тех пор, пока рассерженный игрок не нажмет на большую Красную кнопку «Стоп» прямо над сценой игры. Этот блок создает вечный двигатель внутри нашего проекта.
Зачем нам нужен вечный двигатель, который нельзя остановить? На самом деле, без блока «Повторять всегда» не обходится вообще ни одна настоящая игра! Представь облака на небе в твоем проекте. Они должны медленно плыть слева направо, а долетев до края экрана, появляться с левой стороны снова. Облака делают это на протяжении всей игры, пока ты сражаешься с монстрами или собираешь очки. Значит, блоки движения облаков должны лежать внутри цикла «Повторять всегда».
А как насчет грозного охранника-дракона, который ходит взад-вперед по коридору замка? Мы кладем внутрь бесконечного цикла команды: «идти 10 шагов», «если коснешься края, оттолкнись». Дракон будет ходить по экрану вечно, патрулируя свои владения, пока игра не завершится.
Даже веселая фоновая музыка, которая играет на заднем плане и создает настроение, должна быть завернута в блок «Повторять всегда», иначе песня доиграет до конца за одну минуту, и дальше мы будем путешествовать по игровому миру в полной, скучной тишине. Блок «Повторять всегда» — это сердцебиение нашей программы, которое поддерживает в ней жизнь с первой до последней секунды.

Третий брат: Упрямый ослик «Повторять пока не ...»

Третий, самый умный и продвинутый оранжевый блок цикла называется «Повторять пока не ...». Это настоящий гибрид (смесь) цикла и условия. На его верхней крыше, прямо рядом со словами, вырезано уже знакомое тебе по прошлым урокам шестиугольное окошко-замок с острыми краями.
Этот цикл напоминает упрямого ослика, который согласен выполнять твою работу только до тех пор, пока в его шестиугольном замке горит ответ «Ложь» (то есть пока событие НЕ случилось). Но как только в замке вспыхивает ответ «Правда!» — ослик тут же бросает всю работу, открывает нижнюю дверь и выпускает компьютер наружу из цикла.
Давай разберем это на жизненном примере. Представь, что мама сказала тебе: «Повторяй уборку в комнате, ПОКА НЕ наступит вечер». Ты раскладываешь игрушки по местам, протираешь пыль, пылесосишь ковер. Ты делаешь это круг за кругом. Компьютер внутри этого цикла постоянно посматривает на шестиугольный замок времени. На улице светит солнце? Да, значит условие «наступил вечер» — это неправда. Цикл продолжается. Но вот солнце зашло, на часах восемь вечера. Условие «наступил вечер» стало чистой правдой! В ту же секунду цикл ломается, ты закрываешь шкаф с игрушками и идешь отдыхать.
В играх Scratch этот блок незаменим для создания хитрых ловушек и умных врагов. Например, мы хотим сделать так, чтобы злой пришелец летел за нашей космической ракетой и стрелял в нее. Но как только ракета подберет защитный супер-щит, пришелец должен испугаться и улететь.
Мы берем блок «Повторять пока не ...», вставляем в шестиугольное окошко голубой сенсор «касается Супер-щит?», а внутрь оранжевой буквы «С» кладем синие блоки движения в сторону игрока. Пришелец будет упрямо преследовать игрока круг за кругом, ПОКА ракета не коснется щита. Как только это произойдет, условие выполнится, цикл мгновенно остановится, пришелец выйдет из петли времени и начнет выполнять нижние блоки — например, включит анимацию страха и улетит в космос.

Мультипликационная магия: Как оживить персонажа с помощью циклов

Один из самых главных секретов Scratch, ради которого дети по всему миру обожают циклы — это создание живой анимации костюмов. Ты наверняка видел старые мультфильмы или листал блокноты, на углах страниц которых нарисованы человечки. Если быстро-быстро пролистывать страницы пальцем, человечек на бумаге как будто оживает и начинает бежать. В Scratch этот эффект создается с помощью циклов.
У нашего любимого рыжего Кота в гардеробной есть два встроенных костюма: на первом костюме его ножки вытянуты вперед, а на втором — подогнуты, как будто он делает шаг. Если мы просто переключим костюм один раз, Кот не побежит. Он просто застынет в новой позе.
Давай сотворим настоящую магию анимации. Мы берем оранжевый блок «Повторять всегда». Внутрь его пасти мы кладем фиолетовый блок «следующий костюм». Рядом мы кладем синий блок «идти 10 шагов». Запускаем проект... Ой-ой-ой! Кот превратился в безумное размытое пятно, он несется по экрану со скоростью реактивного самолета, а его ноги мелькают так быстро, что сливаются в кашу! Почему так произошло?
Вспоминаем Закон порядка: компьютер выполняет команды со скоростью молнии. Он меняет костюмы миллион раз в секунду! Человеческий глаз просто не успевает следить за такой скоростью. Чтобы анимация стала красивой и плавной, нам нужно научить компьютер немного притормаживать на каждом круге нашей временной петли.
Для этого в самом верху оранжевого раздела «Управление» живет маленький, но невероятно важный блок «ждать [1] секунд». Этот блок — настоящий тормоз для компьютера. Он заставляет программу замереть на указанное время. Число 1 секунда для компьютерной игры — это целая вечность. Поэтому мы кликаем по белому окошку блока ожидания и превращаем единицу в крошечную дробь — 0.1 (одна десятая секунды).
Теперь давай перестроим наш скрипт анимации внутри цикла «Повторять всегда»:
  1. Идти 5 шагов (синий кирпичик)
  2. Следующий костюм (фиолетовый кирпичик)
  3. Ждать 0.1 секунд (оранжевый тормоз)
Запускаем игру... Ура! Наш Кот плавно, красиво и естественно шагает по сцене, как живой персонаж из крутого мультфильма! Изменяя число в блоке ожидания, ты можешь управлять скоростью своего героя: сделаешь 0.05 секунд — Кот побежит как олимпийский чемпион, сделаешь 0.5 секунд — он поплетется медленно, как сонная черепаха. И все это благодаря великой силе циклов!

Три золотых правила безопасной работы с циклами

Чтобы твои временные петли не сломали логику игры и не запутали компьютер, всегда помни о трех железных законах цифровой мастерской Scratch.
  • Закон свободного выхода: Будь очень осторожен с блоком «Повторять всегда». Помни, что из него невозможно выбраться вниз по скрипту. Если ты случайно положишь команду «включить победную музыку» или «показать надпись Конец игры» ПОСЛЕ блока «Повторять всегда» (прикрепить снизу не получится, но можно промахнуться в структуре), компьютер до этих команд никогда не доберется. Все, что должно случиться после финала бесконечного действия, должно управляться другими скриптами или специальными блоками условий.
  • Закон обязательного тормоза: Если ты используешь циклы для смены костюмов, изменения цветов спрайта или проигрывания звуков, всегда ставь внутрь цикла маленький блок «ждать 0.1 секунд». Если забыть про оранжевый тормоз, твоя игра превратится в безумное мерцание, компьютер будет перегружен бесполезной сверхбыстрой работой, а анимация станет невидимой для человеческих глаз.
  • Закон правильного домика: Всегда внимательно проверяй, какие именно блоки попали внутрь оранжевой буквы «С», а какие остались снаружи. Если ты случайно положишь блок «перейти в координаты X:0 Y:0» (вернуть кота в центр сцены) ВНУТРЬ цикла «Повторять всегда» вместе с блоками ходьбы, то Кот застрянет в центре экрана навсегда. Компьютер на каждом круге будет делать шаг вперед, но тут же насильно возвращать Кота в центр. Команды настройки (старта) всегда должны стоять НАД циклом, а внутри цикла должны жить только те действия, которые меняются круг за кругом.
Теперь ты владеешь секретом управления игровым временем! Циклы помогут тебе создавать огромные извилистые миры, оживлять персонажей, запускать бесконечные космические дожди из метеоритов и делать игры, в которые хочется играть часами. Не бойся экспериментировать, вкладывать одни циклы внутрь других (программисты называют это вложенными циклами) и создавать свои уникальные правила для цифровой вселенной Scratch!

Проверь себя

← Предыдущая тема Следующая тема →

← Вернуться к разделу