Проект 3. “Сигнализация”
Скринкаст.URL-адрес:https://youtu.be/Yh2oPU7P-lo
Текстовое решение:
Для составления циклических программ с проверкой условия, возможно использовать еще один блок из раздела “Loops” (циклы) “while true do” (пока условие верно, делать). Рассмотрим использование банного блока на конкретном примере.
Рис. 110. “Пока условие верно, делать”
Задача: составить программу по воспроизведению на плате звука сигнализации, схожим со сигналом тревоги, звучащего в случае опасности – встряхивания платы, и его отключения при нажатии на одну из кнопок платы micro bit, используя для реализации программы блок “while true do” (пока условие верно, делать) и реализуя циклический алгоритм (псевдокод):
- при встряхивании, проиграть “play tone Middle C for 1/2 beat” (проиграть ноту ДО (первой октавы) 1 раз) и “play tone High C for 1/2 beat” (проиграть ноту ДО (второй октавы) 1 раз);
- при нажатии на обработчик события “on button A pressed” (когда кнопка A нажата), приостановить звучание.
С учетом описанной специфики среды программирования Microsoft MakeCode наш план деятельности (включая псевдокод) может быть описан следующим образом:
- загрузить сайт Microsoft MakeCode и создать новый проект;
- удалить обработчики события “on start” (при запуске), “forever” (навсегда);
- добавить обработчик события “on shake” (по встряхиванию);
- написать мелодию, состоящую из 2-х блоков;
- написать программный код по воспроизведению музыки до тех пор, пока не нажата программируемая кнопка A, используя блок “while true do” (пока условие верно – делать).
Реализуем пошагово написанный выше псевдокод и запрограммируем поочередное появление светодиодов с 1 по 25 на экране эмулятора.
Шаг 1. Загружаем страницу сайта Microsoft MakeCode (URL-адрес сайта: https://makecode.microbit.org/) и создаем новый проект.
Рис. 111. Главная страница сайта Microsoft MakeCode
Шаг 2. Удаляем обработчики события “on start”, “forever”.
Рис. 112. Удаление обработчиков события “on start” и “forever”
Шаг 3. Добавляем обработчик события “on shake” (по встряхиванию).
Рис. Блок “on shake”
Шаг 4. Добавляем внутрь обработчика события “on shake” (по встряхиванию) блок “while true do” (пока условие верно – делать)
Рис. 113. Блок “while true do”
Шаг 5. Мы хотим, чтобы по встряхиванию платы воспроизводился звук. Для этого, из раздела “Music” (музыка) добавим 2 блока “play tone Middle C for 1 beat” (проиграть ноту ДО (первой октавы) 1 длительностью “целая”) beat – от англ. удар, такт, ритм
Рис. 114. Пример использования блоков раздела “Music”
Шаг 6. Составим собственную мелодию. В 1 блоке “play tone Middle C for 1 beat” (проиграть ноту ДО (первой октавы) 1 раз), в выпадающем меню, изменим длительность звучания нот на ‘1/2’. Во 2 блоке “play tone Middle C for 1 beat” (проиграть ноту ДО (первой октавы) 1), нажав на “Middle C”, изменим тон с “Middle C” (нота ДО первой октавы) на “High C” (нота ДО (второй октавы) 1 раз), с помощью перемещения курсора мыши по клавишам и выбора нужного тона.
Рис. 115. Программа собственной мелодии в среде программирования
Шаг 7. Попробуйте запустить программу. Мелодия играет постоянно, так как нет никакого способа ее приостановить, кроме как нажать на паузу под эмулятором платы. Чтобы приостановить мелодию, используя обработчики события, добавим условие к блоку “while true do” (пока условие верно – делать). Для этого, поместим блок “not” (оператор не) из раздела “Logic” (логика) подраздела “Boolean” (булевы операторы) внутрь блока “while true do” (пока условие верно – делать) вместо true.
Рис. 116. Пример использования “оператора не” в программе
Шаг 8. Добавим внутрь блока “not” (оператор не) на месте пустого ромба блок “button A is pressed” (кнопка A нажата) из раздела “Input” (ввод). Это условие позволит приостанавливать проигрывание созданной нами мелодии до тех пор, пока не будет нажата программируемая кнопка А.
Таким образом, мы реализовали циклический алгоритм, в котором программный код реализуется до тех пор пока не нажата программируемая кнопка A.
Рис. 117. Программа с использованием блока “while true do”
Делаем сами…
В блочном режиме составьте программу, обеспечивающую:
- вывод на экран платы знака скорой медицинской помощи (крест) не менее 3-х раз подряд и следующий за ним надписи, обозначающей главный принцип врача “Не навреди” (от англ. языка “not harm”) на английском языке с повтором в 2 раза, используя обработчик события “on start” (1 способ);
- измените составленную выше программу таким образом, чтобы вывод знака скорой медицинской помощи и главного принципа “ Не навреди” выводилось на плату при нажатии программируемых кнопок A и B (2 способ).
* Для САМЫХ креативных
- в текстовом программировании, посредством языка Java Script, уменьшите количество повторяющихся команд в 1 раз и пропишите замедление в 1 с. между появлением знака скорой медицинской помощи и надписи (в 1 способе, описанном выше).
ПРОЕКТ РЕАКЦИЯ
Вы собираетесь создать игру для двух игроков, чтобы увидеть, у кого самые быстрые реакции. Игра будет работать, показывая изображение через случайное количество времени – тот, кто нажмет их кнопку первым, станет победителем.
Шаг 1: Жди!
Давайте начнем с отображения изображения через случайное количество времени.
Контрольный список действий
- Перейдите к https://makecode.microbit.org/, чтобы начать новый проект в редакторе MakeCode . Назовите свой новый проект «Реакция».
- Перед отображением изображения игра должна подождать случайное количество времени.
Перетащите pause блок в forever блок и измените время паузы на 1000 мс:
- Добавьте еще один pauseблок, а затем перетащите pick random блок в pause блок и установите его значение равным 4000:
Помните, что 1000 мс – это 1 секунда, поэтому будет пауза не менее 1 секунды, но не более 5 секунд (1000 + 4000 мс).
Вы можете изменить числа «1000» и «4000», чтобы изменить минимальную и максимальную паузу, если хотите.
- После ожидания в вашей игре должно появиться изображение, чтобы игроки знали, когда нажимать их кнопку.
- Нажмите «Выполнить», чтобы протестировать ваш проект. Вы должны увидеть свое изображение после случайной задержки.
- Добавьте код в конце forever цикла, чтобы отобразить изображение в течение 1 секунды, а затем очистите дисплей.
- Протестируйте свой проект. Вы должны увидеть, что ваше изображение появляется случайно, а затем исчезает.
Можете ли вы изменить изображение, которое отображается?
Измените номера в вашем random блоке. Вы можете ускорить свою игру, чтобы сделать ее сложнее, или замедлить ее, чтобы добавить напряженности!
Шаг 2: В ожидании победителя
Давайте добавим код, чтобы дождаться нажатия кнопки.
Контрольный список действий
- После отображения изображения вам нужно подождать, пока кто-нибудь не нажмет их кнопку.
Еще один способ сказать, что вам нужно подождать, пока не будут нажаты кнопка A и кнопка B.
Для этого добавьте while цикл из раздела «Управление». While Цикл должен быть добавлен в сразу после draw блока.
- Перетащите andблок из «Логики» в свой whileблок:
- Перетащите not«Логика» в левую часть and:
- Перетащите button A is pressedблок из «Ввод» в после not:
- Повторите 2 шага выше, чтобы добавить
- not button B is pressed в ваш цикл while.
- Затем вы можете добавить очень короткую (20 мс) задержку, чтобы ваш while цикл ожидал, пока кнопка не была нажата.
- Протестируйте свой проект. Ваша игра должна теперь отображать изображение и затем ждать, пока кнопки A и B не были нажаты.
Шаг 3: Кто самый быстрый?
Давайте выясним, кто первым нажал на их кнопку.
Контрольный список действий
- Если кнопка A была нажата, мы хотим указать на игрока A. Чтобы сделать это, добавьте ifблок после whileцикла и замените testна button A is pressed.
- Затем вы можете использовать show ledsблок, чтобы показать стрелку, указывающую на игрока А.
Вы должны также сделать то же самое для кнопки B.
ЗАДАЧА: СОХРАНИТЬ СЧЕТ
Можете ли вы использовать две переменные playerA и playerB отслеживать счет каждого игрока?
Вам нужно будет установить обе оценки на 0 в начале игры, поместив код внутри блока «на старте».
И добавьте 1 к тому, кто выигрывает в каждом раунде.
Вам также нужно будет подумать, как отобразить счет.
ЗАДАЧИ
- Нужно организовать случайное время ожидания появления сигнального изображения. Помним 1с – 1000мс
- Изображение должно быть на экране некоторое количество времени.
- Игра должна отображать изображение и затем ждать, пока кнопки A и B не были нажаты, а затем экран нужно очистить
- Если кнопка A была нажата, мы хотим указать на игрока A (показать стрелку в сторону игрока А), если кнопка В была нажата, мы хотим указать на игрока В (показать стрелку в сторону игрока В). Не забудьте показать стрелку
- Дополнительное задание
Используйте две переменные playerA и playerB отслеживать счет каждого игрока. Присвойте этим переменным ноль в начале игры. Добавьте 1 к тому, кто выигрывает в каждом раунде, отобразите счет
ЗАДАЧИ
- Нужно организовать случайное время ожидания появления сигнального изображения. Помним 1с – 1000мс
- Изображение должно быть на экране некоторое количество времени.
- Игра должна отображать изображение и затем ждать, пока кнопки A и B не были нажаты, а затем экран нужно очистить
- Если кнопка A была нажата, мы хотим указать на игрока A (показать стрелку в сторону игрока А), если кнопка В была нажата, мы хотим указать на игрока В (показать стрелку в сторону игрока В). Не забудьте показать стрелку
- Дополнительное задание
Используйте две переменные playerA и playerB отслеживать счет каждого игрока. Присвойте этим переменным ноль в начале игры. Добавьте 1 к тому, кто выигрывает в каждом раунде, отобразите счет