Как сделать препятствия в скретч
Программирование мини-игры в программе Скретч
На свете существуют множество языков программирования, но программирование для детей проще начинать с программ, которые предполагают создание игровой ситуации с героями или объектами, которые двигаются, меняются или взаимодействуют. К таким программам относятся ПервоЛого и ЛогоМиры, а также программа Скретч (Scratch), бесплатно распространяемая для любой операционной системы. Сайт находится по адресу http://scratch.mit.edu. С января 2019 года разработчики выпустили новую версию 2.0. Она немного отличается от предыдущих версий.
В основе Scratch лежит графический язык программирования. Для того чтобы создать скрипт (программу для каждого объекта) нужно просто совместить графические блоки вместе, перетаскивая готовые блоки из левого поля в поле создания скрипта (программы).
Блоки разбиты на несколько типов:
Блок «Перо» в новой версии надо добавлять из меню «дополнительные блоки».
На уроках информатики учащиеся постепенно знакомятся с командами различных блоков и их использованием. Это позволяет на одном из уроков перейти к реализации проекта по созданию мини-игры.
Во многих компьютерных играх игровое поле представляет собой площадку, разбитую на квадраты (как шахматная доска), и требуется собрать какие-либо предметы – это могут быть яблоки, монеты, звезды или что-то другое. Для краткости будем называть эту игру «Собери» (презентация).
Для создания игры нам необходимо проделать несколько этапов:
1 этап. Создание игрового поля
Для создания игрового поля мы должны войти в меню «Сцена», вкладка «Фоны» и с помощью инструментов для рисования «прямоугольник» и «линия» создать поле 8х8 клеток. (рис. 1). Такого размера вполне достаточно для создания первой игры. При желании можно добавить какой-либо текст (кнопка Т).
Рис. 1. Создание игрового поля.
2 этап. Расстановка игровых объектов
На втором этапе мы расставляем объекты разных видов (рис. 2 и 3). Для этого используем добавление спрайтов из библиотеки. Объекты в нашей игре будут двух видов – те, которые по условию надо собрать (например, яблоки), и те, которые будут являться препятствиями. Количество объектов можно задавать самостоятельно. Рекомендую размер объектов уменьшить до 50.
Рис. 2. Добавление объектов на игровое поле.
Рис. 3. Добавление объектов-препятствий на игровое поле.
3 этап. Программирование «героя»
В качестве героя можно оставить исходного спрайта-котенка под именем «Спрайт1». При желании можно выбрать (назначить) «героем» любого другого. Имя спрайта также можно изменить.
В начале игры наш герой должен встать в исходную точку, которую мы определяем с помощью координат. Поэтому команда должна выглядеть так:
Рис. 4. Задание начальной координаты для спрайта.
При необходимости можно задать и начальное направление – например, «повернуться в направлении 90».
Далее для того, чтобы наш спрайт ходил сразу по клеткам, мы должны запрограммировать кнопки управления его передвижением (стрелки вверх, влево, вправо, вниз), которые удобно расположены на клавиатуре.
Команды для кнопок должны выглядеть следующим образом:
Рис. 5. Программирование управляющих кнопок (стрéлок).
Этап 4. Программирование собираемых объектов
Для того, чтобы любой объект реагировал на прохождение «героя» и мог менять свою форму или исчезать, необходимо, чтобы он совершал небольшое движение. Это можно задать двумя способами:
Рис. 6. Команда для собираемых объектов.
Чтобы объекты можно было «восстановить» в начале игры задаем дополнительную команду:
Рис.7. Команда для «восстановления» объектов.
Эти команды надо задать для каждого собираемого объекта (яблока, монеты или звезды).
Этап 5. Программирование препятствий
На игровом поле должны также присутствовать объекты, которые будут усложнять игру, т.е. являться препятствиями. Чтобы они могли взаимодействовать с героем, когда он попадает на соответствующую клетку, необходимо им также задать небольшое движение (аналогично собираемым объектам).
Взаимодействие с героем можно задавать по-разному: препятствие может «взрываться», «переворачиваться» (т.е. изменить свой костюм), выдавать сообщение «Ты проиграл» или «Здесь ходить нельзя» и т.д. Можно задать команду, которая будет перемещать героя в начало игры, т.е. в исходную точку. Варианты могут придумать сами дети. В начале игры также надо вернуть этим объектам исходный костюм.
Рис. 8, 9. Программирование препятствий.
Этап 6. Программирование кнопки финиш
По желанию можно создать кнопку «Финиш» и поместить ее в конце игрового поля. Кнопка «Финиш» программируется аналогично предыдущим объектам. Отличие будет в тех командах, которые будут выполняться при реакции на прохождение Спрайта. Например, можно задать «Говорить «Ты победил!» или «Переходи на второй уровень» и при этом кнопка может менять цвет или мигать и т.д. Здесь дети могут использовать свою фантазию и желание.
Рис. 10. Изменение кнопки «Финиш».
Рис. 11. Программа для кнопки «Финиш».
Заключение
Подобную игру можно создать за 1 урок или одно занятие. Практика показывает, что подобные задания дети выполняют с удовольствием и могут проявить фантазию или использовать более сложный набор команд для создания подобной игровой ситуации. При этом ученики не замечают, как знакомятся с программированием и таким важным моментом, как отладка программы, которая требует усидчивости, терпения и умения видеть и исправлять ошибки в своей программе.
Scratch действительно относится к группе мультимедийных развивающих сред программирования.
Как сделать прыжок в scratch
Проводя очередные занятия по детскому программированию на базе среды разработки Scratch у двух учеников обучающихся на курсе возникли сложности с программированием прыжка у персонала. Так как код для действия персонажа не является очевидным и простым, в статье я опишу полный цикл программирования обычного прыжка. Описанный ниже код позволит герою прыгать только вверх, а не вверх и вперед. В конце материала будет указанна ссылка на программирование запрыгивания на отдельный спрайт, а так же написание кода для прыжка вверх и вперед.
ВНИМАНИЕ!
Разрабатывая бесплатный курс по детскому программированию в scratch 2 я подготовил 4 варианта прыжка для персонажа с кодом разного уровня сложности. Описание этой статьи относится к 3 уровню сложности. Более простые варианты запрограммирования прыжковых навыков объекта смотрите по ссылкам ниже:
Так же рекомендую ознакомиться с бесплатными уроками по Скретч 2 на другие тематики в разделе Детское программирование (перейти). Ну и конечно я буду очень благодарен за финансовую помощь! Ее вы можете оказать переводом на СберБанк Онлайн по телефону 8-977-915-25-76 или на Яндекс.Деньги по кнопке слева!
Пошаговая инструкция по программированию прыжка у персонажа в Скрейтч
Шаг первый. Начнем с управления и разместим программный код под блоком начинающем работу после нажатия на зеленый флажок. Далее заведите переменную (заходим в блок Переменные), переназовите ее и задайте значение равное 0 (обнуляем значение переменной перед запуском программы), как показано на рисунке ниже:
Шаг третий. Назначаем кнопку для прыжка через условие в команде Если … То …
Шаг четвертый. Задаем значение переменной — Скорость прыжка равное 20 (с этим параметром можно поиграться и посмотреть как измениться скорость прыжка спрайта при изменении значения переменной)
Шаг пятый. Определяем высоту прыжка персонажа в игре и делаем это за счет добавления цикла повторить несколько раз. Рисунок ниже.
Шаг шестой. Добавляем программный код, который изменяет положение персонажа игры по высоте
Для полного осознания того, какой элемент кода для чего служит попробуйте поменять значения указанные в программе. Постарайтесь понять логику описывающую прыжок. Перед переходом к следующим статьям постарайтесь самостоятельно описать прыжок вверх и вперед, а так же написать код для запрыгивания на другой спрайт.
Публикации сообщества
Шаг за шагом моделируем в Scratch гармонические колебания и упругое взаимодействие объектов
В конце данного занятия мы получим готовую компьютерную модель упругого взаимодействия объектов, которую можно будет модифицировать для того или иного частного применения. Определим основные этапы нашей работы:
Создание модели множественных столкновений на первый взгляд воспринимается невероятно сложным, однако принцип разбиения задачи на составные части позволяет собрать итоговый проект буквально «по кусочкам», а каждая отдельная подзадача сама по себе не так уж сложна.
Подготовка
Мы будем использовать визуальную среду Scratch3. Онлайн-редактор можно открыть по следующей ссылке.
Тот, кому удобнее будет работать с оффлайн-версией Scratch, может загрузить инсталляционный пакет для используемой операционной системы и установить программу на свой компьютер.
Этап 1. Воссоздаём гармонические колебания и рисуем синусоиду
Гармонические колебания в пространстве — колебания, при которых положение объекта изменяется с течением времени по гармоническому (синусоидальному, косинусоидальному) закону.
Давайте смоделируем такую систему в Scratch. Создайте новый проект, удалите из него спрайт кота, добавьте подходящий новый спрайт. Пусть это будет «Ball» из библиотеки спрайтов. Кроме того, в библиотеке фонов есть полезное для нас изображение с именем «Xy-grid», установите этот рисунок как фон, выбрав объект Сцена.
Выберите снова спрайт «Ball», переместите его в центр экрана при помощи блока «перейти в x: (0) y: (0)». Переименуйте, назвав «Мяч».
Для наглядности и гибкости проекта создайте переменные со следующими именами: «скорость», «ускорение», «масса», «жёсткость» и «деформация». Все они должны быть локальными, при создании укажите опцию «только для этого спрайта». Это позволит в нам в будущем иметь в проекте несколько спрайтов, работающих сходным образом.
По умолчанию выставлен маркер отображения значения переменной на сцене. Можно увидеть, что каждая переменная имеет префикс «Мяч» в названии.
Следует отметить, что характеристики «жёсткость» и «деформация» относятся не к самому мячу в нашей модели, а к тем условным «пружинам», на которых мяч «подвешен». Произведение жёсткости на деформацию пружины (пружин) определяет силу, которая действует на мяч.
Соберите следующий скрипт.
Запустите программу. Что произошло? Ровно ничего, и это вполне естественно. Мяч находится в точке равновесия и его начальная скорость равна нулю, поэтому он и не стал двигаться. Поменяйте начальное положение мяча, отредактировав значение X в блоке «перейти в. «.
Однако картина может быть ещё нагляднее, если заставить мяч рисовать график своих перемещений. Сделать это несложно. Понадобятся блоки из расширения «Перо», которое можно добавить кнопкой в левом нижнем углу экрана.
В разделе «Другие блоки» палитры скриптов нажмите на кнопку «Создать блок». Появится окно, в котором надо будет отредактировать название, добавить два значения и ещё одну подпись, чтобы получилось как на рисунке.
К «шапочке» (определению) блока добавьте скрипт:
Полный набор скриптов для спрайта «Мяч» теперь выглядит так.
Значения переменных, отображаемые на сцене, нам будут мешать. Снимите маркеры, чтобы спрятать их.
Запустите программу. Теперь мяч перемещается сверху вниз во время колебаний, и за ним остаётся след синусоидальной формы.
Сохраните проект, теперь его можно использовать как шаблон для создания новых, более сложных.
Можно было бы уже перейти к следующему шагу, но очень уж интересно узнать, по какому закону меняются значения переменных «скорость» и «ускорение» во время движения мяча. Сделаем пробную модификацию программы, чтобы видеть ещё два графика. Рисовать эти графики будут два дополнительных спрайта.
Создайте две глобальных переменных (которые будут доступны всем спрайтам) с именами «показатель1» и «показатель2». Добавьте в скрипт мяча блоки, задающие значения этих переменных на основе скорости и ускорения мяча.
Добавьте новый спрайт с костюмом стрелки, отредактируйте, поменяв цвет и положение центральной точки спрайта. Соберите скрипт.
Красная стрелка будет рисовать красным пером график изменения значения переменной «показатель1».
Сделайте дубль этого спрайта, отредактируйте цвет стрелки и цвет пера. Замените переменную «показатель1» переменной «показатель2».
Файл с готовым проектом: этап1.sb3
Этап 2. Учитываем силы трения и сопротивления
Колебания мячика в нашей модели незатухающие, они происходят непрерывно с одной и той же амплитудой. Добавим реалистичности в наш проект, будем непрерывно уменьшать скорость движения в соответствии с действием сил трения и сопротивления среды, в которой перемещается мяч.
Можно уменьшать скорость движения тремя разными способами:
Мы введём три коэффициента для каждого вида сопротивления, чтобы наша модель была универсальной. Если все три коэффициента равны нулю, происходят незатухающие колебания.
Наш проект разрастается, для сохранения наглядности разобьём его на блоки с осмысленными названиями. Теперь набор скриптов должен выглядеть так.
Запустите проект, чтобы проверить, что он работает и в таком виде.
Добавьте новый блок «учесть сопротивление» и поменяйте значения «к0», «к1» и «к2». Изменившаяся часть набора скриптов:
Запустите программу. Поэкспериментируйте с разными значениями коэффициентов, проверьте, как выглядят колебания мяча, если выставить два коэффициента в ноль и оставить лишь один из видов сопротивления движению.
Обратите внимание, что период колебаний мяча не зависит от их амплитуды.
Файл с готовым проектом: этап2.sb3
Этап 3. Свободное движение по инерции с повторяющимися упругими столкновениями
Столкновение одного тела с другим часто рассматривают как «удар», то есть явление настолько короткое, что его длительностью можно пренебречь. При этом для вычисления конечных скоростей и направлений движения тел после удара используют специальные методы расчёта.
Но поскольку мы уже создали модель упругого взаимодействия, а компьютер производит все вычисления крайне быстро, нам несложно будет самостоятельно решить задачу моделирования столкновения двух тел. Причём мы не будем упрощать картину и считать время взаимодействия тел равным нулю.
Существующие коэффициенты «к0», «к1» и «к2» будем использовать для учёта возможного сопротивления движению во время свободной фазы. Давайте для начала условимся, что фаза свободного движения проходит без какого-либо трения и без сопротивления воздуха. Во время контакта мяча с левой или правой границей будем использовать «кПрав0», «кПрав1», «кПрав2», «кЛев0», «кЛев1» и «кЛев2». Кроме того, жёсткость левой и правой границы может быть разной, поэтому теперь у нас будет две переменной вместо одной: «жёсткостьПрав» и «жёсткостьЛев».
Создайте все новые переменные, они должны быть локальными. Теперь необходимо доработать набор скриптов спрайта «Мяч».
Отредактируйте определение блока «учесть сопротивление» так, чтобы использовалось три параметра.
Переименуйте блок «пересчитать скорость», дайте ему название «пересчитать скорость и учесть сопротивление». Доработайте скрипт.
Остальной набор скриптов:
Запустите программу. График движения мяча влево-вправо теперь выглядит как пила, и можно заметить, что отскоки от правой границы происходят резче, чем от левой.
Файл с готовым проектом: этап3.sb3
Этап 4. Изменение скорости мяча при столкновении с движущимся массивным препятствием
Единственное дополнение, которое необходимо будет внести, это динамическое изменение расположения правой границы в ходе работы программы. Давайте добавим новый спрайт, который и будет изображать подвижную правую границу.
Создайте спрайт с помощью инструмента «Нарисовать».
Костюмом этого спрайта должна быть тонкая вертикальная линия от верхнего до нижнего края поля редактирования. Её можно нарисовать, например, инструментом «Прямоугольник» с нулевой толщиной контура.
Дайте спрайту название «препятствие», переключитесь на вкладку «Код» и создайте скрипт. Мы будем двигать линию влево и вправо перемещением мыши.
Ширина линии 4 пикселя, но нам надо знать и ширину мяча, чтобы определить размер области свободного перемещения.
Осталось добавить в основной скрипт мяча одну строку. Числа 4 и 46 обозначают ширину линии и ширину мяча.
Добавьте этот блок в основной скрипт спрайта «Мяч». Теперь скрипт выглядит так.
Запустите программу, проверьте, что будет происходить, если в момент касания отодвигать препятствие от мяча, или напротив, двигать навстречу.
Следует добавить, в данном случае импульс мяча при столкновении никак не меняет скорости движения препятствия. В реальной жизни это соответствовало бы ситуации, когда масса мяча несопоставимо меньше массы препятствия.
В этом проекте нет никакого целенаправленного измерения скорости движения препятствия и использования замеренной скорости препятствия для расчёта скорости движения мяча после столкновения. Тем не менее, как можно заметить, итоговая скорость мяча складывается из его начальной скорости и скорости движения препятствия в момент столкновения.
Вы по-прежнему можете менять коэффициенты, определяющие потери скорости при столкновениях и перемещениях мяча. Например, можно сделать так, чтобы отскок мяча от препятствия сопровождался значительной потерей скорости, как будто бы мяч ударился о какой-то не очень упругий предмет. В этом случае придётся всё время «бить» по мячу, чтобы движение продолжалось. Получится своего рода игра на ловкость. Поэкспериментируйте с разными значениями, в том числе попробуйте увеличить трение во время свободной фазы перемещения.
Файл с готовым проектом: этап4.sb3
Этап 5. Столкновение двух движущихся объектов на плоскости
В этом проекте мы будем наблюдать за траекторией движения двух мячей, хаотично катающихся по прямоугольной области сцены в разных направлениях. Мячи будут отскакивать от её границ под действием сил упругости, периодически сталкиваться друг с другом и отскакивать с изменением скорости и направления движения.
Для сохранения наглядности не будем перегружать проект подробностями. В частности, столкновения мячей со стенками и друг с другом будут абсолютно упругими, мы будем учитывать лишь небольшое вязкое трение при свободном перемещении мячей.
Нам понадобится большое количество второстепенных переменных для расчётов. В целом будет проще начать «с чистого листа».
Создайте в среде Scratch новый проект, удалите спрайт кота. Добавьте уже знакомый нам спрайт «Ball». Нам надо будет отредактировать его костюмы.
Удалите все костюмы, кроме синего и зелёного («ball-b» и «ball-d»). Для упрощения расчётов воспользуемся маленькой хитростью: если сделать размер изображения равным 100×100 пикселей, тогда не придётся пересчитывать проценты в пиксели. Блок «Размер», возвращающий масштаб отображения спрайта, можно будет использовать как диаметр мяча.
Увеличьте размер костюма «ball-b» инструментом «выбор» так, чтобы он стал равен 100×100. Затем передвиньте костюм в центр. В графическом редакторе Scratch3 сделать это легко: разработчики позаботились о том, чтобы изображение «прилипало» к центральной точке.
Повторите операцию для зелёного костюма «ball-d». Теперь оба костюма имеют размер 100×100.
Вначале мы создадим все скрипты для спрайта «Синий», а затем сдублируем их в спрайт «Зелёный» и немножко подправим.
Первым делом необходимо создать набор переменных, которые потребуются нам для расчётов. Очень важно, чтобы все переменные были локальными («только для этого спрайта»), в противном случае проект будет работать неправильно, и будет сложно понять, почему.
Создайте локальные переменные «масса», «скорость», «sin_Dir», «cos_Dir», «dfrm», «dir_to_object», «dX», «dY», «vX», «vY» и «tmp».
Ниже приведены необходимые скрипты, которые следует создать. Для подробного объяснения, как они работают, потребовалось бы много времени. Укажем лишь, что в программе осуществляется пересчёт линейной скорости и направления движения мяча в горизонтальную и вертикальную составляющую, а затем обратно. Кроме того, можно менять масштаб отображения спрайта и регулировать тем самым его условную массу (при масштабе 100 масса равна единице).
При возникновении проблем рекомендуется отлаживать программу по частям. Например, можно отключить скрипт, отвечающий за проверку столкновений с зелёным мячом. В этом случае синий будет игнорировать наличие другого мяча и отскакивать лишь от границ сцены (либо от границ меньшей области на сцене, если мы захотим). Удобнее работать так: первым делом создать все пользовательские блоки с пустыми поначалу определениями, а затем добавлять скрипты, «подклеивая» и к «шапочкам» (заголовкам). Неважно, что тот или иной блок ещё «пустой», скрипт с его использованием уже можно собирать.
Блоки «пересчёт скорости при столкновениях» и «проверка столкновений с границами»:
Блоки «скорость и направление в vX и vY» и » vX и vY в скорость и направление»:
Блок «проверка столкновений с другим мячом»:
После сборки всех скриптов и проверки корректности их работы следует сдублировать их в спрайт «Зелёный». Для этого надо «зацепить» каждый скрипт мышкой и «бросить» его на иконку спрайта «Зелёный» (в этот момент она начнёт покачиваться).
Сдублируйте все скрипты в спрайт «Зелёный». Затем выберите его, щёлкните правой кнопкой мыши по свободному месту поля скриптов и дайте команду «Очистить блоки». «Очистить» в данном случае означает «разместить в столбик».
Внимательно проверьте, что удалось сдублировать все скрипты и нет лишних дублей.
Осталось поправить блок «проверка столкновений с другим мячом», заменить везде «Зелёный» на «Синий». Будьте внимательны, при этой процедуре зачастую меняется и название блока «размер от ( )» (например, на «положение X от ( )»). Блок «проверка столкновений с другим мячом» спрайта «Зелёный» должен выглядеть в итоге так.
Можно также несколько поменять размер одного из мячей или обоих. Запустите программу. Движение мячей по сцене должно выглядеть примерно так:
В заключение необходимо отметить, что мы никак специально не следим за соблюдением закона сохранения импульса двух движущихся тел после столкновения. Напротив, он «сам собой» естественным образом вытекает из логики работы программы.
Файл с готовым проектом: этап5.sb3
Мы приобрели представление о компьютерном моделировании движения и физического взаимодействия объектов, пора браться за решение частных проектных задач, в которых подобные модели могут использоваться.