Если вы - не программисты, но детей на эту стезю направить хотите, то этот цикл статей - для вас.
Цель этого этапа - дать волю детской фантазии, чтобы чадо, в игровой форме придумывая и воплощая алгоритмы, отточило навык строить весьма сложные алгоритмы "из того что было" (то есть из того набора команд, что предоставил нам компьютер).
Поможет нам сайт https://scratch.mit.edu/
(внизу сайта сразу меняем язык на русский). На главном экране куча примеров проектов. Нам нужна ссылка "Создавай" сверху, чтобы уже начать свой проект.
Это уже знакомое нам "программирование паззлами", и набор команд там весьма богатый.
Вкратце – у нас есть игровое поле (с координатами конечно), на игровое поле мы добавляем "спрайты" – это всякие персонажи, предметы, всё что угодно (одного кота вам уже забросили на поле).
Каждому спрайту можно набросать одну или несколько цепочек команд-паззлинок. Такая цепочка запускается или при запуске всей программы (зелёный флажок), или по какому-то событию (например когда на клавиатуре нажали определённую клавишу). Смотрите паззлины с полукруглым горбом сверху – именно с таких может начинаться цепочка команд.
Команды задают, как персонаж двигается, как менятся его "костюм" (так можно анимировать персонаж), и много-много разных других приколюх и офигеньчиков. Детям нравится.
Напрограммировав поведение "спрайтов", мы нажимаем кнопку с зелёным флажком, и всё закрутится-завертится, персонажи оживут…
Чадо скорее всего само разберётся что к чему, такие сайты – это их стихия, пусть всё прощёлкает, всё попробует. Ну а вы можете для вдохновения пораскуривать примеры программ из раздела сайта "руководства". Но вот некоторые моменты нужно объяснить чаду особо (но не сразу, а когда освоит простейшие вещи).
Например, как заставить взаимодействовать спрайты между собой? Для этого спрайт может крутить бесконечный цикл, и постоянно в нём проверять условие "если касается такого-то спрайта". Таким способом двигающийся по полю спрайт среагирует на касание с другим спрайтом. Есть ещё подобные условия, поищите их в паззлинах.
Или например есть три интересных жёлтых паззлины:
"передать <сообщение>" – то есть где-то в недрах программы, невидимо, отправить всем спрайтам некое служебное сообщение, которое может быть любой фразой на любом языке (фраза нигде на сцене не отобразится, это просто для удобства программиста);
"когда я получу <сообщение>" – это, судя по горбу сверху, стартовая паззлина, то есть, к ней можно прицепить цепочку команд, и выполняться они будут тогда, когда из тёмных невидимых недр запущенной программы прилетит конкретное служебное сообщение, отправленное каким-то другим спрайтом.
"передать <сообщение> и ждать до конца" – в отличие от паззлины "передать <сообщение>", она после отправки сообщения приостанавливается и ждёт, когда все "слушатели" получат сообщение и выполнят связанную с этим цепочку команд, и только после этого передаёт эстафету следующей команде.
Как это можно использовать? Например, спрайт в виде кнопки "начать игру" может при нажатии на себя отправить сообщение "ИГРА НАЧАЛАСЬ", и все игровые спрайты (сундуки, алмазы, монстры…) получив это сообщение отобразят себя на экране (а изначально они были скрыты) и начнут взаимодействовать с главным героем.
Так, настало время рассказать чаду про очень важное в программировании понятие – про "переменные". Выключим монитор, отложим мышку. Помолчим для осознания важности момента. Берёте пустую обувную коробку, несколько средних коробок, и несколько совсем маленьких коробочек. Объясняете чаду так:
Большая коробка – это вся наша запущенная программа. Компьютер выделил для этой программы свою память, вон как много места! Программа это место использует для своей работы. Например, внутри этого пространства есть средние коробочки – это наши спрайты (подпишите коробки именами спрайтов). Спрайты живут своей жизнью, согласно их программам.
Но можно в этом пространстве оставлять и совсем маленькие коробочки, они очень простые – просто внутри хранят небольшие данные, например какое-то число, например счётчик очков в игре, да всё что угодно. И эти коробочки также имеют название, его даёт программист (напишите на маленькой коробочке "счётчик собранных алмазов", а внутрь положите клочок бумаги с написанной карандашом цифрой 0) – вот, только что мы создали переменную "счётчик собранных алмазов", и присвоили ей значение Ноль! Маленький шаг, но как он велик для будущего программиста… Теперь, в любой момент можно найти в пространстве обувной коробки переменную по её имени, заглянуть ей внутрь и либо просто прочитать написанное на клочке значение, либо стереть стёркой и записать другое значение.
Но! Это ещё не всё! Следим за руками: мелкую коробочку можно вложить в среднюю коробочку! Тогда это будет переменная, которую видит только этот спрайт – и никто более!
А если мелкая коробочка просто болтается в обувной коробке, то это общая переменная, она видна всем спрайтам.
Переходим к компьютеру, и проделываем то же самое на сайте – там среди паззлинок есть секция "переменные" с кнопкой "создать переменную", нажимаете, вводите название, задаёте видимость переменной (для всех спрайтов или только для этого), и у вас эта переменная появляется в двух местах – во-первых среди набора паззлинок появляется новая округлая паззлинка, а во-вторых переменная отображается прямо на игровом поле, это удобно (видно значение переменной), но если мешается -- можно её там скрыть, убрав галочку около паззлинки.
Всё, с переменной можно работать, вставлять её паззлину внутрь других, в которых есть округлые окошки. Например паззлина "изменить <счётчик собранных алмазов> на 1" прибавляет наш счётчик. А паззлины из раздела "операторы" могут использовать переменную внутри себя, чтобы например сравнивать её с числом (когда алмазов больше десяти, выдать медаль...).
В переменной можно хранить не только числовое значение. Можно например текст.
Есть особые переменные – гляньте, какие паззлинки округлой формы уже есть в наборе. Например, координата X мыши. Или номер текущего костюма. Или название костюма…
А ещё есть скромная с виду особая переменная "[что-то] от (кого-то)" – по сути, это способ одному спрайту подсмотреть что-то у другого спрайта (какие у него координаты и размер, какой костюм, какое значение "личной" переменной…) – эта скромная переменная открывает огроменные возможности по взаимодействию спрайтов меж собой.
Эх, какой простор для творчества! На том сайте, на заглавной его странице, есть примеры полноценных игр, написанных на этих паззлах. Есть особо упоротые примеры – целые мультфильмы, в которых каждое движение задано паззликами…
Вот пример простой, но вполне залипательной игры – нажимая на клавиатуре клавиши-стрелки, двигаем котом чтобы он собирал звёздочки, но кота преследует шар-монстр и от него нужно постоянно уворачиваться:
У спрайта "КОТ" программа такова:
при старте, прийти из-за горизонта (увеличиваясь по мере прихода), сказать "Привет!", спросить имя, сказать "Начинаем, <имя>!" и запустить игру, разослав спрайтам сообщение "СООБЩЕНИЕ_О_НАЧАЛЕ_ИГРЫ".
Кроме этого, КОТ реагирует на нажатие стрелок, меняя свои координаты (т.е. двигаясь по полю). Ну и выкрикивает "Поймал!!!" когда прилетает сообщение "СООБЩЕНИЕ_О_ПОИМКЕ_ЗВЕЗДЫ".
Вот она, вся программа кота:
А вот программа спрайта "ЗВЕЗДА": в самом начале звезда просто прячется и сбрасывает переменную "СЧЁТЧИК_ЗВЁЗД" в ноль. А вот когда прилетает "СООБЩЕНИЕ_О_НАЧАЛЕ_ИГРЫ", звезда показывается и начинает в цикле ждать, когда кот прикоснётся к ней – обнаружив сей факт, она перескакивает на новое случайное положение (ну, как будто эту звезду съели, и появилась другая), посылает "СООБЩЕНИЕ_О_ПОИМКЕ_ЗВЕЗДЫ" и прибавляет счётчик в переменной "СЧЁТЧИК_ЗВЁЗД":
А спрайт "МОНСТР"… ну а что монстр, его задача проста – снова и снова упорно двигаться в сторону кота, а настигнув его – останавливать игру. Ну а начинает он это своё шатание тоже не сразу, а только когда сама игра начнётся, то есть когда прилетит "СООБЩЕНИЕ_О_НАЧАЛЕ_ИГРЫ":
Программа получилась неоптимальная, есть логические изъяны, которые видны опытному программисту – но она была быстро набросана и заработала, пока у чада не иссяк интерес – а это ой какой малый промежуток времени… И, пожалуй, не стоит сейчас грузить чадо всякими оптимизациями, это придёт с опытом.
Как только чадо всласть попрактикуется на этом сайте, настанет пора бросать детские паззлики и переходить к настоящему программированию. И поможет нам ещё один прекрасный сайт – о нём в следующей серии....