Наш дневник мы ведем на нашем канале в YouTube.
Здесь мы делимся последними обновлениями, которые касаются группы для продвинутых.
Урок 22 (2017-04-09)
Урок 17 (2017-03-05)
Урок 15 (2017-02-12)
Урок 14 (2017-02-05)
Урок 13 (2017-01-29)
Урок 7 (2016-11-06)
Урок 6 (2016-10-23)
Урок 5 (2016-10-02)
Урок 4 (2016-09-25)
Урок 3 (2016-09-18)
Урок 2 (2016-09-11)
Урок 1 (2016-09-04)
Сегодня мы сделали программу для ловли покемонов!
Урок 22 (2016-05-01)
Урок 21 (2016-04-24)
Урок 20 (2016-04-17)
Урок 19 (2016-04-10)
Урок 18 (2016-04-03)
Урок 17 (2016-03-20)
Урок 16 (2016-03-13)
Урок 15 (2016-03-06)
Урок 14 (2016-02-21)
Кто из нас не любил пускать мыльные пузыри и тем более их лопать? Сегодня мы написали программу, в которой мы это делали в Scratch!
Мы освоили новые блоки. Первый из них – присвоение случайного числа. Этот блок мы использовали для задания случайно позиции для новых пузырей. Второй блок – измерение расстояния до курсора мыши. Этот блок нам нужен был для определения не промахнулись ли мы при нажатии мышки на пузыре.
Еще один интересный момент – использование два параллельных вечных цикла. Один из них отвечал за движения пузыря, второй следил за попаданием в него курсором мыши. Этот тот случай, когда эти функции нельзя было объединить в одном цикле. Рабочий вариант программы можно найти здесь*.
Домашнее задание: сосчитать количество лопнувших пузырей и сообщать их в момент проигрыша, т.е. тогда, когда очередной пузырь не удалось лопнуть во время его подъема вверх.
Урок 13 (2016-02-14)
Сегодня мы учили ребят как можно заставить персонажа передвигаться с учетом земной гравитации. Например, идя вперед, нагибаться по ходу движения, а подпрыгивая, снижать вертикальную до нуля и опускаться вниз. Несмотря на то, что эти операции выглядят очень обыденно, решения для воплощения такого поведения персонажа, было не самым тривиальным. Например, как заставить героя отталкиваться от твёрдой поверхности только, как при приземлении не проваливаться сквозь землю. Полноценно решение второй задачи мы оставили на домашнее задание. Правильное решение доступно здесь*.
Мы постепенно отходим от текстового формата дневника и будем переходить на видео формат. Вот пример как это будет выглядеть.
Подписывайтесь на наш канал!
https://www.youtube.com/channel/UCy63M8WUh41VE8orDzd__3Q
Урок 13 (2016-02-06)
На сегодняшнем уроке мы программировали запуск ракеты в космос. Прототипом для задания стал проект, представленный на сайте Scratch:
https://scratch.mit.edu/projects/19926519/
Мы решили освоить технологию запуска плюс устранить несколько недостатков, таких как слишком медленный разгон ракеты и то, что упираясь в край экрана, они не исчезала. Для этого нам понадобилась переменная скорость, увеличивающаяся по ходу разгона ракеты и контроль над исчезновением ракеты по достижению края экрана.
Домашнее задание: заставить ракету лететь по загнутой траектории. Решение этой задачи, ребята могут посмотреть здесь*, поэкспериментировав с ним и добавив, например сценарий падения ракеты, в случае если кнопка пробела отпускается.
Урок 12 (2016-01-31)
Сегодня, мы поработали с решениями необходимыми для создания вот такого лабиринта.
https://scratch.mit.edu/projects/11710850/
Кстати, вы можете посмотреть исходный код любого проекта на официальном сайте!
Основная задача была в том, чтобы не дать возможности персонажу проходить сквозь нарисованные препятствия, чему мы и посвятили сегодняшний урок. Более того, мы научились передвигать персонажи, меняя их координаты x и y (раньше мы двигали их шагами в заданных направлениях). Настройки управлениями клавишами мы уже проходили в предыдущих проектах.
Домашнее задание: сделать свой лабиринт.
Урок 11 (2015-12-06)
На этом уроке мы почти доделали игру теннис, в которой фруктовый салат соревнуется с тарелкой. Нам необходимо было сделать несколько операций, которые должны быть знакомы уже из предыдущей игры с мячом и платформой. Одна из таких операций – «выдавливания» мяча из «ракеток», перед тем как снова проверять на касание мяча с ними. Следующая операция – проверка на промах. В ней, нам необходимо было сравнивать координату х тарелки и салата с координатой х мяча, чтобы понять промазали мы или нет. При промахе, мы засчитывали очко соответствующему игроку и возвращали мяч в центр площадки. То, что мы не успели сделать – это паузу перед возобновлением игры. В этом случае, нам нельзя обойтись без знакомого нам рубильника. Окончательную версию игры уже с рубильником можно найти здесь*.
Предмет программирование был пилотным проектом. Мы сделали некоторые выводы и поменяем формат занятий для следующего полугодия. Вместо сложных проектов, растягивающихся на несколько уроков, мы будем давать простые задания, рассчитанные на один урок. Это позволить избегать контраста между ребятами, получающими помощь дома и на уроке, и теми, кто не может посещать занятия нерегулярно.
Урок 10 (2015-11-29)
Сегодня мы начали новую игру – теннис. Для реализации этой игры, у нас в теории должны быть все нужные нам навыки. На этот раз, мой вклад был небольшим. Ребята выходили один за другим к доске и реализовывали различные компоненты игры. Вот* что у нас получилось к концу урока. Обратите внимание, что роль ракеток у нас выполняли разные предметы, в данном случае тарелки с салатом и фруктами.
Домашнее задание: максимально довести игру до ума.
Урок 9 (2015-11-22)
Сегодня мы завершили наш долгий проект игры Арканоид. Мы реализовали перезапуск игры при проигрыше, который требовал инициализации переменных, восстановления изначального размера платформы и мяча плюс возврат мяча в начальное положение. Более того, мы теперь записываем и сохраняем максимальный счет, сообщая игроку, в случае если ему удалось этот счет побить. Посмотреть на окончательный вариант игры можно здесь*.
Кстати, в эту версию, я внес дополнительные изменения, которые сделали поведение мяча менее предсказуемым!
Домашнее задание:
- Скачать последнюю версию игры и найти, что поменялось в игре уже после урока и понять, как это было сделано. (Было внесено два принципиальных и очень интересных изменения.)
- Запрограммировать игру, в которой мяч будет отскакивать от управляемой платформы, но платформа будет двигаться вверх и вниз, а не вправо и влево как сейчас. Это навык нам пригодиться для реализации одной из следующих игр – пинг-понга!
Урок 8 (2015-11-16)
На сегодняшнем уроке мы решили сделать игру еще интересней. Мы добавили функциональность при которой при касании мячом платформы, мяч и платформа уменьшаються в размерах, что делает игру сложнее. Для того чтобы это происходило как с мячом так и с платформой, нам понадибился знакомый нам рубильник.
Более того, мы сделали счетчик касаний и запрограмировали условие при котором игра должна заканчиваться. Нам осталось лишь сделать так, чтобы игра возобновлялась после этого. Еще, хотелось бы чтобы максимальный счет запоминался и в случаи побития установленого рекорда, об этом сообщалось игроку. Это можно сделать дома, либо подождать до следущего урока. Текущая версия програмы находиться тут*. Обратите внимание на то, как мы инициализируем переменные и начальные размеры предметов.
Урок 7 (2015-11-09)
На сегодняшнем уроке мы решили сразу несколько проблем. Первая из них была с неправильным отскоком мяча. Первое, это вместо смены направления полета на определенный угол, высчитывать который было сложно в зависимости от угла подлета мяча, мы задавили направления полета напрямую, что как оказалось, было более предсказуемо. Мы обсудили, что отскок должен происходить не в сторону подлета, а симметрично отражаясь.
Следующая решенная задача была связана со скоростью движения платформы, которая была постоянной, что было скучновато. Мы решили превратить наши клавиши в педали газа! Чем дольше давишь, тем быстрее едет платформа. Эту проблему мы решили при помощи переменных SpeedR и SpeedL. (Так как у большинства ребят нет русской клавиатуры, мы заодно изучаем английский!)
Постепенно наращивая эти переменные, при удержании нажатых клавиш, мы меняем теперь размер шага при движении платформы, что создает желаемый эффект ускорения!
На следующем занятии мы сделаем отскок менее предсказуемым, платформу прогрессирующе уменьшающейся и запрограммируем условие победы в игре. Если ребятам не терпится, они могут попробовать сделать это сами. Дав ребятам набор знаний и показав инструментарий в Scratch, мы скоро перейдем к упражнениям, в которых ребятам необходимо будет работать самостоятельно.
Последняя версия программы находится здесь*
Урок 6 (2015-10-11)
Мы начали с того, что решили проблему в прошлой игре с мышью, которая не останавливалась для объявления победителя. Решение было простым – нам просто надо было поменять порядок действий. Перед тем как поздравлять, нам нужно было включить рубильник. В прошлой версии, мы это делали только после того как поздравляли, что и приводило к нестыковке.
Сегодня мы начали новую игру, принцип которой основан на известной игре «Арканоид». Игрок приводит в движение платформу и задача не дать летающему мячу дотронутся пола, вовремя его отбивая. Для этого нам нужны были два спрайта – платформа и мяч. Многие ребята уже самостоятельно привели в движения мяч и заставили двигаться платформу при нажатии клавиш вправо и влево. Проблемы начались, когда мы хотели заставить мяч отскакивать от платформы. Именно решение этой проблемы и стало домашним заданием. Все нужные ингредиенты для этого уже в программе*.
Урок 5 (2015-10-04)
На этом занятии мы решили сразу две задачи. Одна из них была связанна с невозможностью управлением одновременно двумя спрайтам. Как только нажимались кнопка приводящее в движение одного из спрайтов, второй блокировался и не мог двигаться. В программировании нет нерешаемых проблем. Вместо привязки к событиям нажатия клавиш, мы вставили вечный цикл, проверяющий какие клавиши нажаты. Такое решение работало без конфликтов.
Вторая задача была связана с объявлением победителя и перезапуском игры. Мы заставили летучую мышь объявлять победителя при наборе противником трех штрафных очков, мы обнуляли счетчики и даже хотели заставить мышь прекратить летать при объявлении победителя. Для этого мы использовали уже неплохо нам знакомый рубильник, по включению которого мышь должна перестать летать. Но почему-то этот трюк у нас не получился. Домашним заданием стали поиск и устранение причин неудачи.
Здесь* вы найдете последнюю версию.
Урок 4 (2015-09-27)
На сегодняшнем уроке мы сосредоточились на решении задачи с рубильником, о которой мы говорили на прошлом уроке. Это очень нетривиальная задача на самом деле и она не под силу большинству ребят. На данном этапе мы ожидаем от ребят способности распознавать проблему и видеть ее причины. Способность решить придет со временем. Тут нужны как базовые навыки, так и опыт.
Итак, напомним задачу – нам нужно сделать так чтобы каждое касание спрайтов летучей мышью считалось только раз. В предыдущей версии это происходило многократно, пока наша мышь ползала по жуку. Вот что мы делаем, чтобы это решить:
Мы вводим переменную Рубильник, которую обнуляем (выключаем) в начале игры. Затем, когда мышь касается жука, мы проверяем, выключен ли рубильник и если выключен, отнимаем очко и его включаем. Теперь мы в эту часть программы не попадем, пока рубильник включен. Как же его выключить? Это мы делаем, как только мышь не касается жука, что мы проверяем при помощи блока «Если-Иначе». Условие «Иначе» будет выполнено как раз тогда, когда условие что мышь касается жука не выполняется.
Вот как эта схема выглядит на языке Scratch.
Было интересно увидеть, что некоторые из них придумали альтернативное решение, делая паузу между отнятием очков. Это решение хоть и не было до конца правильным, работало в большинстве случаев, ведь за установленную паузу наша летучая мышь покидала зону спрайта.
После того, как мы воплотили решение для жука, мы перенесли его на бабочку, поменяв клавиши управления на Z и C для передвижения налево и направо. Тут же мы заметили проблему – спрайтами нельзя управлять одновременно! Если двигается один, то не двигается другой! Это как раз случай, когда простой перенос работающего программного с одного объекта на другой не сработал. Добро пожаловать в мир программирования! На следующем уроке мы будем решать эту проблему и заставим летучую мышь объявлять победителя в конце игры!
Здесь* вы найдете последнюю версию. Пожалуйста, убедитесь, что в версиях ребят есть все нужные ингредиенты из этой эталонного варианта к следующему занятию.
Урок 3 (2015-09-20)
Сегодня мы закончили наш первый проект, решив последнюю проблему с тем, что наш кот не переставал ходить во время поздравительных скачков. Вот* наша первая программа!
Мы сразу принялись за второй проект. В нем есть сразу три персонажа: летучая мышь, жук и бабочка. Жуком и бабочкой управляют два игрока нажатием клавишам, заставляя их бегать и соответственно летать назад и вперед. Летучая мышь движется хаотично и кусает наших персонажей, дотрагиваясь до них. Проигрывает тот, кого укусят 10 раз первым. Мы начали с реализации для жука, и собираемся ее клонировать для бабочки на последнем этапе.
На уроке мы успели запрограммировать движения персонажей и наткнулись на первую проблему. Сразу после касания летучей мышью наших героев, счетчик, который их должен был считать, начинал лихорадочно отнимать очки все то время, в течении которого они пересекались, вместо того чтобы сделать это только в момент касания.
Именно решение этой проблемы и стало домашним заданием. Подсказка – для ее решения нужна дополнительная переменная, своеобразный рубильник, отвечающий за статус касания. Если касание произошло, счетчик не должен быть активирован до следующего касания. Вот* текущая версия игры.
Урок 2 (2015-09-13)
На втором занятии мы продолжили работать над нашей игрой. Мы поставили перед собой задачу заставить нашего кота прыгать на месте и говорить «Поздравляю» когда мы наберем 3 очка. Для этого нам пришлось познакомиться с блоками условий. Мы задали необходимое условие, но оно не проверялось. Причина была в том, что оно не было присоединено к какому либо событию. Мы решили это вопрос, присоединив к событию нажатия на кота, так чтобы при каждом нажатии не просто увеличивалось количество, но еще и проверялось, не достигли ли мы цели. Мы поняли, что после достижения счетчик надо обнулить. Более того, счетчик надо обнулять в самом начале игры, ведь предыдущий игрок мог так и не набрать 3 очков, оставив при этом негативное количество. Мы даже заставили кота прыгать вверх и вниз, однако осталась одна неразрешенная проблема: наш кот не прекращал двигаться во время прыжков, что смотрелось очень странно. Именно решение этой проблемы и стало домашним заданием для детей: заставить кота остановится во время прыжков в честь выигрыша и начать ходить снова сразу после обнуления очков.
Текущую версию программы может здесь*.
Урок 1 (2015-09-06)
Это первый урок мы начали с обсуждения важности программирования. Нас окружают множество компьютеров и всем им нужно объяснить, как нужно работать. Так как они пока что не понимают человеческий язык, мы должны им объяснять это на их языке. У большинства ребят любовь к программированию появляется через компьютерные игры. В наших уроках, мы пошли дальше, и эти игры решили создавать! Идея первой игры – охота курсором мышки за бегающим котом. Кликая и попадая на кота, мы получаем очки, промазывая – мы их теряем. Набрав 10 очков, мы выигрываем, нам играют фанфары и игра начинается снова.
Прелесть задачи – в ней нет уникально правильного воплощения, и есть несколько потенциальных загвоздок. На первом уроке мы успели познакомиться с циклами, событиями и с локальными и глобальными переменными. Вот* что у нас пока получилось.
* Для просмотра файлов размещенных в этом дневнике требуется программа Scratch Offline Editor доступнай для всех оперативных систем.