Программа состоит из двух скриптов - функции parabola и главного скрипта, откуда вызывается функция.
В главном скрипте запрашивается число, которое потом передается в функцию в качестве коэффициента k. Можно нарисовать множество парабол, в том числе и с отрицательным k. Программа завершается, если будет введен 0. Не следует вводить k больше 1 и меньше -1, т.к. тогда график получится слишком прилегающим к оси y.
Задача
Организовать столкновение двух объектов (например, автомобилей), движущихся навстречу друг другу. Под столкновением понимать их остановку и изменение внешнего вида.
Кот и слон передвигаются по холсту. Когда они сталкиваются, то издают звуки, и кот отпыгивает от слона в противоположную сторону.
Скрипт кота:
"Отпрыгивание" реализовано с помощью двух команд - повернуть на 180 градусов и идти 100 шагов.
Скрипт слона:
Если поворот и ходьба будут находится в одном цикле, то объект будет поворачивать после каждой команды идти ... шагов. Это слишком часто и выглядит как метанье на почти одном месте.
Представьте, что мы создаем игру, в которой герой, управляемый пользователем, может переходить из комнаты в комнату. При этом из определенной комнаты герой может попасть только в одну или несколько других, а не во все. Например, пусть схема расположения комнат будет такой:
Т.е. из комнаты 1 можно попасть в комнату 2. Из второй комнаты возможен переход в первую и третью и т.п. Событием, после которого будет производиться переход, будет местонахождение героя у соответствующего края сцены. Так для первой комнаты это будет правый край.
В среде программирования Scratch к фону сцены обращаются по его имени, (если программный код составляется для объекта Сцена) или по номеру фона (для других объектов). В нашей программе важно правильно расставить фоны по-порядку и назвать их.
Теперь выберем какой-нибудь объект в качестве героя и заставим его двигаться. Управляемое перемещение объекта может осуществляться с помощью мыши и клавиатуры. Если выбрать мышь, то код может быть таким:
Здесь, когда пользователь нажимает мышь, то объект движется по направлению к курсору.
Вспомним, что размер холста в Scratch равен 480х360 пикселей, а начальная точка системы координат находится в центре. Поэтому у правого края значение x = 240, у левого x = -240. Верхний край: y = 180; нижний край: y = -180. Пусть в дальнейшем фон меняется, когда соответствующая координата объекта равна по модулю 200 или 150. Это связано с удобством управления.
Алгоритм перехода объекта из комнаты 1 (лаборатория) в комнату 2 (спальня) может быть таким, как описано ниже.
Для героя:
Для сцены:
Программный код для объекта:
Программный код для сцены:
Сценарии перехода в другие комнаты аналогичны приведенным выше, за исключением значений. Всего должно получиться восемь комбинаций перехода из комнаты в комнату. Запрограммируйте эти переходы самостоятельно. Для помощи воспользуйтесь таблицей ниже.
фон от сцена = ... |
положение от ... ... ... |
передать ... |
идти в ... ... |
1 |
> 200 |
В спальню из лаборатории |
x: -200 |
2 |
< -200 |
В лабораторию из спальни |
x: 200 |
2 |
> 200 |
В гостиную из спальни |
x: -200 |
3 |
< -200 |
В спальню из гостиной |
x: 200 |
3 |
> 150 |
В студию из гостиной |
x: положение x |
4 |
< -150 |
В гостиную из студии |
x: положение x |
3 |
< -150 |
В кабинет из гостиной |
x: положение x |
5 |
> 150 |
В гостиную из кабинета |
x: положение x |
Когда мы добавляем кем-то ранее подготовленный объект из библиотеки Scratch (кнопка Выбрать новый объект из файла), то, можно сказать, импортируем его в наш проект. Однако мы с таким же успехом можем делать обратное: из рабочего проекта Scratch добавлять объект в общую библиотеку. Это можно назвать экспортом объектов. Потом наш объект можно использовать в других проектах наряду с другими стандартными (существующими до этого) объектами.
Если к объекту был "привязан" программный код, то они экспортируются и импортируются совместно. Мы это уже видели на Занятии 6 "Рисование в Scratch", когда взятый их коллекции объектов карандаш имел при себе небольшой скрипт. Теперь попробуем сделать обратное — добавим в библиотеку созданный нами на прошлом занятии смайлик. Сделать это можно так:
После того как объект экспортирован, его можно добавлять в новые проекты Scratch с помощью кнопки Выбрать новый объект из файла. Экспортируйте смайлик, затем создайте новый проект и добавьте в него этот объект.
Скрипт смайлика в новом проекте появится, однако работать не будет, т.к. в старом проекте он зависел от работы сценария другого объекта. В этом нет ничего страшного. Программу всегда можно дописать, переписать, либо удалить. Хотя обычно экспортируют достаточно независимые от других объектов спрайты, которые после импорта сразу же можно использовать.
Обычно начинающие программисты после того, как познакомятся с основами программирования на том или ином языке, изучают программы других, более опытных, коллег. Таким образом можно быстро приобрести опыт, узнать много нового, познакомиться с принятыми в сообществе принципами разработки и наилучшими способами решения тех или иных задач.
Рассмотрим некоторые объекты со скриптами, которые уже есть в стандартной библиотеке.
Hungry fish (голодная рыба)
У этого объекта очень простая программа. После запуска рыбка начинает преследовать указатель мыши. В коде программы можно отметить лишь одну особенность: объект останавливается, когда расстояние до курсора становится меньше, чем 10 точек. Это очень незначительное расстояние, поэтому рыба останавливается, когда касается курсора почти своим центром. Если увеличить это расстояние до можно добиться эффекта, когда объект останавливается, не доходя до курсора. Иногда именно это и требуется.
Jump-flip monster (кувыркающийся монстр)
У монстра более интересная программа, чем у рыбы. Он совершает один кувырок при однократном нажатии стрелки вправо на клавиатуре. Разберемся, почему?
Первый скрипт (тот, который выше), заставляет объект сначала переместиться вперед на 50 точек и вверх на 100, а затем снова вперед на 50 и уже вниз на 100. Получается, что монстр как бы прыгает вперед. Команда повернуть в направлении 90 просто устанавливает правильную ориентацию объекта перед движением.
Второй скрипт работает параллельно с первым. Он придает объекту вращательное движение. За одно нажатие стрелки вправо объект совершает 10 поворотов по 36 градусов, что в итоге составляет 360 градусов, а это, как известно, полный оборот вокруг своей оси. Кроме того, полный оборот совершается ровно за 2 секунды (0.2 * 10). Именно столько выполняется первый скрипт. Поэтому получается синхронность: за один прыжок объект совершает один полный оборот.
Friction marble (трущийся камень)
Чтобы понять, как работает эта программа, надо немного разбираться в физике. Когда мы толкаем какой-то предмет горизонтально (допустим, мяч), то обычно он останавливается через некоторое время. Это происходит из-за трения о грунт. Если мы постоянно будем толкать мяч, то скорость его движения будет постепенно увеличиваться.
Программа для объекта friction_marble как раз и моделирует эти физические законы. Чем больше мы жмем на стрелку, тем большую скорость развивает шар. При прекращении воздействия его скорость постепенно уменьшается, после чего шар останавливается.
С помощью чего это достигается в программе?
В программе существуют две переменные — x velocity и y velocity, значения которых сразу после запуска программы приравнивается к нулю. Значения этих переменных постоянно (всегда) влияют на то, насколько единиц будет изменяться положение объекта.
Когда нажимаются клавиши со стрелками, то значения переменных меняются. Чем больше нажимается определенная стрелка, тем больше значение переменной отклоняется от нуля. В результате то количество единиц, на которые меняются x и yтакже увеличивается. Это создает эффект увеличения скорости перемещения объекта. С другой стороны, когда воздействие отсутствует (клавиши не нажимаются), значение переменных постепенно приближается к нулю. Этот достигается за счет умножения на десятичное число от 0 до 1 (в нашем случае переменные умножаются на 0.98).
Обычно Scratch поставляется с большой коллекцией готовых спрайтов и фонов. Новички в Scratch охотно ими пользуются. Но что делать, если вы придумали какой-то сценарий или программу, для которой требуются объекты, которых нет? Их можно нарисовать самим прямо в среде Scratch. Здесь есть встроенный редактор, позволяющий создавать спрайты. Чтобы его запустить, нужно нажать на кнопку Рисовать новый объект в ячейке, где отображаются объекты программы (нижняя правая ячейка Scratch).
Языки программирования по сути выполняют те или иные операции над данными (числами, строками, списками и др.). Эти данные в программу может "заложить" программист или же они будут поступать от пользователя в процессе выполнения программы. Например, если программа выполняет умножение числа на само себя, то это число может быть получено от пользователя. Чтобы пользователь ввел число, должна выполниться какая-то встроенная команда, предоставляющая интерфейс для ввода данных.
В Scratch команду, позволяющую пользователю ввести данные, можно найти в разделе сенсоры. Она называется спросить … и ждать. Вместо фразы "Как ваше имя?" можно вписать другую фразу, а также поставить туда переменную или что-то другое. Когда команда спросить … и ждать выполняется, то внизу холста появляется поле для ввода. Пользователь должен туда ввести данные и нажать Enter или галку в конце поля. Проверьте самостоятельно, как работает эта команда.
После того, как команда спросить … и ждать выполнена, текстовое поле исчезает с холста. Куда же попадают данные, которые мы в него вводили? Они оказываются в переменной ответ. Это встроенная переменная (ее не нужно создавать) и находится она в сенсорах.
Попробуем составить сценарий, при выполнении которого кот спрашивает у нас имя, а затем приветствует нас по имени (например, "Привет, Саша").
В результате скрипт получится таким:
Соберите его и проверьте, как это работает. Обратите внимание, что после слова "Привет" и запятой добавлен также пробел, чтобы разделить слова.
Усложним нашу программу. Пусть после того, как кот поздоровается, он спросит, сколько будет 2*2? Пусть он спрашивает это до тех пор, пока пользователь не даст правильный ответ. Для того, чтобы команда спросить … и ждать выполнялась постоянно до определенного момента, ее необходимо поместить в конструкцию повторять до …. Условием, когда эта конструкция должна прекратить выполняться, будет правдивость результат выполнения операции ответ = 4. Соберите такой сценарий:
Если теперь его запустить на выполнение, то произойдет следующее:
Рисование мышью
В среде программирования Scratch можно почти также рисовать как в среде KTurtle. Но Scratch более многофункциональная среда, в ней можно писать программы, которые не просто выводят изображения на холсте. В Scratch можно запрограммировать, скажем так, интерактривное рисование, когда пользователь сам формирует изображение на холсте уже в процессе выполнения программы (т.е. после нажатия кнопки запуска).
В KTurtle можно было организовать взаимодействие программы с пользователем лишь посредством диалоговых окон. В Scratch можно использовать мышь и клавиатуру. Для наглядной иллюстрации этих возможностей импортируем из библиотеки Scratch объектDrawing pencil (рисующий карандаш) он находится в каталоге Things (Вещи). Этот объект появляется с уже готовым скриптом:
Удалите со сцены кота и добавьте рисующий карандаш. Запустите программу и выясните, что делает этот карандаш? Остановите выполнение программы.
Теперь подробно разберем скрипт карандаша. После того как программа запущена, толщина пера увеличивается до 5 точек из-за команды установить размер пера …, которая находится в группе команд, отображающихся при нажатии кнопки перо. На самом деле рисует вовсе не карандаш, а именно невидимое перо, которое мы привязываем к нашему объекту. Другими словами, можно использовать для рисования абсолютно любой объект (кота, человека, мяч и т.п.).
Далее в скрипте используется цикл всегда, следовательно, то, что находится внутри него, выполняется постоянно, пока программа работает. Всегда выполняется следующее: если левая кнопка мыши нажата, то карандаш перемещается в место, где находится ее указатель и перо опускается; если кнопка не нажата, то перо поднимается. Когда перо опущено на холсте остаются следы от его перемещения, т.е. двигая мышью, мы двигаем и карандашом и привязанном к нему пером в опущенном состоянии. В результате получается, что при выполнении программы карандаш рисует, когда кнопка мыши нажата, и не рисует, когда отжата. Рисование происходит в том месте, где находится курсор мыши.
Также добавьте скрипт для объекта Сцена, который очищает холст при запуске программы: когда щелкнут по (зеленый флаг) , очистить.
Предположим, что требуется в Scratch реализовать следующий сценарий. Под водой моллюск пытается поймать пищу, которая от него постоянно отпрыгивает в новое случайное место. Через какое-то время моллюску все-таки удается поймать и съесть еду.
Итак, моллюск всегда должен двигаться за едой. Причем через определенный ряд действий это должно прекратиться. Программа для моллюска может быть такой:
Проследим логику работы этого скрипта. Сначала моллюск стоит и думает. После чего он поворачивается к еде и идет к ней до тех пор, пока не коснется ее. Все эти действия повторяются 5 раз. Обратите внимание, в команду идти … шагов вставлена команда выдать случайное число от … до …. Вторая команда выдает случайное для нас число в указанном диапазоне, т.е. любое число от первого числа в команде до второго включительно. В данном случае эта команда влияет на то, с какой скоростью двигается моллюск. Объясните, почему?
После того, как моллюск совершит несколько вышеописанных циклов, он передаст в окружающую среду сообщение "поймал". В результате у него должна появиться соответствующая ситуации мысль.
Если сейчас запустить программу, то моллюск подойдет к еде, пять раз подумает "Ммм.." и один раз "Вкусно". Составьте скрипт для моллюска.
Теперь подумаем, что должна делать еда.
Она всегда должна оказываться в неожиданном для моллюска месте, если тот касается ее. "Случайное место" определяется двумя командами идти в x: … y: … и выдать случайное число от … до …. Т.е. после того, как координаты x и у определяются случайным образом, объект перемещается в заданную точку.
Второй скрипт еды очень прост. Если в "пространстве" появляется сообщение "поймал", то еда должна его получить и спрятаться.
Теперь программа будет работать так, как надо: еда появляться в случайном месте, а моллюск бегать за ней до определенной поры. Составьте сценарии для второго объекта и оцените, как работает вся программа.
Анимацию можно сделать интересней, если придать сцене больший динамизм. Пусть картинка сцены слегка видоизменяется, причем тоже случайным образом. Рассмотрим вот такой скрипт для Сцены:
В нем присутствует переменная фон, значение которой определяется случайно, и это значение может быть только числами 1, 2 или 3. Если фон = 1, то на картинке появятся завихрения случайной силы, если фон = 2, то появится эффект "рыбий глаз". Во всех остальных случаях будет меняться цвет фона. Значение переменной будет обновляться через каждые 5 секунд. Составьте подобный сценарий для своей программы.
Иногда бывает необходимо, чтобы объект как бы множился на сцене, т.е оставлял свои копии. В Scratch это можно сделать, используя команду печать, относящуюся к кнопке перо, где собраны команды, позволяющие рисовать на холсте. Если объекту дать команду печать, а затем переместить в другое место, то на прежнем останется изображение объекта. Сценарий можно составлять по-разному, например, вот так:
Интерактивность
Под интерактивностью будем понимать возможность взаимодействия между объектами, принадлежащими разным средам. Например, если в написанной нами программе задано, что кот из Scratch догоняет мышь из Scratch, а она реагирует на него и убегает, то это не будем считать интерактивностью. И кот и мышь - объекты одной среды. А вот если кот из Scratch реагирует на действия реального человека (например, нажатие пользователем определенной клавиши), то это уже интерактивность, т.к. объекты принадлежат разным "средам обитания".
Пусть требуется сделать так, чтобы человек мог управлять поведением кота на холсте Scratch. Если написать такой сценарий
, то после его запуска, объект будет преследовать указатель, если зажать левую кнопку мыши.
Команда мышка нажата? находится в разделе сенсоры, где сгруппированы команды, назначение которых — проверять наличие заданных изменений в окружающей среде объекта. Например, команда мышка по x отслеживает, где находится курсор мыши по оси x.
Управляющая конструкция всегда, если … похожа на цикл всегда, за исключением того, что эта конструкция сочетает в себе цикл с условием. Такой цикл выполняется лишь тогда, когда условие истинно. В данном случае, когда мышка нажата.
Составьте такой сценарий. Желательно в ячейке свойств объекта включить кнопку "только поворот влево-вправо". После чего добавьте на сцену еще один объект, продублируйте сценарий первого объекта и перенесите его на второй. В итоге по холсту следом за курсором мыши должны "ходить" два объекта.
Координаты
Когда окно Scratch только открылось, мы видим, что кот стоит в центре холста. Посмотрим теперь на его координаты x и у в ячейке свойств объекта. Там написано, что x: 0 и y: 0. Почему так? Если вспомнить приложение KTurtle, с помощью которого мы изучали язык Logo, то точка с координатами (0,0) должна быть в верхнем левом углу холста. Теперь придется забыть об этом. В Scratch начало системы координат - это центр холста. От центра вправо значение х увеличивается, влево — уменьшается (становится минусовым, отрицательным). Аналогично с осью y. По направлению вверх идут положительные значения, вниз — отрицательные. Чем дальше от центра, тем больше абсолютное значение числа. Переместите несколько раз кота по холсту и отметьте, как меняются значения x и y в ячейке свойств объекта.
Интерфейс Scratch и основы работы в нем
Будем знакомиться с интерфейсом Scratch постепенно, разбирать работу лишь того, что нам потребуется на текущий момент.
После того, как программа запустилась, перед нами появляется окно, в котором можно выделить три части (три столбца). В свою очередь каждый столбец состоит как бы из двух ячеек: верхней и нижней. Все ячейки разные и каждая из них предназначена для своей конкретной цели.
Верхняя ячейка в первом столбце содержит восемь кнопок, которые называютсядвижение, контроль, внешность, сенсоры, звук, операторы, перо, переменные. При включении одной кнопки все остальные выключаются. Включенная кнопка вся окрашивается в соответствующий ей цвет. При этом в нижней ячейке первого столбца появляются команды, связанные с включенной кнопкой. У всех кнопок разные привязанные к ним команды. Попробуйте нажимать кнопки и посмотрите, как меняются команды в нижней ячейке .
На этом уроке нас будут интересовать только команды, связанные с кнопкамидвижение и контроль.
Рассмотрим верхнюю ячейку второго столбца.
Здесь показаны свойства объекта, которым мы будем управлять (писать программы для него). Сейчас - это кот. Его имя написано в поле - Спрайт1. Странное имя для кота, не так ли? Спрайтами в Scratch называются все объекты по умолчанию, отличаются лишь их номера. Обычно предполагается, что мы сами их будем переименовывать и называть более адекватными именами. Например, для кота лучше в поле имени вписать кот или Вася или что-нибудь еще. Сделайте это.
Ниже поля имени отображены три свойства объекта (в данном случае, кота) — это его положение (координаты x и y) и направление. Если вы уже изучили работу в среде KTurtle, то вспомните, что направление, когда черепашка «смотрит» вверх равно 0 градусам, когда точно направо — равно 90 градусам, а полная окружность равна 360-ти градусам. Здесь то же самое. Кот смотрит направо, поэтому его направление равно 90.
Внизу мы видим три кнопки-вкладки — скрипты, костюмы и звуки. От того какая из них нажата, зависит ячейка внизу. Если нажата кнопка скрипты, то нижняя ячейка второго столбца покажет программы (скрипты) для объекта, который отображен в верхней ячейки. Сейчас нажата кнопка скрипты и мы видим пустую ячейку внизу. Это значит, что для кота пока нет никакой программы. Мы составим ее чуть позже. Кнопкикостюмы и звуки позволяют настраивать и менять соответственно внешний вид объекта и издаваемые им звуки. Оставьте включенной кнопку скрипты.
Перейдем к третьему столбцу и опишем в нем только верхнюю ячейку, где видим белое поле и кота на нем. Белое поле — это холст. Многие действия, которые задает программист на вкладке скрипты, объект выполняет именно на холсте. Так, если мы запрограммируем ходьбу кота, то он будет перемещаться по холсту.
Если зажать левую кнопку мыши над котом, а затем не отпуская ее перемещать мышь, то кот будет перемещаться. Таким образом, мы можем менять его положение на холсте. Переставьте кота в другое место и посмотрите в ячейку свойств объекта (второй столбец). Заметьте, что координаты x и y изменили свои значения.
Над холстом находятся две вот такие кнопки:
Когда для объектов (кота и других) будут составлены какие-нибудь скрипты (программы) на вкладке скрипты, то чтобы объекты начали их выполнять, надо нажать зеленый флажок. Чтобы остановить выполнение, надо нажать красный круг. Не забывайте останавливать свои скрипты!
Над флагом и кругом мы видим еще три кнопки.
Скретч - новая среда программирования, которая позволяет детям создавать собственные анимированные и интерактивные истории, игры и другие произведения. Этими произведениями можно обмениваться внутри международной среды, которая постепенно формируется в сети Интернет.