Оглавление
Вместо предисловия
Установка программного обеспечения
1. Обзор интерфейса
Что изменилось?
2. Графические режимы
3. Нумерация цветов
Проект «Цветовая палитра»
Проект «Грани цветового куба»
4. Другие блоки
Блоки с параметрами
Проект «Пароль»
5. Контурные графики
Немного теории
Линии уровня в Скретче
Проект «В ритме радуги»
6. Рекурсия
Проект «Бесконечные стихи»
Графическая рекурсия
Проект «Спираль»
7. Фракталы
Проект «Снежинка»
Проект «Треугольник Серпинского»
8. Рекурсивная процедура получения фрактальных кривых
Проект «Кривая Коха»
Проект «Дерево»
Добавим правдоподобия
9. Фракталы из геометрических фигур
Проект «Множество Кантора»
Проект «Дерево Пифагора»
10. Косвенная рекурсия
Проект «Кривая Гильберта»
Проект «Дракон Хартера–Хейтуэя»
Проект «Дракон»
11. Пошаговый просмотр фракталов
Проект «Дерево»
Проект «Дерево Пифагора»
12. Фантомные объекты
Проект «Фантомная точка»
Проект «Фантомный спрайт»
13. Клонирование
Проект «Лабиринт с потайными ходами»
Проект «Кружево Коха»
Разнообразие узоров
14. Как различить клоны?
Проект «Цветник»
Украшательства
15. Кто больше?
Общий список
Определение максимального цветка
16. Проект «Подводная охота»
Заключение
Коды для самопроверки
Глава 3
Глава 4
Глава 5
Глава 6
Глава 7
Глава 8
Глава 9
Глава 10
Глава 11
Глава 12
Глава 13
Глава 14
Глава 15
Глава 16
Использованные материалы
Текст
                    Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

◀ Ш КО Л А

Ю Н О ГО П Р О Г РА М М И С ТА ▶

Ю. В. Пашковская

SCRATCH 3.0:
ǿǯǻǽȄDzǾǷǵDz
ǼǽǻDzǷǿȈ
Ǻǭ ǯȈǽǻǾǿ

Рабочая тетрадь
для
классов

7•8


Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» ◀ Ш КО Л А Ю Н О ГО П Р О Г РА М М И С ТА Ю. В. Пашковская SCRATCH 3.0: творческие проекты на вырост Рабочая тетрадь для 7-8 классов Электронное издание Под редакцией В. В. Тарапаты Москва Лаборатория знаний 2019 ▶
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» УДК 004.9 ББК 32.97 П22 С е р и я о с н о в а н а в 2018 г. Пашковская Ю. В. П22 Scratch 3.0: творческие проекты на вырост [Электронный ресурс] : рабочая тетрадь для 7–8 классов / Ю. В. Пашковская ; под ред. В. В. Тарапаты. — Эл. изд. — Электрон. текстовые дан. (1 файл pdf : 187 с.). — М. : Лаборатория знаний, 2019. — (Школа юного программиста). — Систем. требования: Adobe Reader XI ; экран 10". ISBN 978-5-00101-650-2 Эта книга является продолжением рабочей тетради Ю. В. Пашковской для 5–6 классов «Творческие проекты в среде Scratch». Она адресована тем, кто уже освоил возможности среды Scratch версий 1.4 и 2.0 и хотел бы научиться создавать более сложные и интересные проекты, используя более широкую палитру инструментов, предоставляемую версией 3.0. Акцент в пособии сделан на использовании подпрограмм и клонировании спрайтов. Книга рассчитана как на юных программистов, самостоятельно осваивающих новое, так и на учителей информатики и математики, стремящихся сделать преподавание более наглядным и занимательным, а проекты, реализованные в Scratch, использовать как иллюстрации к темам: «Графические редакторы», «Графики функций», «Подпрограммы», «Рекурсия», «Фракталы» и др. УДК 004.9 ББК 32.97 Деривативное электронное издание на основе печатного аналога: Scratch 3.0: творческие проекты на вырост : рабочая тетрадь для 7–8 классов / Ю. В. Пашковская ; под ред. В. В. Тарапаты. — М. : Лаборатория знаний, 2019. — 184 с. : ил. — (Школа юного программиста). — ISBN 978-5-00101-191-0. В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации ISBN 978-5-00101-650-2 c Лаборатория знаний, 2019 ○
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Оглавление Вместо предисловия . . . . . . . . . . . . . . . . . . . . . . . . . . . Установка программного обеспечения . . . . . . . . . . . . 1. Обзор интерфейса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Что изменилось? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Графические режимы . . . . . . . . . . . . . . . . . . . . . . . . . 3. Нумерация цветов . . . . . . . . . . . . . . . . . . . . . . . . . . . . Проект «Цветовая палитра» . . . . . . . . . . . . . . . . . . . . Проект «Грани цветового куба» . . . . . . . . . . . . . . . . . 4. Другие блоки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Блоки с параметрами . . . . . . . . . . . . . . . . . . . . . . . . . . Проект «Пароль» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. Контурные графики . . . . . . . . . . . . . . . . . . . . . . . . . . . Немного теории . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Линии уровня в Скретче . . . . . . . . . . . . . . . . . . . . . . . Проект «В ритме радуги» . . . . . . . . . . . . . . . . . . . . . . 6. Рекурсия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Проект «Бесконечные стихи» . . . . . . . . . . . . . . . . . . . Графическая рекурсия . . . . . . . . . . . . . . . . . . . . . . . . . Проект «Спираль» . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7. Фракталы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Проект «Снежинка» . . . . . . . . . . . . . . . . . . . . . . . . . . . Проект «Треугольник Серпинского» . . . . . . . . . . . . . 8. Рекурсивная процедура получения фрактальных кривых . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Проект «Кривая Коха» . . . . . . . . . . . . . . . . . . . . . . . . Проект «Дерево» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Добавим правдоподобия . . . . . . . . . . . . . . . . . . . . . . . . 9. Фракталы из геометрических фигур . . . . . . . . . . . Проект «Множество Кантора» . . . . . . . . . . . . . . . . . . Проект «Дерево Пифагора» . . . . . . . . . . . . . . . . . . . . 10. Косвенная рекурсия . . . . . . . . . . . . . . . . . . . . . . . . . Проект «Кривая Гильберта» . . . . . . . . . . . . . . . . . . . . Проект «Дракон Хартера–Хейтуэя» . . . . . . . . . . . . . Проект «Дракон» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11. Пошаговый просмотр фракталов . . . . . . . . . . . . . Проект «Дерево» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Проект «Дерево Пифагора» . . . . . . . . . . . . . . . . . . . . 5 6 8 12 19 23 23 29 32 36 38 42 42 44 45 49 50 53 54 57 58 61 63 63 65 67 70 70 75 82 84 90 92 97 97 99
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 4 Оглавление 12. Фантомные объекты . . . . . . . . . . . . . . . . . . . . . . . . Проект «Фантомная точка» . . . . . . . . . . . . . . . . . . . Проект «Фантомный спрайт» . . . . . . . . . . . . . . . . . 13. Клонирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Проект «Лабиринт с потайными ходами» . . . . . . . Проект «Кружево Коха» . . . . . . . . . . . . . . . . . . . . . . Разнообразие узоров . . . . . . . . . . . . . . . . . . . . . . . . . . 14. Как различить клоны? . . . . . . . . . . . . . . . . . . . . . . Проект «Цветник» . . . . . . . . . . . . . . . . . . . . . . . . . . . Украшательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15. Кто больше? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Общий список . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Определение максимального цветка . . . . . . . . . . . . 16. Проект «Подводная охота» . . . . . . . . . . . . . . . . . . Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Коды для самопроверки . . . . . . . . . . . . . . . . . . . . . . . . Глава 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Глава 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Использованные материалы . . . . . . . . . . . . . . . . . . . . . 100 100 107 110 110 111 114 117 117 124 126 126 127 132 139 140 140 142 144 145 151 157 159 162 166 167 171 173 176 180 183
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Вместо предисловия Дорогой друг! В рабочей тетради «Творческие задания в среде Scratch» мы сравнивали процесс создания проекта с киноиндустрией. Теперь, если использовать ту же метафору, мы приглашаем тебя переехать в новое, более современное здание киностудии и освоить возможности, которые оно предоставляет своим режиссерам, костюмерам, художникам и монтажникам. Тебе предстоит узнать, как «выглядят» функции, открыть завораживающий своей красотой мир фракталов, научиться создавать клоны… Устанавливать новую версию на компьютер не обязательно — работать в Скретч 3.0 можно прямо в сети Интернет по адресу: http://scratch.mit.edu/. Для работы на компьютере можно там же скачать установочный файл несетевого редактора: https:// scratch.mit.edu/download. Кроме того, с помощью Scratch 3.0 ты сможешь создавать проекты на планшете и воспроизводить их на своем телефоне. Все свои старые проекты возьми с собой. Они тебе скоро понадобятся. Если же ты их не сохранил, не беда! Нужные скрипты ты сможешь найти в разделе «Коды для самопроверки». Там же ты сможешь сравнить коды к проектам, созданные тобой по описанию, с правильными решениями. Но все же старайся не злоупотреблять возможностью подсмотреть ответ и тренируй свою самостоятельность и смекалку. Помни, дорогу осилит идущий!
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Установка программного обеспечения Если ты хочешь работать в Scratch прямо со своего компьютера и не зависеть от подключения к сети Интернет, то можешь скачать и установить несетевой редактор Scratch 3.0. 1. Для этого перейди на сайт https://scratch.mit.edu/ и прокрути страничку в самый низ. Здесь в разделе Поддержка ты найдешь Несетевой редактор. 2. На этой страничке ты должен выбрать свою операционную систему (но, как правило, она определяется автоматически), загрузить установщик нажатием кнопки Скачать и запустить его.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Установка программного обеспечения 3. Установка в новой версии Scratch 3.0 очень проста, после запуска файла остается лишь дождаться завершения инсталляции. 4. По окончании установки Scratch запустится автоматически, а на твоем рабочем столе появится соответствующая иконка для его запуска. Поздравляем! Теперь посмотрим, как изменился интерфейс нашего Scratch. 7
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 1. Обзор интерфейса Заглянем внутрь: все ли знакомые тебе объекты и инструменты ты здесь видишь (рис. 1.1)? 5 6 1 2 3 4 Рис. 1.1 Давай пройдемся по порядку. Найди: 1) сцену; 2) поле — перечень спрайтов; 3) место работы со сценой; 4) кнопки создания спрайтов и фонов; 5) блокикирпичи (команды, конструкции, сенсоры, переменные и др.), из которых собираются скрипты; 6) область создания скриптов. Внимание! Теперь все инструменты располагаются в одном ящике. Убедись в этом, воспользовавшись полосой прокрутки. Чтобы увидеть инструменты нужной категории, нужно щелкнуть сбоку слева по соответствующей кнопке.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 1. Обзор интерфейса 9 Список категорий инструментов несколько изменился: из него исчезло Перо, зато добавились новые — События и Другие блоки. 1. Щелкни по кнопке События. Знакомо ли тебе содержимое этой категории? 2. К какому типу (команды, сенсоры, запускающие скрипты, конструкции, датчики) относится большинство инструментов? 3. Какие еще возможности запускать скрипты ты знаешь? Эти блоки, а также инструменты пера никуда не исчезли — они лишь перенесены в раздел расширений, чтобы упростить базовую палитру блоков. 4. Щелкни по кнопке в левом нижнем углу откроется список расширений (рис. 1.2). Рис. 1.2 —
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 10 1. Обзор интерфейса 5. Добавь на главную панель инструментов команды пера, щелкнув по соответствующему расширению. 6. Добавь на главную панель инструменты расширения Makey Makey. 7. Какой из блоков этого расширения дублирует блок ? 8. Какие возможности запуска спрайтов и фонов добавляет блок ? 9. Рассмотри содержимое других расширений. При активации некоторых расширений ты можешь увидеть следующее сообщение (рис. 1.3). Рис. 1.3 Данные расширения предназначены для работы с робототехникой — LEGO WeDo 2.0, LEGO Boost, LEGO® MINDSTORMS® Education EV3. И следовательно, предварительно надо подключить внешние устройства. Как видишь, Скретч 3.0 теперь способен соединять виртуальный и реальный миры! Но вернемся к исследованию привычных нам инструментов. 10. Определи, какая команда появилась вместо кно- пок , задававших положение спрайта при поворотах (подсказка: ищи ее среди команд в ящике Движение).
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 1. Обзор интерфейса 11. Перетащи в область создания скриптов любую команду, переменную или целую конструкцию (всегда, если и пр.). 12. Щелкни по ней правой кнопкой мыши — в открывшемся списке ты увидишь еще одну новую возможность — добавлять комментарий (рис. 1.4). Рис. 1.4 13. Выбери пункт Добавить комментарий и сделай надпись в открывшемся блокноте (см. рис. 1.4). Комментарий — это пояснения к программе. Комментарии помогают программисту разобраться в чужой программе и не запутаться в собственной, особенно если она велика. Комментарии в Скретче могут отражаться как в развернутом, так и в свернутом виде; режимы отражения переключаются щелчком по треугольнику в левом углу (рис. 1.5). Рис. 1.5 11
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 12 1. Обзор интерфейса При желании комментарий можно удалить, нажав на крестик. А можно создать его копию (дублировать). Созданный дубликат можно склеить с любой другой командой, подтащив его к ней. 14. Исследуй индикаторную панель (она теперь находится под сценой). Какая возможность добавилась, а какая исчезла по сравнению со старой (1.4) версией Скретча? 15. Исследуй кнопки создания спрайтов и фонов (см. рис. 1.1, область 4). Заполни таблицу возможностей добавления новых объектов: Что изменилось? 1. Теперь область работы со скриптами стала называться Код — это, в общем, равнозначное слово в программировании (рис. 1.6). Скрипт обозначает сценарий команд для компьютера, код точно так же представляет собой сценарий, но мы будем использовать второй термин. Рис. 1.6
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Что изменилось? 2. Команды, управляющие стилем вращения спрайта, теперь переместились в параметр Направление спрайта (рис. 1.7). Рис. 1.7 3. Все команды всех групп теперь стали единым прокручивающимся списком. 4. В разных группах команд появились новые команды, а некоторые были просто переименованы. Например, команда Слить из группы Операторы теперь называется Объединить (рис. 1.8). Рис. 1.8 13
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 14 1. Обзор интерфейса 5. Все команды по добавлению и созданию новых спрайтов и сцен (фонов) теперь доступны в раскрывающихся списках в правом нижнем углу (рис. 1.9). Рис. 1.9 6. Обновилась и вкладка Костюмы — теперь она имеет более удобный интерфейс и увеличенное окно рисования (рис. 1.10). Рис. 1.10
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Что изменилось? 7. Многие костюмы были переведены из растрового (точечного) формата в векторный — это значит, что многие объекты исходного рисунка воспринимаются как набор различных фигур, которые намного удобнее редактировать. Помимо этого, улучшилось качество отображения таких рисунков (рис. 1.11). Рис. 1.11 8. Преобразилась и вкладка Звуки. Существенно расширился функционал редактирования звуков — теперь их можно ускорять и замедлять, добавлять эффекты эха и «роботизированного» голоса, переворачивать задом наперед (рис. 1.12). Рис. 1.12 15
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 16 1. Обзор интерфейса 9. Добавлена долгожданная возможность отмены последних действий, если что-то было сделано не так. Для этого достаточно нажать известное сочетание клавиш Ctrl+Z, и последнее действие будет отменено. Это особенно удобно, если случайно было удалено что-то нужное. Существенно обновлена коллекция спрайтов и фонов (рис. 1.13). Теперь спрайты, имеющие костюмы, при наведении на них курсора «оживают». Рис. 1.13 Нельзя обойти молчанием и потери в новой версии Скретча. Прежде всего это невозможность автоматического определения центра костюма. Если в Скретч 1.4 центр костюма созданного спрайта автоматически устанавливался в геометрическом центре точек (см. рис. 1.15), то в Скретч 3.0 (так же как
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Что изменилось? и в Скретч 2.0) центр костюма изначально совпадает с центром рабочей области графического редактора (см. область внутри красного квадрата на рис. 1.14). а б Рис. 1.14 Передвинуть центр костюма несложно, но трудно на глаз определить геометрический центр точек. Поскольку в некоторых проектах нам это будет нужно, придется возвращаться к инструментам старой версии Скретча… 1. Представь себе, что оба спрайта, изображенные на рис. 1.14, мы совместим на сцене. Увидим ли мы разницу при выполнении ими следующих команд: а) б) ? ? 2. Проверь свои догадки на компьютере. 3. Выбери любой спрайт из готовой коллекции. 4. Попробуй изменить центр его костюма! Это будет нелегко. Дело в том, что в спрайтах из готовой коллекции центр сцены оказывается спрятанным под костюмом. 5. Чтобы его разглядеть, перемести костюм в сторону от центра. 17
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 1. Обзор интерфейса 18 6. Затем увеличь изображение до появления фоновой клетки. Центр сцены будет помечен знаком мишени (рис. 1.15). Рис. 1.15 7. Чтобы изменить центр костюма спрайта, двигай костюм относительно отмеченного центра сцены! 8. Воспользуйся любой из команд пункта 1, чтобы убедиться в том, что центр костюма теперь действительно изменен. Еще одна потеря — это невозможность определить название открытого проекта. В Скретч 1.4 и Скретч 2.0 такая возможность была (рис. 1.16, соответственно а и б). а б Рис. 1.16 Остальные потери менее существенные, поскольку их можно восполнить с помощью других инструментов. Укажем некоторые: 1) возможность быстрого определения координат курсора: они исчезли с индикаторной панели; 2) возможность быстро изменить размер спрайта (исчезли стрелки ). 9. Каким образом можно отслеживать координаты курсора? 10. Какая команда устанавливает размер спрайта?
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 2. Графические режимы Возможно, ты уже успел обратить внимание на то, что во вкладках Костюмы и Фоны появилась кнопка с надписью «Конвертировать в растровую графику» (рис. 2.1а). Если же по ней щелкнуть, то вместо нее появится надпись «Конвертировать в векторную графику» (см. рис. 2.1б). а б Рис. 2.1 Растровый режим — это такой способ рисования, при котором изображение запоминается в памяти компьютера как набор окрашенных точек, называемых пикселями. Именно в таком режиме ты рисовал в Скретч 1.4, а также в графическом редакторе Paint. А в векторном режиме изображение складывается и хранится как набор определенных геометрических фигур (примитивов). 1. Чтобы понять разницу, открой графический редактор, убедись, что активен растровый режим, и нарисуй две пересекающиеся окружности (рис. 2.2). Рис. 2.2 На сколько частей они делят плоскость? 2. Раскрась все части в разные цвета. Сохрани это изображение.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 20 2. Графические режимы 3. А теперь создай новое изображение и активируй векторный режим, нажав кнопку Конвертировать в векторную графику. Снова нарисуй две пересекающиеся окружности и закрась все возможные области. Сколько цветов палитры тебе понадобилось? 4. Выбери инструмент Стрелка на панели инструментов (при наведении на нее курсора всплывает надпись Выбрать). Этот инструмент есть только в векторном режиме. Он позволяет из всего рисунка выбрать отдельный графический объект. 5. Щелкни по одному из кругов и перетащи его в другое место. Внимание! В растровом режиме такое растаскивание на объекты невозможно. 6. Чтобы рисунок вновь стал единым и неделимым на составные части, перейди в растровый режим. Убедись, что теперь круги нельзя разъединить. Каковы же достоинства векторного режима? В нем есть такая возможность, как изменение формы графического объекта — инструмент . Он позволяет мягко изменять контуры выбранного графического объекта, потянув за любую точку его контура. На рисунке показаны последовательные стадии работы с инструментом Изменение формы — выделение объекта, выделение точки на контуре, изменение формы объекта (рис. 2.3). Рис. 2.3 Этот процесс напоминает лепку из теста — настолько графические объекты оказываются податливы и пластичны!
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 2. Графические режимы С помощью инструментов и можно поменять порядок расположения объектов (рис. 2.4). Рис. 2.4 7. Как ты думаешь, в каком редакторе был создан рис. 2.5? Рис. 2.5 8. Создай проект, аналогичный проекту «Бегущий человек» или «Девочка, прыгающая через скакалку», используя для создания костюмов векторный редактор. 9. Сохрани проект (Сохранить как) в отдельную папку для работ, созданных в версии 3.0. Внимание! Проекты, созданные в новой версии Скретча, имеют расширение *.sb3 и не читаются в старой версии. Поэтому, когда будешь делать дубликаты старых проектов, убедись, что ты сохраняешь их с новым расширением, а не записываешь поверх старых. 21
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 22 2. Графические режимы Вопросы 1. К какому разделу (Движение, Внешность, Контроль и т. п.) относятся команды Скретча, которые позволяют работать с графикой? 2. Какая команда играет роль ластика? 3. Какая команда определяет толщину оставляемого спрайтом следа? 4. Какие команды задают цвет следа?
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 3. Нумерация цветов Правильный ответ на последний вопрос — две команды: и . Если с первой командой все понятно, то со второй надо разобраться: y какой цвет соответствует какому числу; y в каком диапазоне допустимы значения параметра? Чтобы ответить на эти вопросы, создадим проект, в котором будем варьировать значение параметра и наблюдать за результатом, рисуя полоски разных цветов. Проект «Цветовая палитра» 1. Создай спрайт-рисовальщик. Вид его не важен — его сразу можно спрятать. 2. Задай начальное состояние проекта: y рисовальщик находится в верхнем левом углу; y его направление — направо; y размер оставляемого следа — 10; y начальное значение параметра команды установить цвет пера равно нулю. 3. Организуй 10-кратное повторение следующей последовательности команд: y идти 200 шагов, оставляя след; y вернуться в начало линии; y спуститься на 10 шагов, не оставляя следа; y увеличить цвет пера на 10. 4. Запусти проект. Если код составлен верно, на экране должна получиться такая картинка, как на рис. 3.1. Рис. 3.1
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 24 3. Нумерация цветов 5. Определи по коду (п. 3) и рис. 3.1, какому номеру соответствует: y красный цвет? y желтый? y голубой? Но, может, это еще не вся палитра? Чтобы это проверить, нужно увеличить число повторений (см. п. 3). Однако разноцветных полос может оказаться так много, что они все не поместятся на экран! 6. Каков размер экрана по вертикали в пикселях? Поскольку рисовальщику каждый раз нужно смещаться вниз на то же количество шагов, что и толщина рисуемой им полосы, нам для удобства подбора нужного количества полос стоит ввести в код переменную, задающую толщину полос. 7. Создай переменную шаг. 8. Выведи ее на экран в виде рычажка, установив максимум, равный 10. 9. Замени параметры в командах , и на переменную шаг или выражение с переменной шаг. 10. Замени число повторений в коде для рисовальщика на выражение с переменной шаг, исходя из тех соображений, что все полосы должны уместиться на экране (см. ответ в п. 6). 11. Варьируя значение переменной шаг, получи полную палитру цветов. Признаком полноты является либо отсутствие цвета после достижения параметром своего конечного значения, либо его неизменность, либо повторение уже нарисованных цветов. 12. Какой признак обнаружил ты? 13. Какой диапазон значений параметра в команде установить цвет пера является достаточным? Такая организация цветов палитры, которая изображена на рис. 3.2а, называется циклической или периодической.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Цветовая палитра» а б в Рис. 3.2 Поскольку красный цвет, с которого началась наша палитра, повторился через 100 номеров, период палитры цветов в Скретче 3.0 равен 100. Зная это, диапазон номеров палитры можно сократить (см. рис. 3.2б). 14. Максимально уменьши значение переменной шаг, чтобы получить более плавные цветовые переходы в палитре (рис. 3.2в). Внимание! В нашей палитре не оказалось ни белого, ни черного цвета. 15. Щелкни по треугольнику рядом со словом цвет в команде установить перо и рассмотри содержимое выпавшего списка (рис. 3.3). Рис. 3.3 25
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 26 3. Нумерация цветов Как видишь, в Скретч 3.0 перо характеризуется не только цветом, но и насыщенностью, яркостью и прозрачностью. 16. Чтобы разобраться в этих характеристиках, добавь в начало нашего кода три команды (рис. 3.4). Рис. 3.4 17. Варьируя величину прозрачности, определи, при каком значении изображение максимально непрозрачно: ; при каком вообще исчезает: . 18. Установи максимальную непрозрачность. Теперь исследуем, за что отвечает насыщенность. 19. Замени в коде команду изменить цвет пера на изменить насыщенность пера. 20. Задай начальное значение насыщенности, равное 0. 21. Запусти код. В зависимости от того, какой у рисовальщика был установлен цвет пера, картинка должна получиться полутоновой, т. е. из оттенков одного цвета (рис. 3.5). Рис. 3.5
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Цветовая палитра» Как видно из рис. 3.5, при нулевой насыщенности (верхний край палитры, помеченный красной точкой) все цвета становятся белыми. Как будто их залил слепящий солнечный свет! Если представить себе художника, смешивающего краски, то насыщенность характеризует степень примеси к основному тону белого цвета. Варьируя значение переменной шаг, определи: а) какому числу соответствует самый темный оттенок? б) является ли палитра насыщенности циклической? Теперь можно составить соответствие номеров и насыщенности цветового оттенка (рис. 3.6). Рис. 3.6 Теперь посмотрим, на что влияет яркость. 22. Замени в коде команду изменить насыщенность пера на изменить яркость пера. 23. Установи следующие начальные значения: а) для насыщенности — 100; б) для яркости — 0. 24. Запусти код. 27
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 28 3. Нумерация цветов Как и в случае с насыщенностью, картинка должна получиться полутоновой (рис. 3.7). Рис. 3.7 Подобно тому как нулевая насыщенность дает белый цвет, так нулевая яркость дает черный (см. рис. 3.7). Таким образом, яркость может характеризовать степень освещенности и / или степень примеси к основному тону черной краски. А нумерованная таблица яркости выглядит так, как показано на рис. 3.8. Рис. 3.8 25. Сколько всего различных оттенков в палитре Скретча?
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Грани цветового куба» Чтобы представить себе все многообразие цветовых оттенков, нам пришлось бы построить куб со стороной 100, в котором параллельные грани соответствовали бы крайним значениям одной характеристики (рис. 3.9). Рис. 3.9 Но поскольку Скретч не дает работать с тремя измерениями, мы можем получить изображения лишь отдельных граней. Для этого для одного цвета будем менять и насыщенность, и яркость. Проект «Грани цветового куба» 1. Создай копию проекта «Цветовая палитра». 2. Замени команду в цикле, организу- ющем переход от одной цветовой полосы к другой, на еще один — внутренний — цикл, перед которым обнуляется яркость пера (рис. 3.10). 29
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 30 3. Нумерация цветов Рис. 3.10 Таким образом, внутри каждой полосы фиксированной насыщенности каждые два шага меняется яркость. 3. Запусти проект. 4. Подбери такое значение переменной шаг, чтобы вся палитра уместилась на экране Скретча. 5. Если код составлен верно, то в зависимости от цветового оттенка мы увидим тот или иной срез нашего цветового куба (рис. 3.11). Рис. 3.11
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Грани цветового куба» 6. Измени код так, чтобы получить изображение грани, соответствующей: a) максимальной насыщенности; б) максимальной яркости. Если код составлен верно, то у тебя должны получиться картинки, изображающие соответственно переднюю (рис. 3.12а) и верхнюю (рис. 3.12б) грани цветового куба (см. рис. 3.9). а б Рис. 3.12 Таким образом, каждой точке внутри цветового куба соответствует свой цветовой оттенок, характеризующийся тремя числами — цветом, яркостью и насыщенностью. Такое представление цветового оттенка в виде набора чисел называется цветовой моделью. 7. Как ты думаешь, почему такой параметр, как прозрачность, не является характеристикой цветового оттенка? Что она характеризует? Цветовых моделей (т. е. способов сопоставления цветовых оттенков разным числовым наборам) существует много. Модель, реализованная в Скретч 3.0, называется HSB (от английских слов Hue — тон, Saturation — насыщенность, Brightness — яркость). Нумерация цветовых оттенков открывает перед нами новые возможности, о которых речь пойдет в главе 5. 31
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 4. Другие блоки А теперь давай посмотрим, какие новые возможности появились в создании кодов! В больших проектах, когда коды, описывающие поведение спрайта, становятся очень громоздкими, бывает полезно заменять отдельные группы команд их кратким описанием. 1. Открой созданную ранее игру «Кот в лабиринте». Если ты уже подзабыл, о чем она, то попробуй вспомнить по следующему коду (рис. 4.1). Рис. 4.1 Не правда ли, все сразу стало понятно? Ну или почти все. Однако ты можешь возразить, что такой код не писал и не мог написать, потому что розовых блоков в Скретче 1.4 попросту не было! А теперь такая возможность появилась! Команды розового цвета можно создавать самим. 2. Для этого перейди в раздел Другие блоки и нажми кнопку Создать блок. Откроется окно, как на рис. 4.2.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 4. Другие блоки Рис. 4.2 3. Придумай ему название, впиши его в окошко блока и нажми ОК. Если ты все сделал правильно, то в разделе Другие блоки появится новая команда, а в области скриптов — новый запускающий блок (рис. 4.3). Рис. 4.3 Чтобы новую команду (блок) можно было использовать, ее содержание нужно определить (объяснить). Например, блоки начальное положение и действия на финише могут выглядеть так, как на рис. 4.4. 33
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 34 4. Другие блоки Рис. 4.4 Таким образом, один большой код, описывающий поведение спрайта, заменяется кратким, составленным из имен созданных блоков, но дополняется новыми кодами, описывающими действия спрайта в отдельных ситуациях. Такое представление программы называется ее структурированием, новые блоки — подпрограммами, а код, составленный из имен подпрограмм, будем называть основным. Каждая подпрограмма, так же как и любая команда в Скретче, может быть запущена отдельно, что облегчает поиск ошибок и отладку всего кода. 4. Создай два других блока для проекта «Кот в лабиринте» — управление стрелками и действия при касании стен — самостоятельно. Если это задание вызывает затруднения, обратись к материалам для самопроверки.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 4. Другие блоки 5. Измени код, описывающий действия Кота, используя новые блоки. 6. Проверь, что Кот, как и прежде: а) управляется стрелками; б) взрывается при касании стенок лабиринта; в) награждается, дойдя до финиша. 7. Сохрани проект. Преимущества структурированного кода: y облегчение его чтения и понимания; y возможность многократного использования готовых блоков, в том числе и в кодах других спрайтов; y упрощение внесения изменений в код. 8. Определи проект из созданных тобой ранее, код к которому мог бы выглядеть так, как на рис. 4.5: Рис. 4.5 9. Открой этот проект и преобрази по заданному образцу. 10. Сохрани проект. 35
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 36 4. Другие блоки Блоки с параметрами Добавим в проект возможность изменения скорости передвижения Кота! Поскольку его движение связано с блоком управление стрелками, то и работать мы будем с ним. Чтобы поменять скорость передвижения, нам нужно заменить значение параметра (в данном случае равное 3) во всех командах на новое. Согла- сись, было бы неплохо, чтобы это значение задавалось в одном месте и автоматически менялось везде, где требуется! Что ж, и такая возможность есть в новой версии Скретча! Воспользуемся ею. 1. Открой раздел Другие блоки, щелкни правой кнопкой по созданной команде управление стрелками — откроется возможность ее редактирования. 2. Щелкни по слову Редактировать — снова откроется окно работы с блоком (см. рис. 4.2). 3. Поскольку скорость передвижения — числовой параметр, щелкни по кнопке (рис. 4.6): Рис. 4.6 В блоке управление стрелками появится окошко со словами number or text (рис. 4.7). Рис. 4.7
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Блоки с параметрами 4. Замени слова number or text на слово скорость и щелкни ОК — блок управление стрелками изменит вид (рис. 4.8). Рис. 4.8 В связанной с ним подпрограмме появится новый параметр — скорость (рис. 4.9). Рис. 4.9 5. Вставь блок в окошки всех команд , составляющих подпрограмму управление стрелками, перетягивая его мышкой из заголовка: , а в команде управление стрелками в появившемся окошке впиши какое-нибудь число. 6. Меняя параметр в окошке, убедись, что Кот действительно меняет скорость своего движения. 7. Сохрани проект. Параметр скорость относится к так называемым входным параметрам, потому что передается из основного кода. Входное значение помещается в переменную скорость, которая используется только внутри подпрограммы. Кстати говоря, входной параметр может быть не только числом, но и переменной. Например, команда может выглядеть так:                                             37
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 38 4. Другие блоки Кроме того, входным параметром в блоке может быть как строка, так и логическое выражение (см. рис. 4.2). Покажем это на примере следующего проекта. Проект «Пароль» Представь себе, что тебе надо защитить вход или выход от случайных людей. Обычно в таких случаях на ворота ставят стражу и придумывают пароль: тех, кто его знает, стража пропускает, остальных нет. Ограничим количество попыток назвать верный пароль числом 3. Для этого нам понадобится счетчик попыток. 1. Создай два фона для сцены — закрытые ворота и открытые. Например, такие, как на рис. 4.10. Рис. 4.10 2. Создай переменную пароль. Она будет хранить слово или фразу, которую должен воспроизвести тот, кто желает выйти наружу. Какое? 3. Создай переменную счетчик. 4. Создай блок проверить со строковым параметром слово. 5. Определи блок проверить в соответствии с блок-схемой (рис. 4.11).
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Пароль» Рис. 4.11 6. Как ты думаешь, кто в проекте будет осуществлять проверку пароля? 7. Кому адресована фраза «Открыть ворота!»? 8. Какие команды в Скретче соответствуют фразам «Добро пожаловать!» и «Неверно! Попробуй еще раз!» 9. Создай спрайт Стражник. 10. Создай основной код для Стражника, осуществляющую: 1) задание значения переменной пароль (см. п. 2); 2) задание начального значения переменной счетчик. Какого? 3) трехкратное повторение последовательности команд: y спросить «Пароль?» и ждать; y проверить (ответ). 11. Какую команду надо добавить в основной код — на случай, если все три попытки назвать пароль окажутся неудачными? _____________________________ 39
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 40 4. Другие блоки 12. Добавь в основной код эту команду. 13. Создай два кода для Сцены, один из которых «открывал» бы ворота, а другой «закрывал». Какие сигналы соответствуют разным фонам Сцены? Фон Сигнал Ворота закрыты Ворота открыты 14. Запусти проект и проверь следующее. y Закрыты ли ворота в начале проекта? y Открываются ли ворота, если сразу ввести верный пароль? Останавливается ли проект? Какая команда и в каком коде — основном или в подпрограмме — останавливает проект? y Говорит ли Стражник фразу «Неверно! Попробуй еще раз!», если пароль не верен? y Открываются ли ворота, если ввести верный пароль со второй попытки? А с третьей? y Что говорит Стражник после третьей неверной попытки? y Завершается ли проект после третьей неверной попытки? y Не говорит ли Стражник сразу две взаимоисключающие фразы (например, «Добро пожаловать!» и «Уходи!», «Добро пожаловать!» и «Неверно! Попробуй еще раз!» и т. п.)? 15. Исправь ошибки, если они есть. 16. Сохрани проект. Задания для самостоятельной работы 1. Создай копию проекта «Простой тест» (см. «Скрипты для самопроверки» к главе 4). 2. Внеси в него необходимые изменения, чтобы он приобрел следующий вид (рис. 4.12):
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Пароль» Рис. 4.12 3. Запусти проект и убедись в том, что в нем по-прежнему: y задаются все вопросы из списка вопросы; y верно подсчитывается количество правильных ответов на вопросы теста; в y конце выводится сообщение с результатами теста. 41
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 5. Контурные графики Теперь, когда в наших руках оказался такой полезный инструмент, как другие блоки, покажем его применение в задачах на построение контурных графиков. С контурными графиками ты наверняка сталкивался на уроках географии, когда изучал по карте глубины и высоты местности. Они изображались в виде линий, соединяющих точки с одинаковой абсолютной глубиной или высотой (рис. 5.1). Рис. 5.1 Такие линии называются линиями уровня или изолиниями (от др.-греч. ȚıȠȢ — равный). Встречаются они не только в географии, но и в физике — например, изолинии напряженности магнитного поля, в метеорологии — изотермы (равной температуры), изобары (равного давления), изогиеты (одинакового выпадения атмосферных осадков), в биологии — изоанты (равные сроки зацветания каких-либо растений), а также в математике. Немного теории В математике линии уровня строят для величины, которая зависит от двух переменных. Такую зависимость называют функцией и обозначают латинской буквой, указывая в скобках, от каких переменных зависит
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Немного теории вычисляемое значение. Например, так: f(x, y). Читают эту запись так: «функция f от х и у». Функциями от двух переменных являются, к примеру, следующие: а) f(x,y) = x + y; б) g(x,y) = x2 + y2; в) v(x,y) = |x – y| и т. п. Чтобы построить линию уровня функции, нужно приравнять ее правую часть какому-нибудь числу, называемому константой. В отличие от переменных значение константы не меняется. Так, если взять в качестве примера функцию f(x, y) = = x + y, то ее линиями уровня будут множества точек, задаваемые уравнениями: 1) x + y = 0; 2) x + y = 1; 3) x + y = –1 и т. д. Линий уровня можно построить бесконечно много — для каждой задаваемой константы. 1. Запиши три пары чисел (х, у), удовлетворяющие уравнению x + y = 0: 1) 2) 3) 2. Как ты думаешь, как выглядит совокупность точек нулевой линии, т. е. описываемых уравнением x + y = 0? 3. Запиши три пары чисел (х, у), удовлетворяющие уравнению x + y = 1: 1) 2) 3) 4. А как выглядит совокупность точек первой линии, т. е. описываемых уравнением x + y = 1? 5. Могут ли эти линии пересекаться? Ответ обоснуй: Если мы соединим на плоскости точки каждого набора, то получим контурный график функции. 43
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 44 5. Контурные графики Линии уровня в Скретче Скретч дает возможность смоделировать подобную зависимость: значение исследуемой функции можно связать с положением спрайта на сцене, которое, как известно, определяется двумя координатами. Перемещая спрайт, мы сможем определить значение исследуемой функции для любой точки на сцене. Таких точек бесконечно много, поэтому мы будем заполнять сцену случайным образом: чем в большем количестве точек побывает спрайт, тем точнее будет полученный «рельеф». Как мы видели в главе 3, каждому полученному числу можно сопоставить один из цветов палитры (см. рис. 3.2б). Зная это, можно связать вычисленное значение (величину исследуемой функции) с номером цвета пера — с помощью команды . В ре- зультате точки, относящиеся к одной линии уровня, будут окрашиваться одним и тем же цветом. Например, точки нулевой линии окрасятся в красный цвет, двадцатой — в оранжевый и т. д. А в целом мы получим набор разноцветных линий, которые и образуют контурный график функции. Рис. 5.2
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «В ритме радуги» Основной код для спрайта может выглядеть так, как на рис. 5.2. Теперь пора перейти от теории к практике! Проект «В ритме радуги» 1. Создай спрайт-рисовальщик. Его вид может быть любым. 2. Создай три новых блока — начальное положение, случайное положение и оставить след от x и у. Внимание! В основном коде команда оставить след будет зависеть от фактического положения спрайта (положение х и положение у), а в описании нового блока мы опишем эту зависимость, используя формальные параметры — x и у (рис. 5.3). Рис. 5.3 3. Создай основной код (см. рис. 5.2). 4. Определи блок начальное положение в соответствии со следующими требованиями: а) сцена должна быть очищена от предыдущих рисунков; б) рисовальщик невидим; в) размер пера равен 4. 5. Определи блок случайное положение по следующему описанию: а) рисовальщик не оставляет след; б) переходит в случайную точку сцены (команда идти в точку). Каким должны быть диапазоны случайных чисел? Для х: Для у: 45
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 46 5. Контурные графики 6. Определи блок оставить след от x и у, используя следующие команды: а) установить цвет пера; б) опустить перо. Теперь осталось задать зависимость цвета пера от переменных х и у. Рассмотрим зависимость, которая описывается функцией f(x, y) = x + y. 7. Свяжи значение функции с цветом пера, вставив в окно команды установить цвет пера оператор х + у (рис. 5.4). Рис. 5.4 8. Запусти проект. 9. Какой из приведенных на рис. 5.5 рисунков получился у тебя? 1 2 3 4 5 6 7 8 9 Рис. 5.5
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «В ритме радуги» 10. Попробуй определить соответствие контурных графиков, представленных на рис. 5.5, следующим функциям: 1) f(x, y) = x + y 6) f(x, y) = y x 2) f(x, y) = y – 100 7) f(x, y) = 500 ˜ x y 3) f(x, y) = |x| + |y| 8) f(x, y) = x2 + y2 4) f(x, y) = |x + y| 9) f(x, y) = 1 ˜ x ˜ y 2 200 5) f(x, y) = x 11. Графики каких функций отличаются от прямых линий? Как эти функции можно отличить от остальных, перечисленных в п. 10? 12. Обрати внимание на функцию под номером 7! Как ты думаешь, на каком из графиков и каким образом отражается тот факт, что на ноль делить нельзя? 13. Проверь свои догадки, изменяя оператор внутри команды на соответствующие функциям выражения. Множители 1 1 , 500 и 100 200 в функциях под номерами 2, 7 и 9 являются масштабирующими коэффициентами. Они позволяют в одном случае уменьшить (ужать) рисунок, который не умещается на сцене Скретча, в другом, наоборот, увеличить (растянуть) небольшой фрагмент контурного графика до размеров сцены. 14. Проверь, как изменятся графики функций, если этих множителей не будет? 15. Какое условие нужно добавить в код рисования функции под номером 7, чтобы избежать деления на ноль? 47
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 48 5. Контурные графики 16. Если ты уже знаком с функциями синус и косинус, построй контурные графики для функций: а) f(x, y) = 200 ˜ (cos(x) + sin(y)); б) f(x, y) = 200 ˜ sin(x) ˜ cos(y). 17. Чем эти графики качественно отличаются от представленных на рис. 5.5? Задание для самостоятельной работы Измени код получения контурных графиков так, чтобы точки, в которых спрайт-рисовальщик оставляет след, генерировались не случайным образом, а в результате последовательного перебора — от левого угла сцены к правому, сверху вниз — с некоторым шагом.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 6. Рекурсия Возможность создания собственных блоков обнаруживает интересную особенность: в описании блока в качестве одной из команд можно использовать сам описываемый блок. Программисты в таких случаях говорят: «Программа вызывает саму себя». Такая организация кода называется рекурсией. Рекурсию можно встретить не только в программировании. Так, например, в стихотворении Андрея Усачева описание жучка дается через описание того же жучка: Шел по улице жучок В модном пиджачке. На груди блестел значок, А на том значке Нарисован был жучок, Тоже в пиджачке. И на нем висел значок… А на том значке Был еще один жучок… Если бы иллюстрация к стихотворению позволяла увеличивать детали, то мы бы увидели графическую рекурсию. Рекурсию можно организовать с помощью двух зеркал, поместив между ними какой-нибудь объект (рис. 6.1). А теперь вернемся к Скретчу. Создадим проект, в котором будет бесконечно повторяться шуточное стихотворение Романа Сефа: Рис. 6.1
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 50 6. Рекурсия Кто Тот Кто Тот Кто Тот вечно хнычет и скучает, ничего не замечает. ничего не замечает, ничего не изучает. ничего не изучает, вечно хнычет и скучает… Проект «Бесконечные стихи» 1. Создай спрайт-рассказчик. 2. Создай новый блок — стихотворение. y Если у тебя есть возможность записать стихотворение через микрофон (вкладка Звуки), то создай звуковую запись. y Если такой возможности нет, то воспользуйся командами говорить в течение 2 секунд и впиши в них стихотворение — по строчке в каждую. 3. Определи блок стихотворение по образцу (рис. 6.2). Рис. 6.2 4. Создай основной код, запускающийся по флажку, из одной-единственной команды — стихотворение. 5. Запусти проект. Сколько раз повторился текст стихотворения? 6. Как иначе можно было составить код, чтобы результат был таким же? Рекурсия может быть и конечной. Для этого достаточно добавить в проект условие прекращения рекур-
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Бесконечные стихи» сии. Например, такое: пока время, прошедшее с начала запуска кода, меньше 20 с: . Но можно поступить иначе. 9. Измени блок стихотворение так, чтобы в нем появился числовой параметр — количество. Он будет отвечать за нужное нам число повторений куплета. 10. Код, определяющий блок стихотворение, измени следующим образом (рис. 6.3). Рис. 6.3 11. В основном коде задай число повторений куплета (параметр в команде стихотворение), равное 2. Чтобы понять, как работает такой код, вспомни, как устроена матрешка (рис. 6.4). Если команду стихотворение (n) раз представить себе как извлечение и сбор n-й матрешки, то рекурсия будет построена по следующему правилу: чтобы извлечь k-ю матрешку, надо сначала извлечь k – 1-ю… (Здесь счет идет от внешней матрешки к внутренней.) Рис. 6.4 51
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 52 6. Рекурсия А работа кода выглядит так: проверяется истинность условия y сначала (есть ли внешняя по отношению к y y y y y данной матрешке?); если оно истинно, то рассмотрению подвергается боyльшая по размеру, но меньшая по номеру матрешка; и так происходит до тех пор, пока дело не доходит до первой матрешки; после этого первая матрешка вскрывается, ее содержимое извлекается, а сама матрешка собирается в отдельную игрушку; освободившаяся от оболочки матрешка тоже вскрывается; и так до тех пор, пока очередь не дойдет до исходной — n-й матрешки. Внимание! Блок можно было бы опреде- лить и так (рис. 6.5). Рис. 6.5 Другими словами, сначала можно играть звук, а потом вызывать команду стихотворение. Такая рекурсия называется хвостовой. Если воспользоваться аналогией с матрешками, то хвостовая рекурсия означает иной порядок подсчета
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Графическая рекурсия матрешек: внешняя матрешка считается n-й, а последняя извлекаемая матрешка — первой, а также иную проверку: не достигла ли рекурсия своего дна (количество = 0)? Количество вложений в рекурсии называется ее глубиной. 12. Сохрани проект в любой версии (с прямой или хвостовой рекурсией). 13. Как ты думаешь, какая рекурсия — прямая или хвостовая — выполняется быстрее? 14. Какие еще стихи, содержащие рекурсию, ты знаешь? Графическая рекурсия Рекурсию применяют и в геометрии (рис. 6.6). Рис. 6.6 Рассмотрим, к примеру, прямоугольную спираль (рис. 6.7). Рис. 6.7 53
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 54 6. Рекурсия Ее можно представить себе как многократное повторение одного и того же элемента — прямого угла, увеличивающегося в размере (рис. 6.8). Рис. 6.8 Напрашивается решение: создать блок, рисующий исходный элемент. Поскольку элемент меняется в размере, блок должен иметь числовой параметр, определяющий длину стороны. При этом описание блока нужно организовать как хвостовую рекурсию, каждый раз увеличивая входной параметр. Проект «Спираль» 1. Создай спрайт-рисовальщик. 2. Создай блок элемент с числовым параметром длина. 3. Определи блок элемент следующим образом: 1) нарисуй прямой угол со стороной, равной параметру длина. Какие ты использовал команды? а) б) в) г) 2) вызови команду элемент с параметром длина + + шаг; 3) вложи получившийся код в конструкцию если; 4) задай условие прекращения рекурсии из тех соображений, чтобы последний элемент не превосходил размер сцены. Что это за условие?
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Спираль» Шаг можно задать в виде числа (константы), а можно в виде переменной, значение которой будет задаваться вне блока элемент. 4. Создай переменную шаг. 5. Создай блок начальное положение. 6. Определи блок начальное положение: y задать шаг — например, равный 5; y исходное положение — центр сцены; y рисовальщик невидим; y очистить сцену от предыдущей графики; y опустить перо. 7. Создай основной код, состоящий из команд: y начальное положение; y элемент (10). 8. Запусти проект для устранения недочетов. 9. Поменяй значение переменной шаг. 10. Сохрани проект. Задания для самостоятельной работы 1. Добавь в проект «Спираль» красоты, связав цвет пера с параметром длина (рис. 6.9). Рис. 6.9 В какой блок нужно вставить эту команду? 2. С помощью хвостовой рекурсии элемента «квадрат» построй следующие рисунки (рис. 6.10). а б в Рис. 6.10 55
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 56 6. Рекурсия Подсказка: перед построением очередного элемента в вариантах «б» и «в» необходимо изменить положение спрайта-рисовальщика. 3. Если это задание оказалось для тебя легким, попробуй построить варианты посложнее (рис. 6.11). а б в Рис. 6.11 4. Определи и нарисуй исходный элемент изображения, показанного на рис. 6.12. Рис. 6.12 5. Составь код рисования этой картинки, действуя по алгоритму: а) создать блок рисования исходного элемента с числовым параметром — длиной шага; б) повторить код рисования исходного элемента с рекурсивным вызовом этого же кода с уменьшенной длиной шага; в) организовать повторение кода до тех пор, пока длина шага не окажется меньше заданной величины.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 7. Фракталы Представь себе, что весь пиджак на жучкеy из стихотворения Усачева усеян значками, на которых изображен жучок! Если бы мы стали описывать элемент Жучок с помощью блоков Скретча, то это выглядело бы примерно так, как на рис. 7.1. Рис. 7.1 Здесь число 3 в блоках означает, что код приведен для случая, когда на пиджаке жучка помещается всего три значка, а размер жучка на значке соответственно всего в 3 раза меньше оригинала. Структура, задаваемая подобным образом, называется фракталом. Если определить фрактал точнее, то это бесконечно самоподобная геометрическая фигура, каждый фрагмент которой повторяется при уменьшении масштаба. В рассматриваемом нами случае части, из которых состоит жучок (его собственные изображения), — бесконечно уменьшаются. Само слово фрактал происходит от латинского fractus, что означает раздробленный.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 58 7. Фракталы Фракталы встречаются повсюду: в растительном и животном мире, в ландшафте и рельефе, в микрои макромире. Если мы рассмотрим ветку, то от нее, как от ствола дерева, отходят более мелкие ветки, от которых, в свою очередь, растут еще более мелкие веточки. Таким образом, ветка подобна дереву. А дерево является фракталом. Человеческий организм также состоит из множества фракталоподобных структур: кровеносная система, мышцы, бронхи и т. д. Создадим и мы свой фрактал — на примере строения снежинки. Проект «Снежинка» Как известно, снежинка имеет шесть лучей. 1. Создай спрайт-рисовальщик. 2. Создай блок снежинка с числовым параметром размер. 3. Определи блок снежинка как повторение (рис. 7.2). Рис. 7.2 4. Вставь нужные числа в пустые окошки команд. Что это за числа? 5. Создай блок начальное положение. 6. Определи его из следующих соображений: y рисовальщик должен оставлять след; y рисунок должен начинаться из центра сцены;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Снежинка» y рисовальщик должен быть невидимым; y сцена должна быть очищена от предыдущей графики. 7. Создай основной код, состоящий из двух команд: y начальное положение; y снежинка. 8. Задай в команде снежинка значение параметра, например 90. 9. Запусти проект и убедись, что рисовальщик действительно рисует снежинку (см. рис. 7.3а). а б в Рис. 7.3 10. Если это не так, найди ошибки в коде и устрани их. Применим к блоку снежинка рекурсию. Для этого из каждого луча нарисованной снежинки построим новую снежинку — в 3 раза меньшую исходной. 11. Для этого повтори исходный алгоритм рисования снежинки, добавив в него вызов элемента снежинка (рис. 7.4). Рис. 7.4 59
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 60 7. Фракталы 12. Соедини обе конструкции (см. п. 3 и 11). Теперь осталось только определить глубину рекурсии. Она зависит от размера самого маленького элемента. 13. Каким должно быть ограничение на параметр размер, чтобы выполнение кода прекратилось после второго рекурсивного вызова (см. рис. 7.3б)? 14. Проверь свое утверждение, вложив тело блока снежинка в конструкцию если с соответствующим условием и запустив проект. 15. Каким должно быть ограничение на параметр размер, чтобы выполнение кода прекратилось после третьего рекурсивного вызова (см. рис. 7.3в)? 16. А после 4-го? 17. Поменяй условие в блоке снежинка в соответствии с ответом на вопрос п. 15 и проверь себя, запустив проект. 18. Свяжи цвет пера с размером снежинки (см. п. 1 заданий к главе 7), как мы это делали раньше. 19. Сохрани проект. 20.* Попробуй догадаться, как нужно изменить описание блока снежинка, чтобы в центре каждой снежинки рисовалась еще одна снежинка меньшего размера (рис. 7.5). Рис. 7.5 В центре фрактальной фигуры может быть любой геометрический элемент. Построим еще один фрактал, в центре которого — треугольник (см. рис. 7.6).
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Треугольник Серпинского» 61 Рис. 7.6 Такой фрактал называется треугольником Серпинского. Идея его построения такова: y исходная фигура — правильный треугольник; y из каждой его вершины строится треугольник со стороной, в 2 раза меньшей исходной… Проект «Треугольник Серпинского» 1. Создай спрайт-рисовальщик. 2. Создай блок треугольник с числовым параметром размер. 3. Определи блок треугольник из следующих соображений. y Сначала рисуется треугольник со стороной, равной значению параметра размер. Чему равен угол поворота? y Затем рисуется тот же треугольник, но в каждой его вершине вызывается команда . 4. Обе конструкции вставь в условие окончания рекурсии. Например, такое: . 5. Создай блок начальные условия, удовлетворяющий следующему описанию: y рисовальщик невидимый; y сцена должна быть очищена от графики; y рисунок должен начинаться в верхнем левом углу;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 62 7. Фракталы y первая линия должна быть нарисована горизонтально вправо; y рисовальщик оставляет след. 6. Создай основной код, состоящий из двух команд: y начальные условия; y треугольник (270). 7. Запусти проект и устрани недочеты, если они есть. 8. Сохрани проект. Задания для самостоятельной работы 1. Обобщи проект «Треугольник Серпинского» для любого правильного многоугольника, введя в него переменную n, отвечающую за количество сторон многоугольника. 2. Варьируя значения переменной n, получи следующие рисунки (рис. 7.7). Рис. 7.7 3. Как ты думаешь, что получится, если в качестве условия, ограничивающего параметр размер, задать такое: ? 4. Проверь свою догадку на компьютере. 5. Построй фрактал из буквы Н (рис. 7.8). Рис. 7.8
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 8. Рекурсивная процедура получения фрактальных кривых Геометрические фракталы совсем не обязательно должны быть правильными и симметричными, как рассмотренные нами в предыдущей главе. Генератором фрактала может стать любая фигура, в том числе ломаная, а способом построения — повторение на каждом отрезке этой ломаной некой геометрической фигуры. Рассмотрим процедуру получения фрактальных кривых на примерах. Проект «Кривая Коха» Идея: взять отрезок, разделить его на три части, на средней из которых построить прямоугольную ломаную (рис. 8.1). Рис. 8.1 На втором шаге каждое звено получившейся фигуры нужно точно так же разделить на три части, на средних из которых построить свои ломаные (рис. 8.2). Рис. 8.2
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 64 8. Рекурсивная процедура получения фрактальных кривых Третий–пятый шаги будут выглядеть так, как на рис. 8.3. Рис. 8.3 1. Создай спрайт-рисовальщик. 2. Создай блок элемент с числовым параметром длина. 3. Определи этот элемент так, чтобы в результате его работы получалась фигура, изображенная на рис. 8.1, с длиной каждого звена, равной значению параметра длина. 4. Создай запускающий блок, задающий начальное положение спрайту-рисовальщику, с учетом следующих соображений: y рисовальщик невидим; y сцена должна быть очищена от предшествующих рисунков; y вызов блока элемент — к примеру, с параметром, равным 100. 5. Запусти проект и убедись, что на сцене появляется фигура, изображенная на рис. 8.1. 6. Если это не так, найди ошибки в коде и устрани их. Внимание! Перед тем как применить рекурсивный вызов блока, нужно вернуть спрайт-рисовальщик в исходное положение, т. е. перенести его в начало фигуры! 7. Добавь к командам блока элемент такие команды, чтобы спрайт-рисовальщик: y не оставлял след; y вернулся в исходное положение. 8. Чему равно расстояние (в длинах) между начальной и конечной точками ломаной? 9. Скопируй получившиеся команды блока элемент — они нам понадобятся для рекурсивного вызова.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Дерево» 10. Вставь в скопированном фрагменте кода перед каждой командой вызов блока элемент, уменьшив параметр длина в 3 раза. 11. Добавь получившийся код к командам блока элемент. 12. Вложи содержимое блока элемент в конструкцию с условием, ограничивающим уменьшение параметра длина. 13. Каким должно быть это ограничение, чтобы код остановился после второго рекурсивного вызова? 14. Задай это условие, запусти проект и сравни получившуюся фигуру с изображенной на рис. 8.2. 15. Если рисунок получился другим, найди ошибки в коде и устрани их. 16. Добавь в код связь цвета пера с параметром длина. 17. Меняя ограничение на параметр длина, получи рисунки, изображенные на рис. 8.3. 18. Сохрани проект. Проект «Дерево» Фрактал «Дерево» порождается также ломаной-генератором, звенья которой расположены под некоторым острым углом. На следующем шаге на каждом конце ломаной строятся ее уменьшенные на некоторое значение копии — так, чтобы продолжение исходного отрезка являлось биссектрисой угла, образуемого «ветками» (рис. 8.4). Рис. 8.4 65
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 66 8. Рекурсивная процедура получения фрактальных кривых Третий, четвертый и девятый шаги выглядят, соответственно, так, как на рис. 8.5. Рис. 8.5 Не правда ли, похоже на процесс выращивания настоящего дерева? 1. Создай копию предыдущего проекта. Ею удобно воспользоваться, поскольку нам снова понадобится и невидимый спрайт-рисовальщик, и блок элемент с числовым параметром длина. 2. Измени в запускающем блоке положение спрайтарисовальщика: y внизу и посередине сцены; y направление — вверх. 3. Удали из блока элемент содержимое. 4. Поскольку рисунок должен получиться симметричным относительно вертикали, определи блок элемент следующим образом: y повернуть на некий угол (например, на 20q по часовой стрелке); y пройти количество шагов, равное параметру длина; y вернуться в исходную точку; y повернуть на удвоенный угол против часовой стрелки (в нашем примере — на 40q); y пройти количество шагов, равное параметру длина; y вернуться в исходную точку; y повернуться по часовой стрелке так, чтобы оказаться в исходном положении. Какой угол поворота задашь ты?
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Добавим правдоподобия 5. Запусти проект и проверь: получилась ли исходная ветка-генератор, изображенная на рис. 8.1? Если нет, найди ошибки и исправь их. 6. Скопируй содержимое блока элемент. 7. Создай переменную шаг. 8. Задай в запускающем блоке значение переменной шаг — например, 5. 9. Добавь в скопированном фрагменте после каждой команды вызов блока элемент с умень- шенным на значение переменной шаг параметром длина. 10. Соедини обе части блока элемент. 11. Вложи содержимое блока элемент в конструкцию с условием, ограничивающим уменьшение параметра длина. 12. Запусти проект и, варьируя длину исходной ветки, шаг ее уменьшения и число, ограничивающее рост «дерева», подбери подходящие значения, чтобы получившийся рисунок целиком умещался на экране, но был как можно более ветвистым. Добавим правдоподобия В природе ветки дерева, раздваиваясь, делаются все тоньше и тоньше (рис. 8.6). Самый толстый — ствол. Рис. 8.6 67
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 68 8. Рекурсивная процедура получения фрактальных кривых 1. Какая команда в Скретче задает толщину линии? 2. Добавь в проект связь между длиной ветки и толщиной линии. А теперь сделаем так, чтобы более тонкие ветки становились более светлыми. 3. Какая команда отвечает за освещенность рисунка? 4. Какое значение параметра этой команды соответствует отсутствию света? 5. Добавь в проект связь между длиной ветки и ее освещенностью, исходя из того, что ствол дерева (самая длинная — исходная — ветка) — самая темная. 6. Сохрани проект. Задания для самостоятельной работы 1. Создай вариант проекта «Кривая Коха», в котором среднее звено каждого отрезка заменяется не на прямоугольную ломаную, а на равносторонний треугольник (рис. 8.7). Рис. 8.7 2. Чему равны углы D, E и J (см. рис. 8.8), на которые нужно повернуть спрайт-рисовальщик, чтобы получить фигуру-генератор? Рис. 8.8
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Добавим правдоподобия D E J 3. Создай вариант проекта «Дерево», видоизменив исходный элемент так, как показано на рис. 8.9. Рис. 8.9 69
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 9. Фракталы из геометрических фигур До сих пор мы строили фракталы, используя невидимый спрайт-рисовальщик. При этом полученные изображения представляли собой совокупность линий. Покажем еще одну возможность рисования фракталов в Скретче — с помощью оттиска изображения самого спрайта. Проект «Множество Кантора» Исходный элемент множества Кантора — квадрат. Процедура, осуществляющая переход к следующему шагу, строит четыре новых квадрата. При этом новые квадраты имеют вдвое меньшую длину стороны, а их геометрические центры совпадают с вершинами исходного квадрата (рис. 9.1). Рис. 9.1 Попробуем получить изображение этого фрактала с помощью возможностей спрайта Квадрат. Тогда нам не придется писать код рисования квадратов, а достаточно будет оставить оттиски (команда печать) спрайта Квадрат в нужном месте и в нужном размере. Чтобы указать место для печати изображений квадрата, будем указывать координаты геометрического центра квадрата, т. е. точки пересечения его диагоналей.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Множество Кантора» Чтобы спрайт Квадрат оставил свои оттиски в точках, совпадающих с вершинами исходного квадрата, ему придется повторить один из маршрутов, изображенных на рис. 9.2 (обход возможен и в другом порядке — главное, чтобы спрайт побывал во всех вершинах и вернулся в исходную точку). а б Рис. 9.2 Ориентация спрайта в начальной и конечной точках тоже должна быть одинаковой. Это значит, что в варианте б (рис. 9.2) спрайт в конечной точке А нужно не забыть повернуть в направлении АВ. Процедура, с помощью которой мы будем осуществлять рекурсию, должна отражать зависимость от длины стороны исходного квадрата. Менять размер спрайта Квадрат мы будем с помощью команды , подставляя в каче- стве параметра длину его стороны, т. е. параметр рекурсивной процедуры. Для этого нам потребуется создать спрайт, у которого длина стороны будет равна 100. Кроме того, центр костюма спрайта должен находиться в точке пересечения его диагоналей. Поскольку в Скретче 3.0 это приходится делать на глаз, для точности построений воспользуемся старой версией Скретча. 1. Открой программу Скретч 1.4. 2. Создай спрайт Квадрат, окрашенный в любой цвет, но не белый, не серый и не черный. 71
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 72 9. Фракталы из геометрических фигур Центр его костюма будет автоматически установлен в геометрическом центре, а сам спрайт окажется расположен в центре сцены (в точке с координатами (0,0)). 3. Совмести курсор мыши с крайней правой вершиной спрайта Квадрат. Чему равна координата х? 4. Определи длину стороны спрайта Квадрат: 5. Как она связана с определенным в п. 3 значением координаты х? 6. Если длина стороны квадрата оказалась меньше 100, то измени размер спрайта в графическом редакторе с помощью кнопки . Если же длина стороны квадрата оказалась больше 100, то измени размер спрайта с помощью кнопки . 7. Если длина стороны квадрата стала равна 100, то экспортируй спрайт Квадрат в папку, где хранятся твои проекты, созданные в новой версии Скретча. 8. Открой новую версию Скретча. 9. Импортируй созданный в старой версии спрайт Квадрат. 10. Создай блок квадрат с числовым параметром длина. 11. Определи блок квадрат: создай код обхода спрайтом всех четырех вершин квадрата (см. любой вариант на рис. 9.2 или придумай свой). 12. Создай запускающий блок, определяющий начальное состояние проекта: y сцена очищена от предыдущей графики; y спрайт находится в центре сцены; y спрайт невидим. 13. Добавь к командам запускающего блока вызов команды квадрат. Проверим правильность работы твоего кода. 14. Опусти спрайту перо. 15. Запусти проект, задав в качестве параметра команды квадрат число 100.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Множество Кантора» 16. Проверь: повторил ли спрайт маршрут обхода вершин квадрата, изображенный на рис. 9.2 или придуманный тобой? Если нет, найди и исправь ошибки в коде. 17. Добавь перед командами обхода спрайтом вершин квадрата: y связь размера спрайта Квадрат (команда установить размер) с параметром длина; y команду печать. Это и будет наша рекурсивная процедура: она будет печатать исходный квадрат и обходить его вершины. 18. Скопируй команды обхода спрайтом вершин квадрата. 19. Вставь после каждой команды, приводящей спрайт в очередную вершину, вызов команды квадрат с уменьшенным вдвое параметром длина. 20. Соедини обе части кода (исходную и скопированную). 21. Вложи получившийся код в конструкцию с условием, ограничивающим параметр длина некоторым значением. 22. Каким должно быть это значение, чтобы код остановился после второго рекурсивного вызова, если начальное значение параметра длина равно 100? 23. Подними спрайту перо и запусти проект. 24. Если код составлен без ошибок, у тебя должен получиться рис. 9.3а. а б Рис. 9.3 Хотя нет! Твой рисунок пока однотонный. 73
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 74 9. Фракталы из геометрических фигур 25. Чтобы цвет квадрата менялся с каждым рекурсивным вызовом, свяжи цвет спрайта Квадрат с параметром длина с помощью команды . 26. Измени число, ограничивающее рекурсию (см. п. 21), и запусти проект. 27. Получился ли у тебя рисунок, подобный рис. 9.3б? 28. Сохрани проект. Однако постой! Сравни рис. 9.3б и исходный чертеж (рис. 9.1)! 29. В чем разница? Чтобы получить рисунок, изображенный на рис. 9.1, нужно накладывать оттиски в обратном порядке! А для этого нам придется использовать обратную рекурсию. 30. Создай копию проекта. 31. Поменяй местами процедуру обхода вершин квадрата и ее четырехкратного рекурсивного вызова (см. п. 19). 32. Запусти проект и убедись в том, что теперь получается то, что надо (рис. 9.4). Рис. 9.4 33. Сохрани проект.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Дерево Пифагора» Проект «Дерево Пифагора» А теперь вырастим еще одно дерево, используя все тот же спрайт Квадрат. Процедура его построения такова: на стороне квадрата, как на гипотенузе, строится равносторонний прямоугольный треугольник. На каждом катете этого треугольника строим новые квадраты (см. рис. 9.5а). В итоге получаем первые две ветки. На следующем шаге каждый новый квадрат снова достраиваем треугольником и снова строим два новых квадрата (см. рис. 9.5б). а б Рис. 9.5 Как и с проектом «Множество Кантора», мы должны посмотреть на эту процедуру «глазами» спрайта, которому предстоит оставить свой оттиск в нужных местах, уменьшившись до нужного размера. Начав из точки А, спрайт должен побывать в точках D и F, а затем снова вернуться в точку А (см. рис. 9.6а). а б Рис. 9.6 75
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 76 9. Фракталы из геометрических фигур Все остальное — так же как у проекта «Множество Кантора»: оставить в исходном положении А свой оттиск, а затем повторить процедуру обхода точек D и F, в каждой из которой оставив оттиск уменьшенного размера. По теореме Пифагора (отсюда и название фрактала), получим формулу соотношения длин сторон исходного и малых квадратов: ХD = ХA —2 . Здесь XD и XA — длины сторон квадратов с центрами в точках D и A соответственно. 1. Создай копию проекта «Множество Кантора». 2. Удали содержимое из блока квадрат. 3. Заполни вспомогательную таблицу углов и соответствующих им поворотов спрайта в отмеченных точках (рис. 9.7), исходя из того, что сумма их величин равна 180q. Таблица 9.1 Угол Величина Величина поворота спрайта Направление ABG 90 90 Против часовой стрелки BGC 45 135 По часовой стрелке GCD DCH CHE HEF FEK EKB KBA
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Дерево Пифагора» Рис. 9.7 4. Заполни таблицу длин отрезков ломаной линии АBGCDCHEFEKBA (см. рис. 9.7), выраженных в длинах стороны GK исходного квадрата. Таблица 9.2 Отрезок Длина AB 0,5 BG 0,5 GC —2 DC CH HE FE EK KB 5. Используя данные таблиц п. 3 и 4, составь код обхода точек А-B-G-C-D-C-H-E-F-E-K-B-A (см. рис. 9.7). 6. А теперь соедини получившийся код с блоком . 7. Опусти спрайту перо и запусти проект. 8. Проверь результат: получилась ли фигура, изображенная на рис. 9.7? Если нет, найди ошибки и исправь их. 77
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 78 9. Фракталы из геометрических фигур 9. Создай копию содержимого блока квадрат. 10. После каждой команды, переводящей спрайт в точки D и F, вставь вызов команды квадрат с параметром . 11. Соедини оба фрагмента кода — исходную процедуру и ее повтор с рекурсивным вызовом. 12. Вставь в начало кода команду . 13. Вложи получившийся код в конструкцию с условием, ограничивающим параметр длина некоторым значением. 14. Каким должно быть это значение, чтобы код остановился после второго рекурсивного вызова? 15. Впиши это значение в условие выполнения команды квадрат. 16. Подними спрайту перо и запусти проект. 17. Проверь: получился ли у тебя рисунок, изображенный на рис. 9.8? Если нет, найди ошибки и исправь их. Рис. 9.8 18. Добавь в код связь цвета оттиска квадрата с длиной его стороны (подобно тому, как мы это делали в проекте «Множество Кантора» (см. п. 26)). 19. Варьируя длину исходного квадрата и значение, ограничивающее вызов команды квадрат, получи как можно большее дерево, умещающееся на сцене Скретча (рис. 9.9).
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Дерево Пифагора» Рис. 9.9 20. Сохрани проект. Задания для самостоятельной работы 1. Создай копию проекта «Дерево Пифагора», в котором треугольник, из которого прорастают ветки, не равносторонний, а, например, с одним из углов в 30q (см. рис. 9.10а). а б Рис. 9.10 2. Заполни таблицы по рис. 9.10б. 79
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 80 9. Фракталы из геометрических фигур Таблица 9.3 Угол Величина Величина поворота спрайта Направление ABG 90 90 Против часовой стрелки BGC 30 150 По часовой стрелке GCD DCH CHE HEF FEK EKB KBA Таблица 9.4 Отрезок Длина AB 0,5 BG GC DC CH HE 0,25 FE EK KB 3. В соответствии с данными табл. 9.3 и 9.4 измени содержимое команды квадрат. 4. Повтори шаги 7–19, описанные в проекте «Дерево Пифагора», сверяясь с рис. 9.10.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Дерево Пифагора» 5. Запусти проект. У тебя должно получиться наклонное дерево Пифагора (рис. 9.11). Рис. 9.11 6. Сохрани проект, придумав ему название: 81
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 10. Косвенная рекурсия Попробуй решить такую задачу: требуется соединить 16 точек, расположенных по периметру и внутри квадрата 4 u 4 (рис. 10.1), непрерывной линией так, чтобы она: y соединяла не больше трех точек, находящихся на одной прямой; y не проходила по одной и той же точке дважды; y проходила только по линиям, изображенным на рис. 10.1; y начиналась и заканчивалась на вершинах квадрата. Рис. 10.1 А если такой квадрат увеличить до размера 8 u 8 или 16 u 16 (рис. 10.2)? Рис. 10.2 Оказывается, и такая задача решается с помощью фракталов! В самом деле, если добавить к ряду подобных задач квадрат, образуемый четырьмя точками, то кривые, являющиеся решениями, выглядят так, как на рис. 10.3.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 10. Косвенная рекурсия Рис. 10.3 Попробуем понять закономерность, согласно которой происходит переход от шага к шагу. Для этого выделим внутри фигуры шага 2 фигуры шага 1 (рис. 10.4): Рис. 10.4 Точно так же нетрудно увидеть, что и фигура шага 3 состоит из четырех фигур шага 2 (рис. 10.5). Рис. 10.5 83
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 84 10. Косвенная рекурсия Итак, фигуру шага 1 можно считать элементом-генератором, а фигуру n-го шага рассматривать как результат композиции четырех фигур n – 1-го шага. Таким образом, если обозначить через f(n) процедуру получения фигуры n-го шага, то можно записать: f(n) G(f(n – 1)) , где через G обозначена процедура, связывающая в композицию фигуры предыдущего шага. Зависимость такого вида называют рекуррентной. Внимание! В отличие от ранее рассматриваемых примеров здесь переход от шага к шагу не меняет длину звена ломаной. Нам осталось получить вид процедуры G — на языке команд Скретча! Проект «Кривая Гильберта» 1. Создай невидимый спрайт-рисовальщик. 2. Создай блок элемент с числовым параметром номер, который будет соответствовать номеру шага. 3. Создай переменную длина. 4. Определи блок элемент так, чтобы в результате его выполнения рисовалась ломаная шага 1 (см. рис. 10.3) с длиной звена, равной значению переменной длина. 5. Создай основной код, задающий: y начальное положение спрайта-рисовальщика в левом верхнем углу; y начальное значение переменной длина, например равное 50; y вызов блока элемент со значением параметра номер, равным 1. 6. Запусти проект и убедись в том, что в результате работы кода рисуется фигура шага 1 (см. рис. 10.3).
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Кривая Гильберта» 7. Создай конструкцию полного ветвления с условием . 8. Какой ветке этой конструкции соответствует созданный нами код? 9. Вложи содержимое блока элемент в соответствующую ветку конструкции ветвления. Теперь пора определить процедуру получения фигуры второго шага из фигур первого шага (см. рис. 10.4), т. е. наполнить содержимым вторую ветку конструкции ветвления. Поскольку все четыре фигуры шага 1 по-разному ориентированы, примем за исходную ориентацию положение фигуры, изображенной на рис. 10.3. Тогда процедуру получения фигуры шага 2 было бы логично описать следующим образом (рис. 10.6). Рис. 10.6 85
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 86 10. Косвенная рекурсия Однако если мы запустим такой код, то увидим совсем не тот результат, что ожидали (рис. 10.7, сравни с фигурой на рис. 10.3). Рис. 10.7 В чем же дело? А дело в том, что фигуры первого порядка, отмеченные на рис. 10.4 красным и желтым цветами, только выглядят одинаково! А рисуются они по-разному. В самом деле, если мы попытаемся нарисовать красный фрагмент (от точки А на рис. 10.8), используя команды рисования желтого, то ломаная пойдет совсем в другую сторону (рис. 10.8). Рис. 10.8 Таким образом, мы обнаружили правую и левую ориентацию в рисовании исходных ломаных. А это значит, что их построение должно описываться разными командами! 10. Создай блок отражение с числовым параметром длина. 11. Определи его точно так же, как блок элемент, но замени в нем все углы поворота на противоположные. 12. Запусти проект, заменив в основном коде вызов блока элемент на вызов блока отражение, и убедись в том, что на сцене рисуется фигура шага 1.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Кривая Гильберта» 13. Создай код, аналогичный коду, изображенному на рис. 10.6, заменив там, где нужно, вызов блока элемент на вызов блока отражение. Какие это по счету вызовы в коде? 14. Запусти проект с вызовом блока элемент, изменив в нем значение параметра на 2. 15. Если вид получившейся фигуры совпал с изображением на рис. 10.3, то: y скопируй фрагмент блока элемент, содержащий код рисования фигуры второго шага; y поменяй в нем местами вызовы блока элемент и блока отражение; y замени все углы поворота на противоположные; y вставь получившийся фрагмент в соответствующее место блока отражение. 16. Запусти проект, заменив вызов блока элемент на вызов блока отражение. 17. Убедись в том, что полученный рисунок совпадает с фигурой на рис. 10.3. 18. Как фигуры, получающиеся в результате вызова блоков элемент и отражение, располагаются относительно друг друга? 19. Замени в запускающем блоке значение параметра в блоке элемент на 3 и запусти проект. Сравни получившуюся фигуру (справа) с ожидаемой (слева) (рис. 10.9). Рис. 10.9 Похоже, но не то! Что же не так на этот раз? Похоже, что коды рисования фигур второго и третьего шагов тоже разные! 87
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 88 10. Косвенная рекурсия Чтобы понять различия, рассмотрим фигуру шага 3, выделив в ней фигуры шага 2 и отрезки (черным цветом), связывающие эти фигуры (рис. 10.10). Рис. 10.10 Мы видим, что после рисования первой (красной) фигуры направление спрайта совпадает с направлением черного отрезка, т. е. поворот, который делался в коде построения фигуры второго шага (см. рис. 10.6), не требуется. А вот после рисования черного отрезка поворот нужен! 20. Что это за поворот — по часовой или против часовой стрелки? 21. Создай копию фрагмента блока элемент, соответствующего коду рисования фигуры, номер которой больше 1. 22. Внеси нужные изменения в код блока элемент. 23. Проанализируй фрагмент кода, описывающий переход от второй (желтой) фигуры к третьей (зеленой). Какая команда описывает этот переход? 24. Внеси изменения в код. 25. Проанализируй фрагмент кода, описывающий переход от третьей (зеленой) фигуры к четвертой (синей). Какие команды описывают этот переход? 1) 2)
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Кривая Гильберта» 26. Внеси соответствующие изменения в фрагмент кода. Можно предположить, что правила, по которым получается фигура следующего шага, будут чередоваться: y для четных номеров — по правилу, по которому происходит переход от шага 1 к шагу 2; y для нечетных — по правилу, по которому происходит переход от шага 2 к шагу 3. 27. Впиши необходимые условия во фрагмент блок-схемы алгоритма рисования фигуры n-го шага (рис. 10.11). Рис. 10.11 28. В соответствии с фрагментом блок-схемы добавь в блок элемент конструкцию полного ветвления с условием: . Команда ... мо- дуль ... делит первое значение на второе и берет остаток от этого деления. 29. Вложи в конструкцию соответствующие фрагменты кода. 30. Запусти проект. 31. Если фигура шага 3 получилась такой, как на рис. 10.10, то внеси аналогичные изменения (см. п. 28 и 29) в блок отражение. 32. Запусти проект, заменив вызов блока элемент на вызов блока отражение. 89
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 90 10. Косвенная рекурсия 33. Найди и устрани ошибки, если получившаяся фигура не является зеркальным отражением фигуры, изображенной на рис. 10.10. 34. Измени, если нужно, значение переменной длина и получи изображение фигуры 4-го, 5-го и т. д. шагов. 35. Каков максимальный номер шага, фигура которого может уместиться на сцене Скретча? 36. Сохрани проект. Давид Гильберт Получившаяся серия фигур носит 1862–1943 название кривых Гильберта — по имени немецкого математика Давида Гильберта, придумавшего алгоритм их получения задолго до появления компьютеров. Такая организация кода, при которой одна рекурсивная функция вызывает другую рекурсивную функцию, называется косвенной или взаимной рекурсией. Проект «Дракон Хартера–Хейтуэя» Рассмотрим еще один проект, для выполнения которого требуется косвенная рекурсия, — «Дракон Хартера–Хейтуэя». Генератором этого фрактала является самая простая фигура — отрезок. А процедура, с помощью которой получаются следующие фигуры, — построение на отрезке, как на гипотенузе, равностороннего прямоугольного треугольника (рис. 10.12). Рис. 10.12
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Дракон Хартера–Хейтуэя» На следующем шаге, когда отрезков становится уже два (см. рис. 10.12, шаг 1), первый треугольник строится с левой стороны от основания, а второй — с правой (здесь слова «лево» и «право» используются относительно направления обхода отрезков). На шаге 2 отрезков становится 4, на шаге 3 — 8. 1. Определи, какая формула связывает количество отрезков ломаной К и номер шага n: Если длину отрезка n-го шага обозначить хn, то длину отрезка следующего шага хn+1 можно найти по теореме Пифагора (рис. 10.13). хn+1 = xn —2 Рис. 10.13 2. Учитывая правила построения, получи (дорисуй) из фигуры шага 2 фигуру шага 3 (рис. 10.14). Рис. 10.14 3. А теперь получи серию фигур, порождаемую противоположно ориентированным треугольником шага 1 и той же процедурой получения фигур следующих ша- 91
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 92 10. Косвенная рекурсия гов (первый треугольник строится слева, а второй — справа) (рис. 10.15). Генератор Шаг 1 Шаг 2 Шаг 3 Рис. 10.15 4. Проверь себя. y Являются ли фигуры шага 2 из разных серий подобными? Каким способом можно получить из одной фигуры другую? y Состоит ли фигура шага 3 из двух фигур шага 2? Каких именно — одноименных или разноименных? Как видишь, здесь, как и в задаче построения кривой Гильберта, переплетаются противоположно ориентированные фигуры предыдущих шагов. А это значит, что без взаимной рекурсии нам не обойтись! Договоримся: фигуры, порожденные первым треугольником (см. рис. 10.12), называть левыми, а фигуры, порожденные вторым треугольником (см. рис. 10.15), — правыми. Проект «Дракон» 1. Создай невидимый спрайт-рисовальщик. 2. Создай блок элемент с числовым параметром длина. 3. Определи блок элемент так, чтобы: а) рисовальщик изначально был ориентирован по направлению отрезка-генератора; б) затем поворачивался на угол 45q и рисовал стороны порождаемого им левого равностороннего прямоугольного треугольника (длина основания равна значению параметра длина);
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Дракон» 93 в) возвращался в исходную точку, не оставляя следов. 4. Создай запускающий блок в соответствии со следующими требованиями: а) рисовальщик должен стартовать из центра в горизонтальном направлении; б) сцена должна быть очищена от предыдущей графики; в) вызывается блок элемент с таким значением числового параметра, чтобы получившийся рисунок целиком умещался на сцене. 5. Запусти проект и убедись, что в результате рисуется прямой угол (углом вверх). 6. Создай еще один блок — отражение с числовым параметром длина. 7. Определи блок отражение так же, как блок элемент, поменяв в нем углы поворота на противоположные. 8. Поменяй в запускающем блоке вызов команды элемент на вызов команды отражение и запусти проект. 9. Проверь: получился ли в результате правый прямой угол? Если нет, устрани ошибки. Теперь нам надо повторить команды блока элемент для построения отрезков следующего шага. Чтобы нам было легче осуществлять пошаговую проверку работы кода, свяжи цвет пера со значением параметра длина. 10. Скопируй содержимое блока элемент. 11. Поскольку длина отрезка следующего шага связана с длиной данного отрезка по формуле (2), замени в командах скопированной части значение параметра длина на выражение . 12. Вставь в скопированную часть после первой команды поворота вызов блока элемент, а после второй — вызов блока отражение со значением параметра, равным 13. Соедини оба фрагмента блока элемент. .
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 94 10. Косвенная рекурсия 14. Вложи получившийся код в конструкцию с условием, ограничивающим рекурсию заданным значением параметра длина. 15. Каким должно быть это условие, чтобы код остановился после второго рекурсивного вызова? 16. Верни в запускающем блоке вызов команды элемент и проверь: а) произошел ли рекурсивный вызов блоков элемент и отражение; б) остановился ли код после второго рекурсивного вызова; в) получилась ли в результате фигура шага 2 (сравни с рис. 10.14)? 17. Если не выполнилось: а) первое условие, уменьши значение, ограничивающее рекурсию параметром длина (см. п. 15); б) второе условие, увеличь значение, ограничивающее рекурсию параметром длина (см. п. 15); в) третье условие, найди ошибки в самом коде и исправь их. 18. Если фигура второго шага в результате работы кода нарисована верно, то: а) скопируй фрагмент блока элемент, отвечающий за рекурсивные вызовы; б) замени в нем все углы поворота на противоположные; в) добавь получившийся фрагмент к командам блока отражение; г) вложи содержимое блока отражение в условие, аналогичное условию выполнения блока элемент. 19. Замени в запускающем блоке вызов команды элемент на вызов команды отражение и проверь, получилась ли правая фигура второго шага. Если нет, найди и устрани ошибки. 20. Меняя значение, ограничивающее рекурсию в обоих блоках, начальное значение параметра длина и начальное положение спрайта-рисовальщика, получи фигуру максимально возможного шага (рис. 10.16).
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Дракон» Рис. 10.16 21. Как ты думаешь, можно ли изменить код так, чтобы вспомогательные построения оказались скрыты? Если нет, то почему? Если да, то как именно? 22. Если ты утвердительно ответил на предыдущий вопрос, то внеси необходимые изменения в код и проверь свои предположения. 23. Сохрани проект. Задания для самостоятельной работы 1. Создай копию проекта «Дерево»: а) измени блок ветка так, чтобы в исходном элементе правый отрезок был вдвое длиннее левого; б) создай блок отражение, в котором, напротив, левый отрезок был бы вдвое длиннее правого; в) организуй косвенную рекурсию и вырасти дерево (рис. 10.17). Рис. 10.17 95
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 96 10. Косвенная рекурсия 2. Создай копию проекта «Дракон». Измени код так, чтобы все построенные треугольники были одинаково ориентированы. Такая фигура получила название кривой Леви (рис. 10.18). Рис. 10.18
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 11. Пошаговый просмотр фракталов До сих пор мы вручную подбирали значение, ограничивающее параметр рекурсии. Теперь же создадим проект, в котором рассмотренные нами фракталы будут строиться в зависимости от заданного номера шага рекурсии. Для этого нам потребуется связать номер шага с нижней границей значения параметра рекурсии. Поэтому нам понадобятся две переменные — определяющие номер шага рекурсии и ее границу. Проект «Дерево» Во фрактале «Дерево» исходная ветка имела наибольшую длину, а затем на каждом шаге уменьшалась на значение переменной шаг. Чтобы понять, какая связь между номером шага и граничным значением для параметра рекурсии, рассмотрим первые несколько шагов построения дерева. Пусть начальная длина ветки — 50, а шаг уменьшения — 5. Тогда получим следующую зависимость (табл. 11.1). Таблица 11.1 Номер шага Длина ветки Граница рекурсии (пока длина > граница) 0 50 49 1 45 44 2 40 39 … … … Примечание: в качестве ограничения на рекурсию можно было поставить любое число, большее длины ветки следующего шага. Например, для первого шага — 46.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 98 11. Пошаговый просмотр фракталов Таким образом, число, ограничивающее рекурсию, на каждом шаге так же уменьшается, как и длина ветки: dn = d0 – n ˜ h. Здесь dn и d0 — длины веток на n-ом и нулевом шагах, h — размер шага уменьшения длины. 1. Создай копию проекта «Дерево». 2. Создай две переменные — номер и граница. 3. Задай переменной номер вид рычажка в границах от 0 до 10. Нулевой шаг соответствует длине исходной ветки. 4. Создай фрагмент кода, вычисляющий значение переменной граница в зависимости от значения переменной номер (рис. 11.1). Рис. 11.1 5. Вставь этот фрагмент перед вызовом команды ветка в основном коде. Нам осталось только задать начальные значения используемых переменных и изменить условие в блоке ветка. Значение переменной номер мы будем задавать с помощью движения рычажка. 6. Задай в основном коде значение переменной граница. 7. Можно ли вызов команды ветка выполнить в такой форме: ? Если да, то измени вы- зов команды ветка. Если нет, то объясни почему?
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Дерево Пифагора» 8. Замени условие в блоке определить ветка на выражение . 9. Спрячь все переменные, кроме номер. 10. Запусти проект и понаблюдай все стадии роста дерева в зависимости от значения (положения рычажка) переменной номер. 11. Сохрани проект. 12. Как ты думаешь, что будет, если верхнюю границу переменной номер увеличить до 11? Проект «Дерево Пифагора» 1. Создай копию проекта «Дерево Пифагора». 2. Создай две переменные — номер и граница. 3. Измени основной код так же, как это было сделано в предыдущем проекте. Разница в этих проектах — только в законе, по которому происходит уменьшение длины стороны квадрата от шага к шагу. 4. Поскольку она каждый раз уменьшается на —2, замени команду изменения переменной граница на команду (рис. 11.2): Рис. 11.2 5. Запусти Пифагора на 6. Сохрани Остальные проект и понаблюдай за ростом дерева каждом шаге. проект. проекты измени самостоятельно. Вопросы Как будет выглядеть команда изменения переменной граница в проекте: y «Множество Кантора»? y «Снежинка Коха»? y «Дракон»? 99
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 12. Фантомные объекты До сих пор мы в любом проекте имели дело со спрайтами, т. е. с графическими объектами, свободно перемещаемыми по экрану. А можно ли создать иллюзию объекта, который реагировал бы на прикосновения мыши, перемещался по сцене, отталкивался от ее краев, при отсутствии соответствующего спрайта? Например, можно ли изобразить движение круга (треугольника и т. п.) с заданной скоростью в заданном направлении? Да еще чтобы он при этом отталкивался от краев сцены? Оказывается, можно. Для этого нам достаточно каждый раз очищать экран от нарисованного объекта и заново рисовать его в новом месте. Если такая смена положений будет достаточно частой, то возникнет иллюзия движения. Итак, рассмотрим для начала самый простой объект — точку. Положение точки на плоскости определяется двумя числами — координатами x и y. Проект «Фантомная точка» 1. Создай спрайт-рисовальщик. Его вид может быть любым, поскольку мы его все равно спрячем. Можно даже сделать пустой спрайт. Краткое описание действий спрайта можно представить следующим образом (рис. 12.1). Для нас принципиально лишь то, чтобы вид спрайта не совпадал с видом того объекта, который мы хотим сымитировать, в данном случае — с точкой. 2. Создай блоки: y начальное положение; y изобразить точку; y перемещение; y если край, оттолкнуться.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Фантомная точка» Рис. 12.1 Для имитации движения точки нам потребуются четыре переменные: y х и у, хранящие ее координаты; y скорость и направление, задающие характеристики ее движения. Поскольку переменная в Скретче уже есть, воспользуемся ею. 3. Создай три переменные: x, y и скорость. 4. Определи блок начальное положение следующими командами: y очистить сцену от предыдущей графики; y задать размер пера, равный 5 или больше (чтобы точка была хорошо видна); y задать значения переменных х и у случайными числами; y задать значение переменной скорость — пусть это тоже будет случайное число из диапазона от 1 до 10; 101
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 102 12. Фантомные объекты y задать значение переменной направление — пусть для начала это будет направление вправо (влево) или вверх (вниз). Определим блок изобразить точку из следующих соображений: y изображение точки в прежнем положении должно исчезнуть; y изображение точки с новыми координатами х и у должно быть видно; y между старым и новым положениями точки не должно быть никаких линий. 5. Какой командой в данном случае нужно воспользоваться — печать или опустить перо? 6. Определи блок изобразить точку. Добавим к изображению точки ее перемещение. Для этого нам нужно каждый раз пересчитывать ее координаты. Какая координата — х или у — меняется при движении в направлении вправо (влево)? . А в направлении вверх (вниз)? 7. Определи блок перемещение так, чтобы в зависимости от значения переменной направление менялось значение той или иной переменной (х или у) на значение переменной скорость. 8. Собери основной код так, как показано на рис. 12.1, исключив из него (пока) блок если край, оттолкнуться. 9. Запусти проект несколько раз и убедись в том, что: y точка видна при каждом запуске; y точка оказывается в разных местах сцены; y точка движется вправо, влево, вверх или вниз — в зависимости от заданного в блоке начальное положение значения переменной направление. Добавим имитацию отталкивания точки от краев сцены. Для этого нужно задать условие достижения точкой (т. е. ее координат) значений, находящихся за краями сцены. 10. Чтобы понять, как будет меняться значение переменной направление при отталкивании от края, заполни таблицу:
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Фантомная точка» Ориентация движения Горизонтальное Вертикальное Исходное направление Направление после отталкивания от края –90 90 0 180 11. Какая закономерность связывает значения исходного направления и измененного после отталкивания в горизонтальном направлении? 12. А в вертикальном направлении? 13. Определи блок если край, оттолкнуться. 14. Сравни свой код с кодом, изображенным на рис. 12.2. Где команд меньше? Не спеши переделывать свой код. Сначала проверь правильность его работы! 15. Добавь блок если край, оттолкнуться в основной код (как показано на рис. 12.2). Рис. 12.2 103
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 104 12. Фантомные объекты 16. Запусти проект и проверь: правильно ли отталкивается точка от всех четырех краев сцены? А теперь обобщим этот проект для равномерного движения в любом направлении! 17. Как ты думаешь, в какие блоки нам предстоит внести изменения? Проверим корректность работы блока если край, оттолкнуться в случаях, когда направление движения не является ни вертикальным, ни горизонтальным! На рис. 12.3а изображен случай удара точки о вертикальный край справа. Направление движения до встречи с краем отмечено красным цветом, а после отталкивания — синим. По закону физики, который мы хотим сымитировать, угол падения (D) равен углу отражения (E). Но поскольку переменная отсчитывает величину угла от вертикального направления, нам нужно определить закон, по которому угол D0 меняется на угол E0 (см. рис. 12.3б). Нетрудно доказать, что D0 = –E0. а б Рис. 12.3 Аналогичную закономерность можно обнаружить и в случае удара точки о левый край. Теперь рассмотрим случай удара точки о горизонтальный край сверху (рис. 12.4).
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Фантомная точка» а б Рис. 12.4 Из рис. 12.4б видно, что D0 = D (как вертикальные углы), а E0 + E = 180 (как смежные углы). Отсюда следует, что D0 = 180 – E0. Аналогично доказывается это соотношение и для случая удара точки о нижний край. Таким образом, мы проверили закономерности, используемые в командах блока если край, оттолкнуться, обобщив их на любое направление движения. Теперь внесем изменения в блок перемещение. Пусть наша точка должна переместиться за единицу времени на расстояние v — из положения А в положение В (рис. 12.5). Задача заключается в том, чтобы узнать, на сколько при этом изменятся координаты х и у, т. е. найти 'x = x2 – x1 и 'y = y2 – y1. Если тебе знакомо понятие вектор, то задачу можно переформулировать следующим образом: требуется вычислить проекции вектора v на оси координат. В математике для этого есть специальные множители, называемые косинусом и синусом угла наклона, которые позволяют вычислять проекции вектора на оси координат. Их обозначают: sinD и cosD, где D — угол наклона вектора к одной из осей. В нашей задаче эти проекции можно получить из следующих соотношений: 'x = v ˜ sinD; 'y = v ˜ cosD. Рис. 12.5 105
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 106 12. Фантомные объекты Значения синуса и косинуса при разных углах наклона берутся из специальной таблицы и являются результатом сложных расчетов. К счастью, Скретч тоже умеет вычислять синус и косинус (рис. 12.6). Рис. 12.6 18. Измени команды в определении блока перемещение (рис. 12.7). Рис. 12.7
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Фантомный спрайт» 19. Задай значение переменной направление случайным числом. В каком диапазоне находится это число? 20. Запусти проект несколько раз и убедись в том, что: y точка движется под самыми разными углами; y точка отталкивается от всех четырех краев сцены по закону отражения. 21. Сохрани проект. Проект «Фантомный спрайт» А теперь сделаем так, чтобы нашу фантомную точку, подобно спрайту, можно было бы захватить мышью и перетащить в другое место! 1. Создай копию проекта «Фантомная точка». 2. Удали из него: y блок если край, оттолкнуться; y переменную скорость. Переменная направление нам тоже не понадобится, ведь теперь перемещение нашей точки будет определяться исключительно положением курсора мыши. А при каких условиях наша точка будет перемещаться? Вспомним, как это происходит со спрайтом: мы наводим на него курсор и нажимаем левую кнопку мыши. Под условие наведения на наш фантомный спрайт курсора должно подпадать целое множество точек, отстоящих от его центра на некоторое расстояние. Поэтому общее условие перемещения точки может выглядеть так, как на рис. 12.8. Рис. 12.8 Однако, как только мы отведем курсор в сторону, желая переместить туда наш фантомный спрайт, тут же перестанет выполняться вторая часть условия (см. рис. 12.8)! 107
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 108 12. Фантомные объекты Какой-то заколдованный круг! Как же из него выйти? Выход есть! Нужно создать еще одну переменную, которая будет играть роль переключателя. y Как только выполнится условие, изображенное на рис. 12.8, переменная-переключатель примет значение «включено» (или 1). y Как только начнется режим «включено», фантомный спрайт будет идти за курсором мыши — команда . Кому адресована эта команда? y Как только левая кнопка мыши будет отжата, переменная-переключатель примет значение «выключено» (или 0), и условие 2 перестанет выполняться. Такая переменная-переключатель носит в программировании название флаг. 3. Создай переменную флаг. 4. Добавь в определение блока начальное положение обнуление переменной флаг. 5. Удали из определения блока перемещение все команды. 6. Определи блок перемещение с помощью трех независимых конструкций ветвления и переменной флаг, словесное описание которых приведено выше. Внимание! В режиме «включено» должны изменяться не только значения переменных, хранящих координаты фантомной точки, но и само изображение точки в новом месте! 7. Запусти проект и проверь: y перемещается ли наша точка при захвате ее мышью; y следует ли она за курсором;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Фантомный спрайт» y прекращает ли точка движение при отжатии левой кнопки мыши; y не «застревает» ли точка при слишком быстром движении курсора? 8. Если происходит «застревание», увеличь число в условии (см. рис. 12.8), характеризующее величину возможного отклонения курсора от центра фантомной точки. 9. Сохрани проект. Задания для самостоятельной работы Создай копию проекта «Фантомная точка» и замени в нем движущуюся и отталкивающуюся от краев точку на движущийся и отталкивающийся от краев: y отрезок, задаваемый случайными числами; y треугольник, вершины которого задаются случайными числами. 109
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 13. Клонирование В новой версии Скретча тоже используются фантомные объекты, дублирующие поведение спрайта-прототипа. Такие объекты называются клонами. Синонимами слова клон являются слова: копия, дубликат, двойник. Мы будем клонировать спрайты. Где же эта возможность может пригодиться? В любом проекте, где участвуют однотипные объекты. Покажем это на примере известного нам проекта «Лабиринт с потайными ходами». В нем, как ты помнишь, кроме Кота, идущего по лабиринту, есть мыши, появляющиеся в самых разных местах сцены. Если Кот съедает одну из них, то в лабиринте на некоторое время появляются дополнительные проходы. В старой версии Скретча нам пришлось создать три одинаковых спрайта — мышь1, мышь2 и мышь3. В новой мы сможем обойтись одним. Проект «Лабиринт с потайными ходами» 1. Импортируй в Скретч 3.0 проект «Лабиринт с потайными ходами». 2. Удали из него все спрайты Мышь, кроме одного. 3. В код для Мыши сразу после блока вставь цикл, как на рис. 13.1. Рис. 13.1
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Кружево Коха» (Команда создать клон находится в разделе Управление.) Если ты запустишь проект, то увидишь одну неподвижную мышь и одну, периодически исчезающую и появляющуюся в разных местах сцены — в соответствии с ее кодом. На самом деле клонов Мыши два, но они находятся один под другим — в том месте, где изначально была Мышь-оригинал. 4. Чтобы в этом убедиться, захвати мышкой один из клонов и перетащи его в другое место. Внимание! Количество спрайтов при клонировании не увеличилось! Более того, как только проект завершит работу, клоны исчезнут. Как видишь, клоны, хоть и были созданы, но своим поведением пока сильно отличаются от оригинала. Чтобы их «оживить», мы должны создать, а точнее, воспроизвести, и для них код. 5. Перетащи из раздела Управление в область скриптов команду . 6. Скопируй команды, которые запускались блоком , и соедини их с блоком когда я начинаю как клон. 7. Запусти проект и убедись в том, что клоны Мыши ведут себя и реагируют на встречу с Котом так же, как Мышь-оригинал. 8. Сохрани проект. Проект «Кружево Коха» Вернемся к проекту «Кривая Коха» и его варианту (см. п. 8 и задания к нему). В нем мы строили причудливые ломаные (рис. 13.2). 111
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 13. Клонирование 112 а б Рис. 13.2 Теперь, используя клонирование спрайта-рисовальщика, мы сможем построить из них замкнутую фигуру. 1. Создай копию проекта «Кривая Коха». Для простоты замкнем ломаные в квадрат (рис. 13.3). Рис. 13.3 2. Для этого создай переменную длина. Она будет задавать длину звена исходной ломаной. 3. Добавь в основной код команду создания четырех клонов, расположенных в углах квадрата со стороной, в 3 раза большей длины звена исходной ломаной (рис. 13.4). Рис. 13.4
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Кружево Коха» 4. Создай блок с единственной ко- мандой — элемент, вставив в ее окошко для параметра переменную длина. 5. Подбором значений переменной длина и начального положения спрайта-рисовальщика добейся того, чтобы получившийся рисунок целиком помещался на сцене и был как можно больше. 6. Обобщи этот проект на произвольное количество n клонов (или углов в правильном многоугольнике, в вершинах которого располагаются клоны) в итоговой фигуре (рис. 13.5). Рис. 13.5 7. А если поменять направление угла поворота при создании клонов (см. фрагмент кода, изображенный на рис. 13.4), то получится другой набор кружев (рис. 13.6). Рис. 13.6 8. Какую роль в этом проекте играет спрайт-оригинал? 113
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 114 13. Клонирование Разнообразие узоров Еще больше разнообразных узоров можно получить, если расставлять клоны не в порядке следования вершин правильного многоугольника (рис. 13.7а), а с пропуском некоторого фиксированного их (вершин) количества, т. е. с неким шагом — так, как мы рисуем звезду (см. рис. 13.7б). а б Рис. 13.7 Чтобы учесть этот шаг, нам понадобится еще одна переменная. Поскольку при рисовании правильного n-угольника угол поворота спрайта равен 360 градусов, пропуск им n каждой вершины увеличивает угол поворота также на 360 градусов. n Таким образом, угол поворота спрайта при пропус360 ˜ k ке k вершин в правильном n-угольнике равен n градусов. 1. Создай переменную шаг. 2. Измени формулу вычисления угла поворота спрайта при создании клонов (см. фрагмент кода, изображенной на рис. 13.4), вставив в нее переменные n и шаг. 3. Чтобы проверить правильность работы кода при расстановке клонов: а) опусти спрайту-рисовальщику перо; б) удали из основного кода команду создать клон самого себя.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Разнообразие узоров 4. Запусти код при следующих значениях переменных: а) n = 5, шаг = 1; б) n = 5, шаг = 2. 5. Если результат работы кода совпал с рис. 13.7, то: 1) верни в основной код команду создать клон самого себя; 2) подними перо спрайту-рисовальщику. 6. Запусти проект, в котором узор рисуют пять клонов (n = 5), варьируя значение переменной шаг от 1 до 4. Сравни получившиеся у тебя узоры с изображенными на рис. 13.8. Рис. 13.8 Аналогичная серия узоров, генерируемая элементом, изображенным на рис. 13.1б, выглядит так, как на рис. 13.9. Рис. 13.9 7. Поменяй направление угла поворота при создании клонов (см. п. 7 проекта «Кружево Коха») и получи аналогичную серию узоров. 8. Какой можно сделать вывод? 115
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 116 13. Клонирование 9. Как ты думаешь, как будет выглядеть узор при n = 6, k = 2? Проверь свою догадку на компьютере. 10. Какими должны быть числа n и k, чтобы получился новый узор? 11. Построй серию узоров при n = 7. Сравни то, что получилось, с рис. 13.10. Не правда ли, процесс их рисования завораживает? Ведь в этих узорах очень много слоев, и каждый следующий слой меняет картинку, как поворот калейдоскопа! 12. Придумай название узорам, изображенным на рис. 13.10: 1) 2) 3) 4) 5) 6) Рис. 13.10
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 14. Как различить клоны? До сих пор клоны спрайтов в наших проектах были достаточно безлики. Но часто бывает нужно, чтобы каждый клон «жил» своей жизнью и чем-то отличался от себе подобных. Рассмотрим, к примеру, проект, в котором спрайт и его клоны характеризуются неким параметром — например, размером. Как сделать так, чтобы этот параметр был у каждого клона свой? В этом нам поможет создание локальных переменных, которые мы привяжем к каждому клону (рис. 14.1)! Локальные переменные — это переменные только для данного спрайта или клона. Рис. 14.1 Покажем это на примере проекта «Цветник». В нем мы будем выращивать цветок-оригинал вместе с его клонами и при этом следить за ростом каждого из них. Проект «Цветник» 1. Создай спрайт Цветок. 2. Для того чтобы не сбиться со счета при создании клонов цветка, создай переменную — количество цветов.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 118 14. Как различить клоны? 3. Для того чтобы отслеживать размер каждого цветка, создай список — цветы. 4. Создай еще две локальные переменные — № цветка и размер (см. рис. 14.1). 5. Создай три блока: y начальное положение; y создание клонов; y поливка. 6. Определи блок начальное положение из следующих соображений: y размер спрайта — маленький (например, 10%); y месторасположение — в левом нижнем углу сцены. Теперь определим блок создание клонов. В него мы поместим не только команды создать клон, но и запись информации о размерах создаваемых клонов в список цветы. Тут нам и понадобятся переменные размер и № цветка. 7. Определи блок создание клонов по образцу (рис. 14.2). Рис. 14.2
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Цветник» 8. Определи по коду, изображенному на рис. 14.2, как будет выглядеть список цветы после ее выполнения. Заполни пропуски в рисунке (рис. 14.3). Рис. 14.3 Внимание! Если мы приведем в действие блок создание клонов, то на сцене по-прежнему будет один цветок, поскольку, как мы видели в предыдущем проекте, клон появляется в том месте, где находится оригинал. Чтобы клоны были видны, их надо расположить в разных местах, а для этого нам придется перемещать оригинал. Пусть у нас будет четыре цветка-клона. Поскольку длина всей сцены — 480 пикселей, клоны можно расположить на расстоянии 70–80 пикселей друг от друга. 9. Создай блок начальное положение клона с числовым параметром номер. 10. Определи его так, как на рис. 14.4. Рис. 14.4 119
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 120 14. Как различить клоны? Первая команда этого блока задает значение переменной размер. Вторая — размер создаваемого клона: он совпадает со значением переменной размер. А третья команда задает местоположение на сцене, где отобразятся клоны — на одном уровне с цветкоморигиналом и на удалении 80 пикселей друг от друга (рис. 14.5). Рис. 14.5 Для простоты выращивать цветы мы будем касанием указателя мышки. 11. Определи блок поливка (рис. 14.6). Рис. 14.6 12. Создай основной код (для цветка-оригинала), состоящий из блоков: y начальное положение; y создание клонов; y бесконечное повторение команды поливка. 13. Запусти проект и убедись в том, что: а) цветы расположились так, как показано на рис. 14.5;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Цветник» б) при наведении указателя мыши на цветокоригинал (первый слева на сцене) он начинает увеличиваться в размере; в) при наведении указателя мыши на цветы-клоны они в размере не меняются. Теперь нам осталось вдохнуть жизнь в цветы-клоны. 14. Создай следующий код (рис. 14.7). Рис. 14.7 Давай разберем, как он работает! После того как блок создание клонов один за другим создаст цветы-клоны, так же — один за другим — запустятся четыре блока — для каждо- го из клонов. При этом переменная количество цветов при запуске каждого из блоков будет иметь разное значение: для первого клона — 1, для второго — 2 и т. д. Значение переменной количество клонов запишем в локальную переменную № цветка (рис. 14.8). 121
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 122 14. Как различить клоны? Рис. 14.8 Теперь у каждого клона будет свой индивидуальный номер. Через этот номер мы сможем связываться с элементом в списке цветы и менять его, когда потребуется. Кроме того, расположим сам клон на сцене в соответствии с его номером (рис. 14.9). Рис. 14.9 Если блок поливка мы изменим так, чтобы прикосновение указателя мыши к клону меняло значение локальной переменной размер (оранжевого цвета), то с помощью команд, представленных на рис. 14.10, сможем: y записывать его значение в список цветы (или по-другому: протоколировать процесс); y менять размер клона. Рис. 14.10 Внимание! Блок поливка теперь должен иметь параметр — № цветка: в зависимости от того, какой цветок мы будем «поливать», тот цветок у нас и будет расти. Теперь нам осталось только отредактировать блок поливка (рис. 14.11).
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Проект «Цветник» Рис. 14.11 15. Определи по условию (см. рис. 14.11), под каким номером нужно вызывать блок поливка, чтобы увеличивался размер цветка-оригинала, а не его клонов. Для удобства будем считать оригинал нулевым по номеру элементом. 16. Измени блок поливка в соответствии с рис. 14.11. 17. Измени в основном коде значение параметра, появившегося в блоке поливка, на 0 (ноль). 18. Спрячь все переменные, кроме параметра размер и списка цветы. 19. Запусти проект и удостоверься в том, что: а) цветы-клоны, так же как цветок-оригинал, растут при наведении на них указателя мыши; б) этот рост сопровождается изменением соответствующих значений в списке цветы, а рост цветка-оригинала — значением параметра размер (). Сохрани проект. 123
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 124 14. Как различить клоны? Украшательства Добавим в проект спрайт-поливальщик. 1. Создай спрайт Поливальщик в двух костюмах — с льющейся из него водой и без воды. 2. Установи центр костюма внутри потока воды, как, например, на рис. 14.12. Рис. 14.12 3. Нарисуй сцену — клумбу, где будут расти цветы, и место, где изначально будет стоять Поливальщик. 4. Создай основной код: y перейти к костюму «Без воды»; y повернуть в направление 90 градусов; y оказаться на исходном месте. 5. Активируй спрайт Цветок. 6. Создай команду . 7. Вставь эту команду в блок поливка сразу после условия . 8. Активируй спрайт Поливальщик. 9. Создай код, запускающийся по сигналу «Поливай!»: y перейти к костюму «С водой»; y повернуть в направление 0 градусов; y перейти в указатель мыши.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Украшательства 10. Запусти проект и проверь: y оказался ли Поливальщик на своем исходном месте; y поливает ли Поливальщик цветок, на который наводят мышь? 11. При желании можно добавить спрайту Поливальщик еще один костюм «С водой», чтобы возникала иллюзия движения воды. Сохрани изменения в проекте. 125
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 15. Кто больше? А теперь давай сделаем так, чтобы цветок, оказавшийся больше других, каким-нибудь образом выделялся на фоне остальных. Например, он может искриться, менять окраску или над ним могут летать бабочки. Это можно сделать с помощью еще одного костюма, передачи сигнала спрайтам-бабочкам, а можно воспользоваться командой . Выбери любой вариант! Но сначала нам потребуется: y внести данные о размере цветка-оригинала в список цветы; y найти наибольший цветок; y организовать постоянное сканирование размеров цветов. Чтобы размеры всех цветов можно было сравнивать друг с другом, хорошо было бы всю информацию об их размерах хранить в одном месте. До сих пор размер цветка-оригинала мы отслеживали по содержимому фиолетового параметра размер, а размеры цветов-клонов — по значениям элементов списка цветы. Мы неявно считали, что цветок-оригинал в нашем цветнике находится под нулевым номером (см. условие в блоке поливка). Однако Скретч не позволяет и в списке создать нулевой элемент! Напрашивается решение: записать размер цветкаоригинала под первым номером, а размеры цветов-клонов сдвинуть на 1 вниз по списку. Общий список 1. В блоке создание клонов: y после команды очищения списка цветы вставь команду, показанную на рис. 15.1;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Определение максимального цветка Рис. 15.1 y начальное значение переменной количество цветов измени на 1 (команда задать значение). 2. Запусти проект и убедись, что в списке цветы теперь пять элементов. 3. В блоке начальное положение клона измени зависимость расположения клона от его номера, т. е. множитель измени на выражение . 4. В блоке поливка для номера, равного 1, добавь команду, как на рис. 15.2. Рис. 15.2 5. Запусти проект и убедись, что при поливке цветка-оригинала: y цветок растет; y значение первого элемента в списке цветы увеличивается. Таким образом, мы внесли единообразие в наш протокол изменений, т. е. в список цветы. Справедливости ради надо сказать, что все эти изменения можно было не делать, а просто спрятать цветок-оригинал и увеличить количество клонов. Определение максимального цветка Искать максимальный цветок будем перебором значений списка цветы, записывая в отдельную переменную номер наибольшего цветка из просмотренных. Таким образом, нам понадобятся две переменные — для ука- 127
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 128 15. Кто больше? зания, какой именно цветок просматривается, и для сохранения номера наибольшего цветка. 1. Создай две переменные — n и самый. 2. Создай блок макс. 3. Определи блок макс следующим образом (рис. 15.3). Рис. 15.3 Как работает этот блок? А. Первая команда означает, что сначала мы выбираем наибольший цветок на клумбе из одного цветка. Вроде бессмыслица, но этот шаг позволит нам позднее обобщить действия, каждый раз добавляя по цветку к предыдущему количеству цветов на клумбе. Итак, номер наибольшего цветка на первом шаге совпадает с 1. Этот номер мы записали в переменную самый. Б. Вторая команда добавляет следующий — второй — цветок. В. Затем размеры цветов сравниваются: если размер добавленного цветка оказывается больше, чем размер
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Определение максимального цветка найденного на предыдущем шаге, то в переменную самый записывается номер добавленного цветка; если нет, то значение переменной самый не меняется. Г. Команда означает переход к рас- смотрению следующего цветка. Затем пункты «В» и «Г» повторяются для оценки размеров других клонов. В результате в переменной самый окажется номер наибольшего цветка. Рассмотрим работу блока макс на примере конкретного списка цветы (рис. 15.4). Рис. 15.4 4. Для этого заполни пустые ячейки следующей таблицы, называемой трассировочной (табл. 15.1). Таблица 15.1 Значения переменных n Самый 2 3 4 5 1 2 Условие да 129
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 130 15. Кто больше? Указание: если значение переменной меняется в ходе выполнения кода, в трассировочной таблице оно записывается под предыдущим значением. 5. Чему равно значение переменной самый в результате работы блока макс? 6. Совпадает ли это число с номером самого большого элемента в списке цветы (см. рис. 15.4)? 7. Вставь блок макс в основной код так, чтобы проверка максимального цветка происходила постоянно. Внимание! В конце блока макс номер самого большого цветка записывается в еще одну переменную — самыйсамый. Это нужно для того, чтобы сохранить номер найденного цветка, ведь переменная самый будет использоваться для постоянного поиска. 8. Создай переменную самый-самый и добавь последнюю команду в блок макс. Теперь, когда нам (и коду) известен самый большой цветок, поменяем ему вид. 9. Добавь в блок постоянную про- верку (рис. 15.5). Рис. 15.5
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Определение максимального цветка Здесь приведены команды для случая, когда наибольший цветок начинает сверкать (рис. 15.6). Ты можешь придумать свои превращения для цветка. Рис. 15.6 10. Добавь в основной код аналогичную проверку для цветка-оригинала. Как будет выглядеть ее условие? 11. Запусти проект и убедись в том, что наибольший цветок: y меняет свой вид; y когда другой цветок становится больше его, возвращается к прежнему виду. 12. Сохрани проект. 131
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 16. Проект «Подводная охота» Теперь применим наши знания в более сложном проекте. Попытаемся воспроизвести известную в Интернете игру «Подводная охота»: небольшая рыбка, управляемая стрелками, старается увернуться от более крупных рыб и съесть более мелких. При этом каждая удачная для рыбки охота увеличивает ее в размере, а столкновение с более крупной рыбой грозит ей гибелью, и тогда игра заканчивается. Рис. 16.1 1. Создай спрайт Рыбка в двух костюмах — с открытым ртом и с закрытым. На рис. 16.1 — это спрайт Shark (в центре сцены), взятый из готовой коллекции. 2. Создай переменную рост. 3. Создай два блока — начальное положение и управление. 4. Определи блок начальное положение: y место, в котором Рыбка будет начинать игру, — например, в центре сцены; y костюм — с закрытым ртом; y стиль вращения — влево-вправо; y начальный размер — значение переменной рост — например, 35.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 16. Проект «Подводная охота» 5. Определи блок управление подобно тому, как мы определяли его в проекте «Кот в лабиринте». 6. Составь основной код по образцу (рис. 16.2). Рис. 16.2 7. Запусти проект и убедись, что Рыбка управляется стрелками. 8. Создай спрайт Добыча с как можно большим числом костюмов — рыб и других морских обитателей. Этот спрайт будет имитировать все разнообразие подводного мира. Мы создадим четыре клона Добычи, спрятав для простоты оригинал. 9. Поскольку наша добыча должна уметь плыть и реагировать тем или иным образом на встречу с Рыбкой, создай два блока с числовым параметром номер — плыть и встреча: . Параметр номер даст нам возможность отличить один клон от другого. Добыча в этом проекте нас интересует исключительно с точки зрения размера, поэтому в список для работы с клонами мы будем записывать их размеры. 10. Создай список добыча. 11. Создай переменные: y глобальную — количество; y локальные — размер и № добычи. 12. Создай блок создание клонов. 133
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 134 16. Проект «Подводная охота» 13. Определи его точно так же, как мы определяли аналогичный блок в главе 11 (см. рис. 16.2). 14. Создай основной код для Добычи, состоящий из двух команд: спрятаться; создание клонов. Код когда я начинаю как клон, по идее, должен был бы выглядеть так, как на рис. 16.3. Рис. 16.3 Однако в этом случае, пока добыча плывет, она не сможет реагировать на встречу с Рыбкой, и наоборот. Эти действия должны выполняться одновременно! Поэтому нам придется создать два кода когда я начинаю как клон (рис. 16.4). Рис. 16.4
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 16. Проект «Подводная охота» Такая организация кодов называется параллельным программированием. Теперь пора определить блоки плыть и встреча. Наша добыча в случайном костюме должна появляться в случайном месте на одном из краев сцены, плыть в случайную точку противоположного края сцены и исчезать. На каком именно крае — левом или правом — будет появляться добыча, будем решать тоже с помощью генератора случайных чисел, имитируя подбрасывание монетки (рис. 16.5). Рис. 16.5 15. Какой параметр в команде отвечает за попадание на край сцены? Заполни табл. 16.1, указав в пустых ячейках число или диапазон чисел. Таблица 16.1 Положение Координата х Координата у Левый край Правый край 16. Определи блок плыть, обеспечивающий: 1) задание значения локальной переменной размер — случайным числом, например от 1 до 100; 135
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 136 16. Проект «Подводная охота» 2) запись этого значения в список добыча под соответствующим клону номером; 3) задание размера клона, равного значению переменной размер; 4) задание клону случайного костюма; 5) установку нужного стиля вращения. Какого? 6) появление клона на сцене (ведь оригинал мы спрятали — см. п. 14); 7) выбор точки появления клона — на правом или левом краю сцены в зависимости от сгенерированного кодом случайного числа (см. блок-схему на рис. 16.5); 8) движение клона (команда плыть) к противоположному краю сцены; 9) исчезновение клона после достижения им противоположного края сцены. 17. Активируй команду для добычи (а не для всего проекта!). 18. Проверь: y создались ли четыре клона; y появляются ли они с обоих краев сцены; y разные ли у них: 9 скорость; 9 размер; 9 вид; исчезают ли клоны, достигнув противоположноy го конца сцены? Чтобы оценить результат встречи добычи с Рыбкой, нужно сравнить их размеры. 19. Где хранится размер каждого клона? 20. Создай блок схеме на рис. 16.6. согласно блок-
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 16. Проект «Подводная охота» Рис. 16.6 21. Придумай, какой звук издаст добыча — радостный, кровожадный или победный, если она окажется больше Рыбки? 22. Запиши звук с помощью микрофона или найди его среди звуков в коллекции Скретча. 23. Как ты думаешь, кому адресовано сообщение: «Ешь!»? 24. Как, по-твоему, Рыбка должна прореагировать на встречу с добычей? 25. Добавь код для Рыбки . 26. Можно ли было привязать блок встреча не к добыче, а к Рыбке? Если да, то как? Если нет, то почему? 27. Запусти проект и проверь, что происходит при встрече Рыбки с добычей. y Исчезает ли добыча после того, как ее съест Рыбка? 137
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 138 16. Проект «Подводная охота» y Вырастает ли Рыбка после того, как она съест добычу? Как и с помощью чего это можно проверить? y Заканчивается ли игра, если добыча оказывается слишком большой для Рыбки? Теперь надо подумать о том, как и когда закончится игра, если Рыбка станет больше всех своих потенциальных противников! 28. Определи по блоку плыть, какой в твоем проекте возможен максимальный размер добычи? 29. Создай еще один блок — конец. 30. Определи его, например, так, как на рис. 16.7. Рис. 16.7 31. Каким должно быть условие в блоке конец? 32. Добавь команду конец в основной код для Рыбки. 33. Запусти проект и сыграй за Рыбку. 34. Какого размера удалось достичь твоей Рыбке за первую же игру? Возможно, кое-какие параметры стоит изменить — например, первоначальный размер, время ожидания добычи и т. п. 35. Внеси изменения в проект, если это требуется. 36. Сохрани проект.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Заключение Дорогой друг! Теперь ты владеешь новыми инструментами, знаниями и умениями. Главное — ты можешь творить! Скретч 3.0 позволил тебе приобщиться к достаточно серьезным темам математики и программирования. Хотя, конечно, это еще далеко не все, что позволяет исследовать и использовать Скретч. Если ты раскроешь список функций, которые «понимает» Скретч, то увидишь много незнакомого: Кроме того, мы совсем не рассматривали возможности новых расширений, связанных с использованием робототехнического оборудования. Это тема для отдельной книги. Что ж, у тебя все впереди! Пусть твоим девизом станет: «Бороться и искать, не найти и не сдаваться!».
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки Глава 3
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки 141
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 142 Коды для самопроверки Глава 4
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки 143
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 144 Коды для самопроверки Глава 5
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки Глава 6 145
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 146 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки 147
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 148 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки 149
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 150 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки Глава 7 151
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 152 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки 153
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 154 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки 155
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 156 Коды для самопроверки ° ®
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки Глава 8 ° ® 157
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 158 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки Глава 9 ° ® 159
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 160 Коды для самопроверки ®
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки ° 161
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 162 Коды для самопроверки Глава 10 ° ®
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки ° ® 163
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 164 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки 165
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 166 Коды для самопроверки Глава 11 ° ®
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки Глава 12 167
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 168 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки 169
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 170 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки Глава 13 Проект «Лабиринт с потайными ходами» 171
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 172 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки Глава 14 Проект «Цветник» 173
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 174 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки Код для поливальщика: 175
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 176 Коды для самопроверки Глава 15
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки 177
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 178 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки 179
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 180 Коды для самопроверки Глава 16 П. 13: а) для Рыбки:
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки б) для Добычи: 181
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 182 Коды для самопроверки
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Коды для самопроверки 183
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Использованные материалы 1. Пашковская Ю. В. Творческие задания в среде Scratch: рабочая тетрадь для 5–6 классов. — 3-е изд. / Ю. В. Пашковская. — М.: Лаборатория знаний, 2018. — 192 с.: ил. 2. https://www.youtube.com/watch?v=mHm1lau 7O20 — клонирование спрайтов. 3. https://geektimes.ru/post/283118/ для клонов. — переменные 4. https://wiki.scratch.mit.edu/wiki/Detecting_ Clones — идентификация клонов. 5. https://wiki2.org/ru/Скретч_(язык_программирования) — модификации Скретча. 6. http://distan-school.ru/uploads/metodichka/scratch. pdf — справка по Скретч 2.0. 7. https://scratch.mit.edu/projects/60521212/#editor — программа, позволяющая вводить текст по-русски. 8. https://portal.ort.spb.ru/lib/Documents/LogoGallery/ fractals.htm — коллекция фракталов.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Минимальные системные требования определяются соответствующими требованиями программ Adobe Reader версии не ниже 11-й либо Adobe Digital Editions версии не ниже 4.5 для платформ Windows, Mac OS, Android и iOS; экран 10" Учебное электронное издание Серия: «Школа юного программиста» Пашковская Юлия Вадимовна SCRATCH 3.0: ТВОРЧЕСКИЕ ПРОЕКТЫ НА ВЫРОСТ Рабочая тетрадь для 7–8 классов Ведущий редактор Ю. А. Серова Ведущий методист А. А. Салахова Художественный редактор В. А. Прокудин Технический редактор Т. Ю. Федорова Корректор И. Н. Панкова Компьютерная верстка: Е. Г. Ивлева Подписано к использованию 26.05.19. Формат 155×225 мм Издательство «Лаборатория знаний» 125167, Москва, проезд Аэропорта, д. 3 Телефон: (499) 157-5272 e-mail: info@pilotLZ.ru, http://www.pilotLZ.ru
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» Программирование – это грамотность XXI века! Книги новой серии «Школа юного программиста» издательства «Лаборатория знаний» построены на методике пошагового обучения программированию. Следуя этой методике, любой желающий, от школьника до студента вуза, сможет научиться писать программы, разрабатывать мобильные приложения и компьютерные игры и даже освоить технологии машинного обучения и нейросетей. В серию входят следующие учебные пособия: • «Учимся вместе со Scratch: программирование, игры, робототехника» (5–6 классы) • «Scratch 3.0: от новичка к продвинутому пользователю. Пособие для подготовки к Scratch-Олимпиаде» (1–11 классы) • «Творческие задания в среде Scratch. Рабочая тетрадь для 5–6 классов» • «Scratch 3.0: творческие работы на вырост. Рабочая тетрадь для 7–8 классов» • «Создаем игры с Kodu Game Lab» (4–5 классы) • «Python для начинающих – от основ до ООП и приложений» (7 класс) • «Олимпиадное программирование на Python» (7–8 классы) • «C# – новый учебный курс программирования от основ до продвинутого уровня» (8–9 классы) • «Android-разработка: мобильные приложения» (8–9 классы) • «Web-разработка: создай свой идеальный сайт. Обучаемся тонкостям HTML, HTML5, CSS3, SQL, PHP, JavaScript» (8–10 классы) • «Основы искусственного интеллекта и нейросетей» (10–11 классы, студенты) и другие.