какую функцию выполняет блок сенсор в программе скретч
Константы и сенсоры в Scratch._Теория
Ищем педагогов в команду «Инфоурок»
Тема: Константы и сенсоры в Scratch.
Планируемые образовательные результаты:
предметные — формирование представлений о типах данных программной среды Scratch, возможностях их использования;
метапредметные — формирование представления о возможностях компьютера как устройства для создания собственных программ с использованием программной среды Scratch;
личностные — понимание роли компьютера в жизни современного человека и использование его в качестве инструмента для решения задач математических моделей.
Решаемые учебные задачи:
приобретение умения использовать блоки в среде Scratch;
применение умений вносить и изменять данные в блоках в программной среде Scratch;
приобретение навыка грамотного написания программ, включая завершение программы;
приобретение навыка создания алгоритма для выполнения поставленной задачи.
Основные понятия, изучаемые на уроке:
Необходимые средства ИКТ:
ПК учителя с установленной программной средой Scratch, мультимедийный проектор, экран;
ПК учащихся с установленной программной средой Scratch.
Сообщение темы урока: «Константы и сенсоры в Scratch»
В начале урока входной контроль для проверки усвоения предыдущего материала.
Задание 1.
Сколько констант изображено на рисунке 1?
Кстати, во многих науках существуют свои константы, но они, в отличие от констант в программировании, не зависят от человека, а целиком определяются законами природы.
Задание 2.
Известны ли вам какие-либо «природные» константы?
Сенсоры событий
Если данные меняются по ходу выполнения программы, то их называют переменными. Переменные добавляют в те же поля, что и константы, только путем вставки служебных блоков .
Служебные блоки являются частью системы программирования, поэтому их можно назвать системными переменными. Большая часть системных переменных находится в категории сенсоры восприятия внутренних и внешних событий.
Сенсоры выполняют для объектов проекта такую же роль, что и органы чувств для живых организмов. Это их глаза и уши. Сцене и каждому спрайту они даны системой от рождения, их не нужно создавать.
Рис. 2. Сенсоры внутренних и внешних событий
Сенсоры позволяют создавать условия для запуска нужных действий в ответ на заданное событие.
Сенсор общения с человеком
Среди сенсоров есть пара удивительных блоков, позволяющих спрайтам и сцене общаться с людьми. Они работают в связке: стек Спросить () и ждать задает вопрос, а репортер Ответ хранит полученный ответ:
Рис. 3 Сенсор общения с человеком
Рис. 4 Действие стека Спросить
Ввод ответа должен быть завершен нажатием на клавишу Enter или щелчком на флажок
Типичные цели использования блока Спросить () и ждать:
получение информации от пользователя (его имени, ответа на поставленный вопрос и т.д.);
ввод значений переменных и списков в проект самим пользователем;
выбор вариантов развития проекта.
Машина времени
Таймер работает с момента включения программы. Он считает время в десятых долях секунды. Его нельзя остановить или поставить на паузу, но с помощью блока перезапустить таймер можно сбросить (обнулить) его текущее значение.
Любой блок можно выполнить, не включая его в скрипт. Нажмите один раз левой кнопкой мыши на блок Перезагрузка таймер в палитре датчиков:
Таймер должен обнулиться, что видно по значению его монитора на сцене: . Повторите эту операцию несколько раз. При каждом применении блока перезапустить таймер значение таймера обнуляется.
Чаще всего блок перезапустить таймер используется в проектах, чтобы:
запустить таймер одновременно с запуском проекта, например, вместе с первым нажатием игрока на зеленый флажок;
сбросить таймер на каждом новом уровне игры, этапе викторины и т.п.;
показать длительность различных игровых процессов, например, время жизни спрайта, сбрасывая его значение при необходимости, например, если умер спрайт;
запустить определенные скрипты через указанную количество секунд.
Кстати, 8 блоков из разных категорий имеют поля с параметром времени. Эти блоки прекрасно умеют пользоваться таймером. Достаточно указать количество секунд в окне параметра, все остальное блок сделает сам.
Найдите в палитре команд восемь блоков, которые имеют поля с параметром времени.
Когда сенсоры бессильны
С помощью сенсоров каждый объект «знает» о действиях всех других объектов и может соответственно этому менять свое поведение. Но часто возникает необходимость сделать что-то совместно или вызвать нужные действия другого объекта, например, попросить его о помощи.
Упражнения
Учитель математики
Выполняя проект Математик, мы научили спрайт умножению и сложению. Теперь мы научим его спрашивать у нас правильный ответ и определять, правильно мы ответили или нет. Для этого добавим в скрипт математика блок спросить, а также включим несколько С-блоков для создания ветвлений программы в зависимости от полученных данных.
Откройте проект Математик.
Выделите спрайт Математик и внесите изменения в его скрипт.
Рис.5. Скрипт викторины
Проверьте работу скрипта.
Сохраните проект в файле Учитель математики.
2. Математик с таймером
Добавим в скрипт математика подсчет времени, которое потребуется игроку для ответа на вопрос. Для этого мы перезапустит таймер перед вопросом и выведем его округленное до целого значение, когда получим ответ.
Откройте проект Учитель математики.
Перейдите на спрайт математик и добавьте в скрипт после заголовка блок перезапустить таймер (рис. 6.).
Рис. 6. Перезапуск таймера в начале выполнения скрипта
3. Добавьте в блоки думать дополнительные блоки слияния строк для вывода округленного значения таймера:
Рис. 7. Вывод округленного значения таймера
4. Запустите скрипт на выполнение. Теперь спрайт должен сообщать не только о правильности ответа, но и о потраченном времени.
5. Сохраните проект Математик с таймером.
4. Неуловимый спрайт
Запрограммируем действия спрайта в ответ на приближение указателя мыши. Пусть спрайт всегда перемещается на 10 шагов, если расстояние до указателя мыши меньше величины размера спрайта (рис. 8).
Рис. 8. Использование репортера расстояния для перемещения спрайта
Эту задачу можно решить разными способами. Например, репортер размер из категории Вид можно заменить аналогичным репортером из сенсоров:
Вместо блока идти 10 шагов, можно использовать блоки перемещений в случайные точки сцены. Ведь спрайты могут перемещаться, как ракеты, если вы не забыли.
5. Тень мяча
Создайте новый проект. Добавьте в него спрайт мяча и нарисуйте спрайт Тень. Соберите для тени скрипт по образцу (рис.9). При перемещении мяча его тень должна двигаться параллельно по оси Х.
Какую функцию выполняет блок сенсор в программе скретч
Шпынева Светлана Михайловна, учитель информатики МАОУ «Центр Образования №13 имени Героя Советского Союза Н.А. Кузнецова» г.Тамбова
Блок «СЕНСОРЫ»
Задание:
Открыть проект Drog2, создать анимацию: Дракон летит к пальме с бананами, извергает огонь. Вдруг откуда не возьмись – Динозавр. Дракон пугается и глотает пламя, с открытым ртом смотрит на Динозавра, который задает ему вопрос: «Как Ваше имя?». Ввести заикающийся от испуга ответ Дракоши: «Дрокккоша яйя». Ответ должен сохраниться в верхнем левом углу экрана действий.
Ход работы:
1. Открыть проект Drog2.
2. У спрайта «Динозавр» перетащить в закладку «Скрипты» команду из блока «СЕНСОРЫ».
3. ДЩЛКМ запустить команду – на экране действий появится:
Внизу экрана действий появится диалоговое окошко с текстовым курсором, ожидающее ввода ответа. Выполнение скрипта приостановится до нажатия «галочки» или клавиши ENTER.
4. В области команд блока «СЕНСОРЫ» перед элементом «ответ» включить флажок (щелкнуть ЛКМ в окошке):
На экране действий появится элемент , где будет отражаться введенный текст ответа.
5. Вписать любой ответ, нажать на «галочку», пронаблюдать появление ответа в на экране действий.
6. Добавить в скрипт «Динозавра» перед имеющейся там командой стартовую команду с флагом, команды «спрятаться», «ждать 4 секунд» (за это время летит Дракон), «показаться», «ждать 1 секунд» (за это время Дракон глотает пламя), «спросить … и ждать» (когда Дракон ответит), «говорить … в течение 2 секунд». Получится скрипт:
7. Перейти в закладку «Костюмы» Дракона и импортировать костюм Дракона без огня (костюм dragon1-b1).
8. Перейти в закладку «Скрипты» Дракона и составить следующий скрипт:
9. Запустить его, посмотреть анимацию.
Из верхнего правого угла экрана действий (х=240, у=180) Дракон с огнем (костюм dragon1-b) медленно летит («плыть 3 секунды в точку х: 20 у: 110») к пальме. Чуть не долетает до нее, как появляется Динозавр. Дракон пугается и глотает пламя («перейти к костюму dragon1-b1»), рот остается открыт.
Динозавр спрашивает имя у Дракона. Дракон отвечает – ответ виден в окошке «ответ» левого верхнего угла экрана действий. Динозавр говорит: «Нам не нужен огонь!». Обратите внимание, что контур «текстового пузыря» вопроса из команды «спросить … и ждать» (рис.1) голубого цвета, а контур «текстового пузыря» разговорного текса из команды «говорить …» (рис.2) – серого.
10. Сохранить изменения в проекте под именем Drog3.
Блок ПЕРЕМЕННЫЕ
Изначально в этом блоке лежат 2 кнопки: — создать/удалить переменную и список. Можно создавать несколько переменных с помощью кнопки Создать переменную». ЩЛКМ по ней – появляется окошко, в котором необходимо напечатать имя переменной:
После того как переменная создана, можно устанавливать её значение, изменять её значение с помощью появившихся в области команд элементов:
Можно передавать значение переменной N другим исполнителям, если выделено «Для всех объектов». Или использовать только для одного объекта – тогда выделить «Только для этого объекта».
Если переменная не нужна, её можно удалить с помощью появившейся так же кнопки
Задание:
Создать анимацию с героями-инопланетянами, в которой один герой задает 3 вопроса из курса информатики. При этом, если получает 2 или 3 ответа, то сообщает, что отпускает второго героя, а если 1 или 0 – оставляет второго героя для изучения информатики на своей планете ИНФОРМА. Вступительный текст можно придумать произвольно. Проверка ответов на вопросы должна быть гибкой: 1 – ПК, компьютер, Компьютер, КОМПЬЮТЕР; 2 – программа, Программа, ПРОГРАММА; 3 – ПО, программное обеспечение, Программное обеспечение.
Какую функцию выполняет блок сенсор в программе скретч
Эта статья предназначена для версии Скретч 2.0. Для просмотра похожей статьи для версии 1.4 перейдите по ссылке Блок (1.4)
Эта статья о программировании. Для просмотра статьи о блокировании пользователей, перейдите по ссылке Бан
Содержание
Формы блоков [ ]
Шапка [ ]
Главная статья: Блок шапка
Форма обычного блока
Обычный блок [ ]
Главная статья: Обычный блок
Обычные блоки – это блоки команд. Они прикрепляются сверху выступом и прикрепляют снизу выступом вовнутрь, то есть остальные блоки могут быть помещены как сверху, так и снизу обычных блоков. Всего насчитывают 77 таких блоков – это самая большая категория блоков.
Форма логического блока
Логический блок [ ]
Главная статья: Логический блок репортёр
Логические блоки – это условия, определяющие правильно или ложно заданное условие. Спроси своего друга «2 умножить на 2 будет 4?» и попроси его ответить только «Да» или «Нет». Твой друг станет этаким логическим блоком. Они имеют форму шестиугольника и всего насчитывается 13 таких блоков.
Форма блоков репортёров
Блок репортёр [ ]
Главная статья: Блок репортёр
Форма обвивающего блока
Обвивающий блок [ ]
Главная статья: Обвивающий блок
Обвивающие блоки – это блоки повторения или блоки условий. Их насчитывают всего 5 и их можно найти во вкладке » Контроль «. Имеют выступ вовнутрь сверху и простой выступ внутри и снаружи.
Форма закрывающего блока
Закрывающий блок [ ]
Главная статья: Закрывающий блок
Закрывающие блоки заканчивают скрипт или все процессы. Имеют выступ вовнутрь всерху и не могут иметь прикреплённых блоков снизу. Всего существует 2 закрывающих блока, и оба находятся во вкладке «Контроль».
Список блоков [ ]
Всего насчитывается 145 блоков в Скретч 2.0
Блоки движения [ ]
Главная статья: Блок движения
Блоки движения – блоки, помогающие спрайту двигаться. Существует 17 блоков движения, причём все недоступны для программирования сцены:
Обычные блоки движения [ ]
Блоки движения репортёры [ ]
Блоки внешности [ ]
Главная статья: Блок внешности
Блоки внешности – блоки, контролирующие внешность спрайта. Всего существует 23 таких блоков из которых 19 доступно для сцены.
Обычные блоки внешности [ ]
Блоки внешности репортёры [ ]
Блоки звука [ ]
Главная статья: Блок звука
Блоки звука – блоки, управляющие звуками и ЦИМИ (MIDI) функциями. Насчитывают 13 таких блоков, причём все могут быть использованы сценой.
Обычные блоки звука [ ]
Блоки звука репортёры [ ]
Блоки рисования [ ]
Главная статья: Блок рисования
Блоки рисования – блоки, управляющие пером спрайта.
Обычные блоки рисования [ ]
Данные [ ]
Переменные [ ]
Блоки переменных – 5 блоков, изменяющих переменные проекта.
Обычные блоки переменных [ ]
Блоков переменных репортёров существует столько, сколько в проекте переменных.
Массивы [ ]
Главная статья: Массив
Блоки массивов помогают управлять массивами проекта. Всего их 10 штук.
Обычные блоки массивов [ ]
Блоки массивов репортёры [ ]
Логические блоки массивов [ ]
Блоки событий [ ]
Главная статья: Блок событий
Концепции программирования в Scratch
Многим знаком Scratch – детская среда программирования, обучение в которой обычно сводится к созданию творческих проектов по принципу «от простого к сложному». При этом «классический подход» к изучению программирования (переменные → ветвления → циклы → функции → структуры → объекты → …) в Scratch затруднителен.
Однако изменение последовательности изучения понятий (назовем их концепциями) структурного, объектно- и событийно-ориентированного программирования, их сокрытие за яркими спрайтами и интерактивной анимацией, не означает, что на концепциях не следует делать акцент. Особенно, если целью ставится не столько развитие творческих способностей, сколько обучение программированию. Эту идею я постаралась отразить в своем курсе.
Первым, с чем сталкивается начинающий скретчер, являются спрайты. Хотя в Scratch как такового объектно-ориентированного программирования нет, спрайты можно считать объектами. На этом этапе обучающийся видит, что в программе может быть множество объектов, поведением которых управляют внешние для них скрипты. Спрайты получают команды или по требованию передают информацию о своем состоянии, то есть программирование сводится к управлению объектами.
Вторым, что в Scratch сразу сваливается на голову юного программиста, является понятие о многопоточности. Каждый спрайт может иметь по несколько скриптов, выполняемых одновременно. Несколько спрайтов также могут выполнять свои программы одновременно друг с другом. Причем оказывается сложнее организовать последовательное выполнение.
Уже на первом занятии мы не можем избежать знакомства с циклами. Иначе кот особо не разбежится. На этом этапе знакомство приходится оставлять интуитивным и поверхностным. Мы ограничиваем его циклами «повторять всегда» и «повторить … раз», которые более просты для понимания. Цикл с условием изучается в уроке, специально посвященном циклам. Этот урок предполагает знание логических выражений и переменных.
Поскольку Scratch событийно-ориентированная среда, блоки условного оператора удобнее изучить до переменных. Условием могут выступать те или иные события.
На мой взгляд, такая последовательность лучше, так как за каждый урок мы вводим минимум понятий. Причем не абстрактных, а сразу видим их практическую пользу.
Если же сначала изучать переменные, то их назначение и пользу сложно продемонстрировать, поскольку до этого не изучен условный оператор, ввод данных и генерация случайных чисел.
В Scratch, не считая списков, программист сталкивается с тремя типами данных: числами, строками и булевым типом. При этом тип привязан к значению, а не переменной. Преобразовывать строки в числа и обратно не требуется. Строки в кавычки не заключаются.
Блок, возвращающий логическое значение и имеющих характерную для него угловатую форму, можно вставлять в округлые поля. Обратное не верно: там где предполагается логическое выражение, нельзя вставить обычную переменную.
Scratch реализован так, чтобы в процессе выполнения не возникало критических ошибок. Видимо поэтому, если попытаться использовать строку в арифметической операции, она заменяется нулем (см. первый скрин).
Программист должен знать, что возможности языков программирования расширяются библиотеками. Работая в Scratch, ученик может подключать дополнения, которые приводят к появлению в среде новых команд.
Функции в Scratch реализованы в разделе «Другие блоки», где с одной стороны вы создаете собственный блок, который можно вставлять в другие скрипты. С другой стороны – должны собрать функциональность этого блока, то есть то, что он будет делать.
Возврата значении из скретч-функции нет.
Таким образом, изучение концепций программирования в событийно-ориентированной среде накладывает свой отпечаток. По сути мы сначала изучаем более сложные и абстрактные понятия и, лишь углубляясь в процесс, переходим к элементам структурного программирования. Плюс это или минус для первого знакомства – вопрос спорный.
Scratch для «продвинутых»
Клонирование и переменные в Scratch
Моему ученику нравилась игра — «Зомби против растений». И ему было интересно самому запрограммировать её. Давайте вспомним как данная игра работает? С правой стороны у нас есть шеренга растений, которая расстреливает приближающихся зомби.
Есть множество решений данной задачи, но на мой взгляд более элегантное решение — задействовать минимально возможное количество спрайтов, т.е. использовать клонирование.
Как сделать так, чтобы у каждого отдельного клона был собственный уровень жизни? Что выбрать переменные или списки? Сделали попытку использовать списки, но после более детальной проработки поняли, что данная структура данных не помогает решить проблему. У переменных и списков, в Scratch есть 2 типа видимости для каждого типа данных — это «для всех спрайтов» или «только для этого спрайта». Пришлось проверять область видимости. Начали мы с переменных.
Дойдя до рабочего варианта переменной с областью видимостью «только для этого спрайта». В классических языках программирования такой тип видимости называют — локальным или приватным в зависимости от контекста.
Оказывается, что если эта переменная с данной областью видимости используется в клоне, то в клоне создается экземпляр переменной, принадлежащий конкретному клону и который используется для внутренних вычислений/работы клона. В нашем случае, у каждого клона есть своя «жизнь». Если стало интересно, то советую обратиться к справочнику. А вот картинка, которая показывает, как спрайты или клоны работают с переменными разных типов видимости.
Переменная с областью видимости «для всех спрайтов» (рисунок слева) — одна на всех. Кстати, здесь вы можете с детьми посмотреть работу с критическими секциями и что такое гонка за ресурс. А если область видимости переменной — «только для этого спрайта», то у спрайта и у его клонов появляется собственная переменная с тем же именем, с которой они работают (рисунок с права). И клоны не имеют доступа к переменной оригинала и переменной другого клона.
Это стало неожиданным и приятным открытием свойств Scratch для создания подобных алгоритмов.
ВАЖНО: Переменная — это очень мощный инструмент настоящего программиста, поэтому я сразу учу детей правильному именованию переменных, так как этот навык поможет им в проектах разной сложности.
Имена объектов как их идентификаторы
ВАЖНО: все переменные с зоной видимостью «только для этого спрайта».
Данный инструмент для меня стал совсем неожиданным. Давайте начнем с истории о том, как мы с учеником наткнулись на данную особенность языка. Мой ученик решил, создать игру с «искусственным интеллектом». Игра представляет звездные войны на космических кораблях и у игрока есть возможность управлять одним кораблем, в то время как противники гоняются за вами и за друг другом. Чтобы они могли преследовать вас или друг друга, им нужно как-то принимать решение о том, кого преследовать. Данную задачу можно решить в лоб и задать очередность преследования кораблей, но игра потеряет свою интеллектуальность и быстро наскучит. Поэтому ученик решил настроить интеллект таким образом, чтобы корабли с интеллектом преследовали ближайшего противника. Давайте посмотрим, как он начал решать данную задачу.
На мой взгляд хорошее решение для создания быстрого прототипа. Но какие ограничения здесь есть? Первое, усложнение кода по мере добавления новых кораблей. Следовательно, сложность кода повышается и не исключены мутации кода из-за усложнения. Время поиска ошибки и отладки алгоритма будет расти. И конечно, никто не отменял такую прикольную метрику, как старение кода (advance level SW Development). Что же делать? А делать необходимо следующее, нужно сделать обобщеный алгоритм, который будет динамично приспосабливаться к увеличению или уменьшению количества кораблей.
Для данного алгоритма нам и понадобиться свойство языка — имя как идентификатор объекта. Пришло время больших изменений и здесь вы, как учитель, можете рассказать про такое явление как рефакторинг. Это последовательное изменение кода, улучшение его структуры и его оптимизация. А главное, чтобы каждое изменение не ломало работу программы, и объем изменений тоже должен очень аккуратно подобран. Слишком много изменений — плохо, слишком мало — долго. Сформированный навык рефакторинга даст преимущество и эффективность работы программиста. Но для формирования навыка нужно работать головой, а не просто тыкаться. У меня получилось сделать 4 изменения в первоначальной программе и результат не изменился.
Заметьте, что я еще не удалил блоки, а оставил их. Зачем? Потому, что если что-то пойдет не так, мы можем вернуть предыдущий вариант, начав все заново. Но как только я проверю правильность выполнения обновленного скрипта, я сразу же их удалю, чтобы не отвлекаться на них в последующем.
Заметили? Сейчас в блоке «повернуться к …» стоит переменная и эта штука работает. Т.е. мы минимальными усилиями проверили, что данный подход работает. Это просто круто. Теперь мы можем начать писать алгоритмы, которые позволят определять объект преследования ближайшего корабля.
Что нам пригодится? Это из структур данных — это переменные и списки. Из алгоритмов — это нахождение минимального числа (расстояния) в списке. Еще нам необходим алгоритм, который определит имя объекта для преследования по минимальному расстоянию.
Сейчас будет написано много кода. Но для того, чтобы потом не захлебнуться и не запутаться в куче скриптов, нам необходимо использовать еще одну классную функцию, а именно создание собственных блоков. Эта функция очень мощная, но ее редко используют школьники, да и некоторые программисты, а ведь она позволяет создать понятный с первого прочтения алгоритм программы. Кстати, можете почитать про приемы создания понятного кода в книге Мартина Фаулера «Рефакторинг. Улучшение существующего кода»
Как и перед любым масштабным строительством нам необходимо все спланировать. Давайте спланируем в каком порядке будем разрабатывать блоки:
Для того, чтобы создать обобщенный алгоритм нам чем-то нужно пожертвовать, например, оригинальными именами спрайтов, придется их стандартизировать и получим следующий расклад.
И теперь мы готовы описать 1 часть программы. Все пишем для 1-ого корабля. Запускаем отдельно данный скрипт и смотрим результат. Поехали!
Если мы добавим новый корабль, нам нужно изменить в данном алгоритме лишь одну циферку. Клево? Клево!
Погнали дальше. А давайте научим его 2 алгоритму. Смотрим, что получилось. Это сразу конечный результат со вспомогательными функциями.
Ура! Работает. Проверить это можно следующим образом, должен быть обязательно 0 одним из значений в списке расстояний. Если у вас это не так, ищите ошибку.
Едем дальше! Поиск минимального расстояния. Заметили, что расстояние всегда положительно. И всегда будет минимальное число — 0. Ай-я-яй! Вывод — искать минимум, но не ноль. Можете попробовать свои силы и оптимизировать код самостоятельно, чтобы не делать расчет расстояния от корабля 1 до корабля 1 (это не опечатка).
Обучаем спрайт новой функции и получаем.
Не забываем проверять! Для этого можно даже остановить игру и запустить отдельный скрипт.
Мы написали все, что необходимо, теперь главное правильно использовать данные функции.
Если у вас все работает правильно, то вы должны увидеть следующее:
Заметили, что корабль с «искусственным интеллектом» разрывается между разными противниками. Вы можете усовершенствовать программу и усложнить принятие решения. Например, если у преследуемого корабля осталось мало жизни, то он добивает его, а если он нашел, ближе и с еще меньшим здоровьем, то добить сначала слабейшего.
Кстати, в данной программе можно уменьшить количество действий и усовершенствовать алгоритмы. Попробуйте свои силы. Взять данную программу можно здесь.
Подводим итоги
Вот на таких кейсах я узнал, как Scratch дает возможность ученикам быстрее освоить множество реальных техник программирования. На нем можно рассказывать про работу критических секций, про обобщенные алгоритмы, про переменные и их области видимости, про создание собственных блоков и структурирование кода. А также на данном языке можно рассказывать про профессиональные навыки, например, рефакторинг.
Это лишь малая часть инструментария программиста, но она являет очень важной. А в Scratch это объяснить становится чуточку легче.