Для чего нужна программа scratch
Что такое Scratch?
Содержание:
Заканчивая в середине 90-х общеобразовательную школу, я и понятия не имел, что такое программисты и программирование. Да, у нас был одни год предмет под названием «информатика», но понять что-то без желания и компьютера было невозможно. Сейчас, по прошествии такого большого периода времени, понимаю, что в моей жизни всё могло бы быть по-другому, если бы в наше время была возможность пройти обучение на Скретч. Итак, приступим баловаться изучать основы этой занимательной среды программирования! Заранее желаю всем успехов в этом направлении информатики!
И хотя среду Scratch, до сих пор не проходят на уроках информатики, в настоящее время во многих школах и СЮТах существуют кружки по внеурочной деятельности по изучению этой программы. Также есть учителя-энтузиасты, которые на своих уроках внедряют общедоступные или свои личные разработки на Скретч. Ведь многим детям, да и чего греха таить, взрослым, очень интересно покопаться в этих разноцветных блоках.
Что такое Scratch?
Однако авторы задумали Scratch не только для изучения программирования, но и для того, чтобы дети могли создавать свои творческие проекты и делиться ими с окружающими. Поэтому в Scratch можно создавать анимацию и живые открытки, рисовать мультфильмы, писать музыку, делать мультимедийные проекты и тому подобное.
Этот факт и ряд других преимуществ дают программе широкие возможности по продвижению её в народные массы. Именно поэтому она стала так популярна и востребована. Тем более она явлется отличным трамплином для плавного перехода в мир настоящих программистов. Мы вам покажем, что с помощью Скретч можно писать достаточно сложные программы, над которыми тоже нужно поломать голову.
Для какого возраста подходит Scratch?
После изучения Scratch вы сами сможете нести его в массы и быстро научить его азам свою бабушку или младшего брата (сестру). Образовательная среда Скретч объединяет всех школьников в мире, поэтому вы сможете делиться своими программами с детьми живущих на других материках.
Кто придумал Scratch?
В 2003 году небольшой группой исследователей под предводительством Митчела Резника из MIT Media Lab решила создать понятный для многих визуальный язык программирования. В результате их стараний в 2007 году появился Скретч. Поэтому создавать компьютерные программы могут уже даже дошкольники.
Какие существуют версии Scratch?
За время своего взросления Скретч развивался и сменил несколько версий.
К устаревшей можно отнести версию 1.4 (Скачать можно по этой ссылке http://scratch.mit.edu/scratch_1.4/ )
Современная версия имеет обозначение 2.0. Последнее обновление идёт под номером 451.
Откуда взять Scratch?
Онлайн-версия программы Скретч
В общем, плюсов великое множество, однако под рукой у вас всегда должен быть доступ в Интернет и ваш браузер должен поддерживать загрузку Flash-роликов. Кстати оффлайн-версия программы тоже даёт возможность загружать готовые проект на этот сайт через существующий аккаунт.
Статья «Язык и среда программирования XXI века — Scratch (Скретч)»
Среда программы Scratch
Итак, в в верхней части программы находится меню команд (Рисунок1):
Создание диалога в среде Scratch
Создание диалога является важнейшим элементом, присутствующим в любом фильме, мультфильме, компьютерной игре, интерактивной презентации, в компьютерной обучающей программе и т д.
Выберем фон на котором будет развиваться все действие. Для выбора сцены диалога возьмем картинку из коллекции, которая поставляется вместе со средой Scratch( Скретч). Под рабочей областью находится серая область. Щелкнем мышью на сцене. В центральной серой области экрана щелкнем мышью на кнопке “Редактировать” и попадем в среду графического редактора. Жмем мышью на кнопке “Импорт” и выберем папку “Outdoors”.Находим картинку под именем
“boardwalk” и жмем на кнопку “OK”.Фон для действия готов. Теперь, подготовим спрайты. Их два, так как два действующих лица, но может быть и больше, в зависимости от замысла проекта. Под рабочей областью находятся три кнопки “Рисовать новый объект”, “Выбрать новый объект из файла”, “Выбрать случайный объект”. Выберем среднюю кнопку “Выбрать новый объект из файла”,предварительно удалив спрайт кота, данный по умолчанию, щелкнув на нем правой кнопкой мыши и в выпавшем контекстном меню выбрав “Удалить”.Находим папку “People”и оттуда знакомым образом загружаем файл “girl1-standing”. В центральной части экрана появляется Спрайт1.У спрайта есть две кнопки: “Рисовать” и “Импорт” Щелкнем на кнопке “Импорт” и загрузим файл “girl1-standing2”. Это новый вид нашего спрайта или новый костюм, т.е. благодаря этому приему происходит изменение внешнего вида объекта. Во внутреннем графическом редакторе рисуем третий вид объекта, предварительно загрузив туда файл “girl1-standing2” и назовем его “girl1-standing3”. Можно создать многообразие костюмов, фактически детально прорисовав анимацию. Это зависит только от фантазии автора. Второй спрайт создаем аналогичным образом, только файлы называются соответственно “girl2-standing”, “girl2-standing2” и “girl2-standing3”. Внешний вид объектов создан.(Рисунок2). Переходим к программной части проекта.
Щелкнем мышью на первом спрайте “Спрайт1”, в центральной серой области команд жмем на вкладку “скрипты”. На рисунке (Рисунок3), можно посмотреть весь перечень команд для первого объекта программы. Между вопросом и ответом задано время 2 секунды. Время подобрано экспериментальным путем. Чем дольше планируется ответ, тем дольше должно быть подобрано время ожидания. Переходы к костюмам нужны для анимации фигур. В конце диалога обе девочки покидают сцену. Именно для этого нужны команды в конце “спрятаться” и в начале “показаться”. По этой причине и нужны начальные координаты для исходного положения фигур. Для задания координат или их определения в Scratch достаточно дважды щелкнуть на объекте и в левой области среды Scratch,в области команд, в группе синих команд движения “идти в х: у: ” автоматически появляются координаты, соответствующие положению фигуры на сцене. Это очень удобно, не надо вручную подбирать координаты положения. Интересны с точки зрения программирования и команды цикла и ветвления. С точки зрения теории программирования любопытна команда цикла “всегда”. В команде “идти” указано количество шагов 2. Положительное значение шага говорит о том, что спрайт перемещается вправо. Так как фигура девочки располагается в левой части сцены, то уходя с нее она должна перемещаться вправо. Команда “если” достаточна любопытна. В качестве условия используются команда определения координаты х из синей группы команд движения и зеленого “ящичка чисел”. В начале программы поставлена команда “ когда щелкнут по флажку”.С этой команды начинается большинство программ написанных в Скретч. Команда “Перейти назад на 1 слоев” нужна для помещения вперед или назад по отношению к другим объектам и самой сцены. Перейдем ко второму спрайту, который по программе называется “Спрайт 3”. ”. На рисунке (Рисунок4), можно посмотреть весь перечень команд для первого объекта программы. Все вышесказанное справедливо и для этого спрайта. Фигура девочки располагается справа. Следовательно, перемещаясь влево, она исчезает со сцены. Поэтому в команде “идти” указано отрицательное значение шага. В группе скриптов встречается команда “думать”. Она ничем функционально не отличается от команды “говорить”, только внешним видом. Диалог можно оживить парусником или кораблем, проплывающим по морю на заднем плане, который можно загрузить из папки “Transportation”. Можно населить набережную другими персонажами, проходящими мимо, бросающие реплики и т. д. Все только ограничивается фантазией автора проекта. Более детально можно прорисовать анимацию, используя больше костюмов. Все эти действия, безусловно направлены в сторону улучшения проекта. (имя файла готового проекта Приложение1 или английский вариант Приложение2) Этим Скретч и хорош. Можно взять чужую идею, проработать ее, добавить туда свое видение данного проекта. И проект приобретает второе дыхание. Следует отметить, что это не единственная возможность организации диалога в среде Scratch. Существуют и иные способы. После отладки программы всегда есть возможность опубликовать свой проект, но вначале его нужно описать.
Для этого жмем левой кнопкой мыши на белый листок бумаги с загнутым концом, находящимся в правом верхнем углу области экрана. В появившемся окне “описание проекта” пишем, что собой представляет данный проект, для чего он предназначен. Это нужно обязательно сделать перед публикацией, чтобы при загрузке на свой компьютер облегчить другим “скретчерам” поиск нужных проектов. Не всегда в Сети попадаются хорошие проекты, часто попадаются проекты и низкого качества, но даже плохие учат тому или иному способу применения каких-либо команд, каких-либо приемов, заточенных именно под Scratch. Scratch учит детей делиться результатами своего творчества, позволяет находить в проектах других новые идеи для творчества, делает процесс преподавания увлекательным и наглядным, а порой просто захватывающим. Поэтому среди многообразия компьютерных программ, предлагаемых школе для обучения учащихся, Scratch заслуживает безусловного внимания учителя.
Scratch для «продвинутых»
Клонирование и переменные в Scratch
Моему ученику нравилась игра — «Зомби против растений». И ему было интересно самому запрограммировать её. Давайте вспомним как данная игра работает? С правой стороны у нас есть шеренга растений, которая расстреливает приближающихся зомби.
Есть множество решений данной задачи, но на мой взгляд более элегантное решение — задействовать минимально возможное количество спрайтов, т.е. использовать клонирование.
Как сделать так, чтобы у каждого отдельного клона был собственный уровень жизни? Что выбрать переменные или списки? Сделали попытку использовать списки, но после более детальной проработки поняли, что данная структура данных не помогает решить проблему. У переменных и списков, в Scratch есть 2 типа видимости для каждого типа данных — это «для всех спрайтов» или «только для этого спрайта». Пришлось проверять область видимости. Начали мы с переменных.
Дойдя до рабочего варианта переменной с областью видимостью «только для этого спрайта». В классических языках программирования такой тип видимости называют — локальным или приватным в зависимости от контекста.
Оказывается, что если эта переменная с данной областью видимости используется в клоне, то в клоне создается экземпляр переменной, принадлежащий конкретному клону и который используется для внутренних вычислений/работы клона. В нашем случае, у каждого клона есть своя «жизнь». Если стало интересно, то советую обратиться к справочнику. А вот картинка, которая показывает, как спрайты или клоны работают с переменными разных типов видимости.
Переменная с областью видимости «для всех спрайтов» (рисунок слева) — одна на всех. Кстати, здесь вы можете с детьми посмотреть работу с критическими секциями и что такое гонка за ресурс. А если область видимости переменной — «только для этого спрайта», то у спрайта и у его клонов появляется собственная переменная с тем же именем, с которой они работают (рисунок с права). И клоны не имеют доступа к переменной оригинала и переменной другого клона.
Это стало неожиданным и приятным открытием свойств Scratch для создания подобных алгоритмов.
ВАЖНО: Переменная — это очень мощный инструмент настоящего программиста, поэтому я сразу учу детей правильному именованию переменных, так как этот навык поможет им в проектах разной сложности.
Имена объектов как их идентификаторы
ВАЖНО: все переменные с зоной видимостью «только для этого спрайта».
Данный инструмент для меня стал совсем неожиданным. Давайте начнем с истории о том, как мы с учеником наткнулись на данную особенность языка. Мой ученик решил, создать игру с «искусственным интеллектом». Игра представляет звездные войны на космических кораблях и у игрока есть возможность управлять одним кораблем, в то время как противники гоняются за вами и за друг другом. Чтобы они могли преследовать вас или друг друга, им нужно как-то принимать решение о том, кого преследовать. Данную задачу можно решить в лоб и задать очередность преследования кораблей, но игра потеряет свою интеллектуальность и быстро наскучит. Поэтому ученик решил настроить интеллект таким образом, чтобы корабли с интеллектом преследовали ближайшего противника. Давайте посмотрим, как он начал решать данную задачу.
На мой взгляд хорошее решение для создания быстрого прототипа. Но какие ограничения здесь есть? Первое, усложнение кода по мере добавления новых кораблей. Следовательно, сложность кода повышается и не исключены мутации кода из-за усложнения. Время поиска ошибки и отладки алгоритма будет расти. И конечно, никто не отменял такую прикольную метрику, как старение кода (advance level SW Development). Что же делать? А делать необходимо следующее, нужно сделать обобщеный алгоритм, который будет динамично приспосабливаться к увеличению или уменьшению количества кораблей.
Для данного алгоритма нам и понадобиться свойство языка — имя как идентификатор объекта. Пришло время больших изменений и здесь вы, как учитель, можете рассказать про такое явление как рефакторинг. Это последовательное изменение кода, улучшение его структуры и его оптимизация. А главное, чтобы каждое изменение не ломало работу программы, и объем изменений тоже должен очень аккуратно подобран. Слишком много изменений — плохо, слишком мало — долго. Сформированный навык рефакторинга даст преимущество и эффективность работы программиста. Но для формирования навыка нужно работать головой, а не просто тыкаться. У меня получилось сделать 4 изменения в первоначальной программе и результат не изменился.
Заметьте, что я еще не удалил блоки, а оставил их. Зачем? Потому, что если что-то пойдет не так, мы можем вернуть предыдущий вариант, начав все заново. Но как только я проверю правильность выполнения обновленного скрипта, я сразу же их удалю, чтобы не отвлекаться на них в последующем.
Заметили? Сейчас в блоке «повернуться к …» стоит переменная и эта штука работает. Т.е. мы минимальными усилиями проверили, что данный подход работает. Это просто круто. Теперь мы можем начать писать алгоритмы, которые позволят определять объект преследования ближайшего корабля.
Что нам пригодится? Это из структур данных — это переменные и списки. Из алгоритмов — это нахождение минимального числа (расстояния) в списке. Еще нам необходим алгоритм, который определит имя объекта для преследования по минимальному расстоянию.
Сейчас будет написано много кода. Но для того, чтобы потом не захлебнуться и не запутаться в куче скриптов, нам необходимо использовать еще одну классную функцию, а именно создание собственных блоков. Эта функция очень мощная, но ее редко используют школьники, да и некоторые программисты, а ведь она позволяет создать понятный с первого прочтения алгоритм программы. Кстати, можете почитать про приемы создания понятного кода в книге Мартина Фаулера «Рефакторинг. Улучшение существующего кода»
Как и перед любым масштабным строительством нам необходимо все спланировать. Давайте спланируем в каком порядке будем разрабатывать блоки:
Для того, чтобы создать обобщенный алгоритм нам чем-то нужно пожертвовать, например, оригинальными именами спрайтов, придется их стандартизировать и получим следующий расклад.
И теперь мы готовы описать 1 часть программы. Все пишем для 1-ого корабля. Запускаем отдельно данный скрипт и смотрим результат. Поехали!
Если мы добавим новый корабль, нам нужно изменить в данном алгоритме лишь одну циферку. Клево? Клево!
Погнали дальше. А давайте научим его 2 алгоритму. Смотрим, что получилось. Это сразу конечный результат со вспомогательными функциями.
Ура! Работает. Проверить это можно следующим образом, должен быть обязательно 0 одним из значений в списке расстояний. Если у вас это не так, ищите ошибку.
Едем дальше! Поиск минимального расстояния. Заметили, что расстояние всегда положительно. И всегда будет минимальное число — 0. Ай-я-яй! Вывод — искать минимум, но не ноль. Можете попробовать свои силы и оптимизировать код самостоятельно, чтобы не делать расчет расстояния от корабля 1 до корабля 1 (это не опечатка).
Обучаем спрайт новой функции и получаем.
Не забываем проверять! Для этого можно даже остановить игру и запустить отдельный скрипт.
Мы написали все, что необходимо, теперь главное правильно использовать данные функции.
Если у вас все работает правильно, то вы должны увидеть следующее:
Заметили, что корабль с «искусственным интеллектом» разрывается между разными противниками. Вы можете усовершенствовать программу и усложнить принятие решения. Например, если у преследуемого корабля осталось мало жизни, то он добивает его, а если он нашел, ближе и с еще меньшим здоровьем, то добить сначала слабейшего.
Кстати, в данной программе можно уменьшить количество действий и усовершенствовать алгоритмы. Попробуйте свои силы. Взять данную программу можно здесь.
Подводим итоги
Вот на таких кейсах я узнал, как Scratch дает возможность ученикам быстрее освоить множество реальных техник программирования. На нем можно рассказывать про работу критических секций, про обобщенные алгоритмы, про переменные и их области видимости, про создание собственных блоков и структурирование кода. А также на данном языке можно рассказывать про профессиональные навыки, например, рефакторинг.
Это лишь малая часть инструментария программиста, но она являет очень важной. А в Scratch это объяснить становится чуточку легче.
Скретч — это ерунда?
Ко мне на занятие приходит новый мальчик лет 10 лет, Максим. Перед началом он презрительно осматривает группу ребят 7-9 лет, все младше него. И говорит: Антон, ну а Скретч же уже нигде не используют, сейчас же на более сложных языках детей учат программировать?
Я: есть и другие языки, а ты на Скретче умеешь работать?
Он: Ну да, делал программы.
Я: отлично, садись, посмотрим что ты умеешь.
Максим садится рядом с 8-летним Сережей, фанатом наших занятий. Сегодня задание такое: я словесно описываю программу, а ребята сами ее должны сделать. Тренируем внимание к требованиям и заодно проверяем текущие навыки.
Программа такая: наверху экрана плавают 5 воздушных шариков, внизу — ракета, которой мы управляем клавишами влево-вправо. По нажатию на пробел ракета должна вылетать наверх и лопать шарики. Когда все шарики лопнули, показать экран победы.
Ребята бросаются в бой — кто-то начинает с расстановки шариков, кто-то с ракеты и ее управления. Через несколько минут показывают свои программы — шарики висят, ракета ездит влево-вправо.
Замечаю, что новенький Максим сидит, в ступоре глядя, как Сережа рядом быстро делает игру.
— Не пойму, с чего начать?
Я подсказываю — выбери шарики, задай им положение на сцене.
— А как это сделать?
Показываю…
— А как стрельбу сделать?
Рассказываю — делаешь отдельный объект-пулю, она невидимо перемещается за ракетой и следит за нажатием пробела — когда нажимаем, она летит наверх.
— Ничего не понял — как невидимо перемещается, как летит?
В итоге намучался я с этим опытным мальчиком. Как делать плавное движение — не знал, с координатами не разобрался, клонирование не понял. Оказалось, что в такой простой штуке, как Скретч, есть вещи, которых парень не знал. И это базовые вещи — движение, управление объектами…
Зато в конце занятия он начал мне рассказывать, что создает сервер для Майнкрафта.
Такую точку зрения среди ребят я встречаю не первый раз. Что визуальное программирование, где нужно блоки перетаскивать — это просто стыд и позор, ясельная группа:
А вот сервера создавать — для GTA или Майнкрафта — это настоящее крутое программирование.
Действительно ли Скретч — бесполезная трата времени и нужно ли переключать детей на более сложные вещи? Давайте смотреть.
Мнимая крутизна
Что означает, что ребенок создает игровые сервера? Говоря простыми словами, он берет готовую игру, копирует ее и меняет настройки. Что меняет:
— Притяжение (гравитацию)
— длительность дня
— силу удара персонажей
— количество жизней у героя
И задача программирования в том, что ребенок в четко оговоренном месте меняет несколько чисел.
/time set day — и в Майнкрафте наступил день.
/summon horse — и уже бежит квадратная лошадь
Вроде бы в этом нет ничего серьезного? Да, серьезного в выполнении простых команд ничего нет. Умственных усилий при таком программировании почти не прикладывается. Но у ребенка перед глазами совсем другая игра, к которой он приложил руку. И ему кажется, что он сам создал весь этот новый мир. Это открывает ребенку новые возможности:
— Можно говорить друзьям “я вчера новый сервер Майнкрафта сделал”
— Можно считать себя настоящим программистом, который пишет код
— Помечтать о том, что в его версию майнкрафта будут играть тысячи человек и на этом можно заработать
Пар из ушей
С чего начну? Наверное, с башни, которая стоит посередине и просто стреляет. Потом сделаю монстров, чтобы просто бежали. Потом уже все остальное.
Готовой башни нет, надо поискать в интернете. Вот эта подходит. Добавляю в программу, делаю первые скрипты: чтобы была посередине, чуть поменьше размером.
Так, теперь стрельба. Делаю пулю, пусть следит за направлением мышки. Делаю обработчик клавиши пробел — теперь пуля вылетает в сторону курсора мыши. Отлично!
Непорядок, у нас получается только одна пуля, которая все время вылетает при выстреле. Получается, нельзя выстрелить, пока пуля не улетела за край экрана? Придется заморочиться с созданием клонов — пусть летят клоны, настоящая пуля будет скрыта.
А лучше сделать перерыв, чайку попить…
Оставим ребенка, пусть отдохнет. Вы тоже заметили, что у него шестеренки в голове работали на полную мощность?
Это и есть настоящее программирование — когда приходится решать массу задач, не теряя из виду главные — какую игру я делаю, на каком этапе я сейчас нахожусь. Идти на компромиссы, подсматривать в видео-обучалки, задавать вопросы на форуме, искать в интернете.
Пар из ушей во время программирования — это нормально, так и должно быть. Когда дети пишут программы на Scratch, то пар идет.
Бесполезное развлечение?
Теперь о том, полезны ли занятия Скретчем с детьми или это баловство?
Давайте начнем с плохого, с минусов Скретча:
👎 Из-за блоков программы получаются громоздкими. Блоки с движениями героя и сменой его внешности сразу занимают много места. Если же мы начинаем добавлять разные штуки вроде переходов по уровням или стрельбы, программа быстро вырастает.
Дети могут потеряться в программе, их нужно специально учить организовывать свой код. Иначе получится свалка из разных блоков.
👎 Перетаскивание блоков утомляет. Чтобы собрать простое движение героя, нужно сбегать за разными блоками — движение, проверки на нажатие клавиши, циклы. Первые программы получаются медленно. Должно пройти время прежде чем ребенок начнет быстро ориентироваться в готовых кирпичиках команд.
👎 Сложно сделать что-то сложное. В Скретче нет готовых игровых блоков — физики игры, управления персонажами, собиранием предметов и так далее — все нужно делать своими руками. Поэтому выйти на новый уровень, создать сложные и интересные игры не так-то просто. Подавляющее большинство детских проектов однообразны и примитивны — догонялки, стрелялки, кликеры. Создавать что-то сложнее детям самим непросто, их нужно этому специально учить.
Теперь поговорим о хороших сторонах Скретча.
⭐ Главная польза в том, что во время занятий ребенок активно думает. Ему приходится. Ничего не делается само собой. Чтобы герой плавно двигался, прыгал с одной стороны карты на другую, выпускал по несколько пуль сразу — все это нужно делать своими руками. Использовать клоны или нет? Как перебрасывать героя по координатам? Масса задач и проблем, которые приходится решать здесь и сейчас. Отличная тренировка для мозгов.
⭐ Дети осваивают простые инструменты компьютерного языка — циклы, условия, алгоритмы. Да, это происходит в визуальном виде, вместо настоящего
12 комментариев
А как попасть к вам на уроки программирования?