- Как создать непрерывные уровни для игры Scratch
- Первый способ — смена фонов
- Второй способ — передвижение спрайтов, относящихся к фону
- Имитация скроллинга фона с использованием клонов
- Scratch для «продвинутых»
- Клонирование и переменные в Scratch
- Имена объектов как их идентификаторы
- Подводим итоги
- Программирование на Scratch для детей от 8 лет (Скретч) — бесплатные видеоуроки
- Урок 1. Знакомство с интерфейсом Scratch и создание первого проекта | Уроки по Scratch 3.0
- Урок 2. Изучение звука в Scratch
- Урок 3. Движение спрайтов и внешний вид
- Урок 4. Координаты и движение
- Урок 5. Цикл
- Урок 6. Цикл и ожидание
- Урок 7. Условие и сенсоры
- Урок 8. Ожидание и цикл с условием
- Урок 9. Переменные. Создание таймера в Scratch
- Урок 10. Клоны и события
- Урок 11. Как создать свой блок в Scratch
Как создать непрерывные уровни для игры Scratch
Учитель информатики из г.Борисова Вадим Александрович Фурс и Наталья Григорьевна Снытко, учитель информатики из г.Орша показывают и рассказывают, как создавать длинные и как будто непрерывные уровни для игр.
Уроки созданы в рамках конкурса для учителей «Моя Scratch-история-2020» в номинации «Опыт мастера». Вадим Александрович Фурс и Наталья Григорьевна Снытко — финалисты конкурса и докладчики конференции «Scratch conference Belarus 2020».
Первый способ — смена фонов
Начинающим программистам для понимания этих уроков рекомендуем сначала изучить 2-ю часть урока 5 «Создание и редактирование спрайтов», в которой мы попутно делаем анимацию «Кот гуляет с мячом» и впервые знакомимся с тем, как можно менять фоны и программировать почти бесконечное движение персонажа по разным фонам (локациям).
Здесь важно правильно нарисовать каждый фон так, чтобы он был продолжением предыдущего фона, а их совокупность представляла собой большую локацию (о том, что такое локация, см. во 2-ой части урока 8 для начинающих «Сцена и локации»).
Урок Вадима Александровича поможет сделать игру «Гонки», в которой каждый новый «сегмент» длинной и разнообразной трассы (дороги) представлен в виде отдельного фона сцены. Движение машины реализовано снизу вверх.
Урок Натальи Григорьевны поможет увидеть большую карту, а затем грамотно разбить её на части-прямоугольники, из которых получаются отдельные фоны. Затем рассчитать правильное движение дрона в любом направлении: вверх, вниз, влево, вправо.
Второй способ — передвижение спрайтов, относящихся к фону
На основе этого способа можно создать игру, в которой перемещение персонажа по сцене реализуется не напрямую, а путём передвижения объектов самой сцены. При этом фактически можно говорить о динамической генерации разных уровней игры, создавай и перемещая по сцене самые разные объекты: траву, деревья, горы, облака и др.
Оба предложенных способа можно комбинировать. Например, для игры «Гонки» дорогу делаем с использованием смены фонов, а деревья и прочие объекты на обочине, а также всевозможные препятствия генерируем вторым способом.
Имитация скроллинга фона с использованием клонов
Скроллинг — значит «пролистывание» или в данном случае «движение», «перемещение».
Наталья Григорьевна Снытко очень структурированно и систематизированно объясняет, как сделать красивый бесконечный уровень с использованием всего одного спрайта и его клонов.
Этот же подход использован в реализации последнего уровня игры «Собери снеговика«, а также во многих других играх. Пишите в комментариях о примерах таких игр, делитесь ссылками!
Источник
Scratch для «продвинутых»
Клонирование и переменные в Scratch
Моему ученику нравилась игра — «Зомби против растений». И ему было интересно самому запрограммировать её. Давайте вспомним как данная игра работает? С правой стороны у нас есть шеренга растений, которая расстреливает приближающихся зомби.
Есть множество решений данной задачи, но на мой взгляд более элегантное решение — задействовать минимально возможное количество спрайтов, т.е. использовать клонирование.
Как сделать так, чтобы у каждого отдельного клона был собственный уровень жизни? Что выбрать переменные или списки? Сделали попытку использовать списки, но после более детальной проработки поняли, что данная структура данных не помогает решить проблему. У переменных и списков, в Scratch есть 2 типа видимости для каждого типа данных — это «для всех спрайтов» или «только для этого спрайта». Пришлось проверять область видимости. Начали мы с переменных.
Дойдя до рабочего варианта переменной с областью видимостью «только для этого спрайта». В классических языках программирования такой тип видимости называют — локальным или приватным в зависимости от контекста.
Оказывается, что если эта переменная с данной областью видимости используется в клоне, то в клоне создается экземпляр переменной, принадлежащий конкретному клону и который используется для внутренних вычислений/работы клона. В нашем случае, у каждого клона есть своя «жизнь». Если стало интересно, то советую обратиться к справочнику. А вот картинка, которая показывает, как спрайты или клоны работают с переменными разных типов видимости.
Переменная с областью видимости «для всех спрайтов» (рисунок слева) — одна на всех. Кстати, здесь вы можете с детьми посмотреть работу с критическими секциями и что такое гонка за ресурс. А если область видимости переменной — «только для этого спрайта», то у спрайта и у его клонов появляется собственная переменная с тем же именем, с которой они работают (рисунок с права). И клоны не имеют доступа к переменной оригинала и переменной другого клона.
Это стало неожиданным и приятным открытием свойств Scratch для создания подобных алгоритмов.
ВАЖНО: Переменная — это очень мощный инструмент настоящего программиста, поэтому я сразу учу детей правильному именованию переменных, так как этот навык поможет им в проектах разной сложности.
Имена объектов как их идентификаторы
ВАЖНО: все переменные с зоной видимостью «только для этого спрайта».
Данный инструмент для меня стал совсем неожиданным. Давайте начнем с истории о том, как мы с учеником наткнулись на данную особенность языка. Мой ученик решил, создать игру с «искусственным интеллектом». Игра представляет звездные войны на космических кораблях и у игрока есть возможность управлять одним кораблем, в то время как противники гоняются за вами и за друг другом. Чтобы они могли преследовать вас или друг друга, им нужно как-то принимать решение о том, кого преследовать. Данную задачу можно решить в лоб и задать очередность преследования кораблей, но игра потеряет свою интеллектуальность и быстро наскучит. Поэтому ученик решил настроить интеллект таким образом, чтобы корабли с интеллектом преследовали ближайшего противника. Давайте посмотрим, как он начал решать данную задачу.
На мой взгляд хорошее решение для создания быстрого прототипа. Но какие ограничения здесь есть? Первое, усложнение кода по мере добавления новых кораблей. Следовательно, сложность кода повышается и не исключены мутации кода из-за усложнения. Время поиска ошибки и отладки алгоритма будет расти. И конечно, никто не отменял такую прикольную метрику, как старение кода (advance level SW Development). Что же делать? А делать необходимо следующее, нужно сделать обобщеный алгоритм, который будет динамично приспосабливаться к увеличению или уменьшению количества кораблей.
Для данного алгоритма нам и понадобиться свойство языка — имя как идентификатор объекта. Пришло время больших изменений и здесь вы, как учитель, можете рассказать про такое явление как рефакторинг. Это последовательное изменение кода, улучшение его структуры и его оптимизация. А главное, чтобы каждое изменение не ломало работу программы, и объем изменений тоже должен очень аккуратно подобран. Слишком много изменений — плохо, слишком мало — долго. Сформированный навык рефакторинга даст преимущество и эффективность работы программиста. Но для формирования навыка нужно работать головой, а не просто тыкаться. У меня получилось сделать 4 изменения в первоначальной программе и результат не изменился.
Заметьте, что я еще не удалил блоки, а оставил их. Зачем? Потому, что если что-то пойдет не так, мы можем вернуть предыдущий вариант, начав все заново. Но как только я проверю правильность выполнения обновленного скрипта, я сразу же их удалю, чтобы не отвлекаться на них в последующем.
Заметили? Сейчас в блоке «повернуться к …» стоит переменная и эта штука работает. Т.е. мы минимальными усилиями проверили, что данный подход работает. Это просто круто. Теперь мы можем начать писать алгоритмы, которые позволят определять объект преследования ближайшего корабля.
Что нам пригодится? Это из структур данных — это переменные и списки. Из алгоритмов — это нахождение минимального числа (расстояния) в списке. Еще нам необходим алгоритм, который определит имя объекта для преследования по минимальному расстоянию.
Сейчас будет написано много кода. Но для того, чтобы потом не захлебнуться и не запутаться в куче скриптов, нам необходимо использовать еще одну классную функцию, а именно создание собственных блоков. Эта функция очень мощная, но ее редко используют школьники, да и некоторые программисты, а ведь она позволяет создать понятный с первого прочтения алгоритм программы. Кстати, можете почитать про приемы создания понятного кода в книге Мартина Фаулера «Рефакторинг. Улучшение существующего кода»
Как и перед любым масштабным строительством нам необходимо все спланировать. Давайте спланируем в каком порядке будем разрабатывать блоки:
- Список имен всех кораблей,
- Расчет расстояние до всех кораблей,
- Поиск минимального расстояния,
- Поиск имени корабля для преследования по найденному минимальному расстоянию.
Главное правило — каждый созданный «кусок» и изменение должны быть проверены.
Для того, чтобы создать обобщенный алгоритм нам чем-то нужно пожертвовать, например, оригинальными именами спрайтов, придется их стандартизировать и получим следующий расклад.
И теперь мы готовы описать 1 часть программы. Все пишем для 1-ого корабля. Запускаем отдельно данный скрипт и смотрим результат. Поехали!
Если мы добавим новый корабль, нам нужно изменить в данном алгоритме лишь одну циферку. Клево? Клево!
Погнали дальше. А давайте научим его 2 алгоритму. Смотрим, что получилось. Это сразу конечный результат со вспомогательными функциями.
Ура! Работает. Проверить это можно следующим образом, должен быть обязательно 0 одним из значений в списке расстояний. Если у вас это не так, ищите ошибку.
Едем дальше! Поиск минимального расстояния. Заметили, что расстояние всегда положительно. И всегда будет минимальное число — 0. Ай-я-яй! Вывод — искать минимум, но не ноль. Можете попробовать свои силы и оптимизировать код самостоятельно, чтобы не делать расчет расстояния от корабля 1 до корабля 1 (это не опечатка).
Обучаем спрайт новой функции и получаем.
Не забываем проверять! Для этого можно даже остановить игру и запустить отдельный скрипт.
Мы написали все, что необходимо, теперь главное правильно использовать данные функции.
Если у вас все работает правильно, то вы должны увидеть следующее:
Заметили, что корабль с «искусственным интеллектом» разрывается между разными противниками. Вы можете усовершенствовать программу и усложнить принятие решения. Например, если у преследуемого корабля осталось мало жизни, то он добивает его, а если он нашел, ближе и с еще меньшим здоровьем, то добить сначала слабейшего.
Кстати, в данной программе можно уменьшить количество действий и усовершенствовать алгоритмы. Попробуйте свои силы. Взять данную программу можно здесь.
Подводим итоги
Вот на таких кейсах я узнал, как Scratch дает возможность ученикам быстрее освоить множество реальных техник программирования. На нем можно рассказывать про работу критических секций, про обобщенные алгоритмы, про переменные и их области видимости, про создание собственных блоков и структурирование кода. А также на данном языке можно рассказывать про профессиональные навыки, например, рефакторинг.
Это лишь малая часть инструментария программиста, но она являет очень важной. А в Scratch это объяснить становится чуточку легче.
Источник
Программирование на Scratch для детей от 8 лет (Скретч) — бесплатные видеоуроки
Scratch (Скретч) — это визуальная среда для программирования и создания игр. Она напоминает конструктор LEGO: вместо текстового кода здесь блоки с командами, их нужно переставлять и скреплять друг с другом.
Мы подготовили короткие пошаговые уроки Scratch 3.0, чтобы помочь детям освоить Scratch программирование: от знакомства со средой и основными функциями до создания полноценных игр и мультфильмов. Учитесь с нами, делитесь впечатлениями в комментариях!
Урок 1. Знакомство с интерфейсом Scratch и создание первого проекта | Уроки по Scratch 3.0
В этом видео мы узнаем, как устроена визуальная среда Скретч для детей, что такое спрайты, как работает система координат и как собирать блочный код. Создадим первый проект, запрограммировав кота Scratch.
Урок 2. Изучение звука в Scratch
Во втором видеоуроке мы разберем вкладку «Звуки», расскажем, для чего может понадобиться каждый блок. Научимся включать, изменять и останавливать звуки, а также записывать или добавлять свое аудио.
Урок 3. Движение спрайтов и внешний вид
Мы уже знаем, что такое спрайты. В этом видеоуроке научимся перемещать их по системе координат, добавлять в проект и удалять из него. Познакомимся с каждым блоком в разделе «Внешний вид»: как создавать фон, устанавливать эффекты, изменять размеры спрайта и др.
Урок 4. Координаты и движение
Изучаем подробнее координаты и блоки из раздела «Движение»: как задать количество шагов, повернуть спрайт на определенное количество градусов, анимировать плавное передвижение спрайта. Закрепим изученный материал, создав небольшую программу.
Урок 5. Цикл
В этом видео узнаем, что такое цикл, и изучим блоки из вкладки «Управление»: как задавать условия действию, использовать ограниченный и неограниченный цикл. Сделаем небольшую программу с этими блоками.
Урок 6. Цикл и ожидание
Во вкладке «Управление» также находится блок ожидания, он предназначен для того, чтобы программа ждала определенное количество времени. Мы продолжим создавать проект из предыдущего видеоурока, используя этот блок.
Урок 7. Условие и сенсоры
В этом уроке мы познакомимся с тем, что такое условия и какие бывают сенсоры, продолжим изучать блоки из вкладки «Управление». Закрепим знания, создав небольшую программу.
Урок 8. Ожидание и цикл с условием
В этом видеоуроке мы познакомимся с блоками «Повторять пока не», «Ждать до» и некоторыми блоками из вкладки «Операторы»: операторами арифметических действий, сравнения и логическими операторами.
Урок 9. Переменные. Создание таймера в Scratch
Язык программирования для детей Scratch уникален тем, что на нем уже можно создавать переменные. В этом уроке познакомимся с тем, что такое переменная, и научимся задавать ей значение. Создадим программу для переменной «таймер».
Урок 10. Клоны и события
В этом видеоуроке узнаем, как делать копии спрайта, чтобы создавать одну программу для всех. Изучим, что такое сообщения, как их передавать и для чего они нужны. Узнаем, как сделать игру в Скретч с тремя клонами.
Урок 11. Как создать свой блок в Scratch
К этому уроку мы достаточно освоились в среде Скретч, чтобы научиться создавать свои блоки! Программирование со Scratch станет проще, если научиться делать собственные блоки.
Плейлисты с видеоуроками продолжают пополняться, подписывайтесь на наш YouTube-канал , чтобы следить за выходом новых видео и открывать для себя мир IT-технологий!
Если же вам нужен наставник, загляните в Школу программирования для детей “Пиксель”: посмотрите полный курс по программированию в Scratch .
Источник