Робототехника с пеленок/Управляем извне

Материал из scratchduino
Перейти к: навигация, поиск

Содержание

Кнопка

Начнем с самой простой задачи - попробуем использовать Кнопку. В нашем случае кнопка представляет собой выключатель с двумя состояниями: нажато (true) и не нажата (false). Для ее использования необходимо применять проверку этого условия - нажата или нет кнопка. Так как у нас имеется только два значения, то мы можем считать кнопку подключенной к цифровому входу, а ее саму цифровым устройством ввода.

Question.png
Вопрос:
На экране значение кнопки стоит в true. Нажата ли Кнопка?

Отобразим нажатие

Напишем программу, которая при нажатии кнопки показывает на экране какой нибудь спрайт (можно взять стандартный спрайт кота, или использовать свой. Алгоритм работы будет следующий:

1. При старте программы скрыть спрайт персонажа;

2. Запустить бесконечный цикл;

3. Проверять, нажата ли кнопка. Если нажата, то спрайт должен появиться;

4. Скрыть спрайт в конце цикла.

Код программы будет следующий:

Sduino lab cod1.png

Как видите, мы используем в условии значение состояния кнопки без всяких проверок равенства, так как автоматически получаем "да" (true) или "нет" (false) при опросе состояния "Нажата ли кнопка".

Задержка нужна для того, чтобы мы могли заметить спрайт, прежде чем его скроет командой.

Task.png
Задание:
Измените код программы. Добавьте второй спрайт и сделайте так, чтобы при нажатии кнопки первый спрайт заменялся вторым

Отследим нажатие во времени

Усложним задачу. Будем выполнять действие ПОКА нажата кнопка. В отличие от предыдущего задания, где нажатие служило командной выполнения какого либо действия, в данном случае мы должны выполнять заданный алгоритм, пока кнопка не будет отпущена.

Решим следующую задачу: При нажатии кнопки кот (или другой ваш любимый персонаж) должен начать подниматься вверх, пока не будет отпущена кнопка.

Алгоритм программы будет следующим:

1. Ставим кота в начальное положение (x=0, y=0)

2. Проверяем нажатие кнопки. Если кнопка нажата, то перемещаем кота вверх на 10 пикселей.

3. Если кнопка не нажата, то опускаем кота вниз на 10 пикселей.

4. Ставим ограничения, чтобы кот не провалился под землю (координата y > 0)

Код программы будет следующий:

Sduino lab cod2.png

Question.png
Вопрос:
А что будет, если мы не будем проверять условие y>0?
Task.png
Задание:
Сделайте так, чтобы персонаж прыгал медленнее, быстрее, прыгал вперед.

Перепрыгни предметы

А теперь, используя предыдущий код, сделаем мини-игру.

Для этого нам нужно к прыгающему персонажу добавить что-то, через что он будет перепрыгивать (например через баскетбольный мяч, изображение которого вы сможете найти в библиотеке Scratch.

Также нам необходимо реализовать движение мяча и выполнить проверку на столкновение кота с ними.

Мяч будет перемещаться справа-налево, при достижении левой стороны он будет снова появляться справа.

Sduino lab cod3.png

Для проверки на столкновение, добавьте в цикл программы кота следующие блоки:

Sduino lab cod4.png

То есть мы проверяем касается ли спрайт персонажа спрайта Мяча (Спрайт2 или вы можете дать ему более осмысленное имя). Если касается, то выводим текст и завершаем игру.

Sduino lab screen1.png

Task.png
Задание:
Создайте иллюзию полета на воздушном шаре. Для этого задайте по нажатию кнопки подъем воздушного шара и перемещение предметов на заднем плане
Task.png
Задание:
Измениете игру, сделав непрерываемый прыжок на определенную высоту по нажатию кнопки. Подсказка: используйте циклы в которых увеличивайте и уменьшайте координату y. Следите за проверкой столкновения!

Рычажок

В отличие от кнопки Рычажок (или по научному Слайдер) передает в Скратч изменение своего положения. Если вы попробуете передвинуть Рычажок слева направо, то можете заметить изменение координат в окне отображения данных Скратчбоард от 0 до 100. Так как данные обрабатываются непосредственно с переменного резистора Рычажка и их изменение непосредственно влияет на отображение на экране, то Рычажок является аналоговым устройством ввода.

Important.png
Важные вещи:
Помните, что система координат Скратч начинается с центра экрана!
Question.png
Вопрос:
Если у тебя есть приставка или компьютер, то какие устройства ввода будут цифровыми, а какие аналоговыми? Есть ли аналоговые стики на джойстике приставки?

Вправо - влево

Напишем простейшую программу, изменяющую текущее положение персонажа в зависимости от положения слайдера:

Sduino lab cod5.png

Как видим кот перемещается от центра экрана (координаты 0,0) или от позиции, куда его поставили на 100 пикселей вправо и обратно.

Чтобы заставить кота перемещаться от одного края экрана до другого, необходимо прибегнуть к знаниям по математике.

Экран в Scratch имеет размеры по горизонатли 500 пикселей. От центра экрана координата x может изменять от 0 до 250 вправо и от 0 до -250 влево. То есть нам необходимо при значении Рычажка равном 0 поставить его в точку с координатой x равно -250.

Это можно сделав, вычитая 250 из текущего значения.

Координата X персонажа = координата X Рычажка - 250

Но переместив слайдер, вы можете убедиться, что персонаж не доходит даже до середины. Конечно же. Максимальное перемещение персонажа в нашем случае 100 пикселей, а на экране необходимо до правого края переместиться на 500 пикселей. Что делать?

Правильно - надо умножить значения слайдера на 5.

Тогда координата x персонажа на экране будет вычисляться по следующей формуле:

Координата X персонажа = (координата X Рычажка * 5) - 250

И код теперь будет следующий:

Sduino lab cod6.png

Не только перемещение

Значения, получаемые с Рычажка, можно использовать не только для координат. Вы можете подставлять их в любые блоки Scratch, где требуется плавное изменение значений. Причем вы можете использовать это значение независимо в разных блоках и разных спрайтах.

К примеру следующий код изменяет размер персонажа от 0% до 100%:

Sduino lab cod7.png

А этот код позволяет изменять тональность звука, получая простейщий инструмент:

Sduino lab cod8.png

Question.png
Вопрос:
А что будет, если я использую значение рычажка сразу в нескольких блоках?
Task.png
Задание:
Придумайте еще несколько применений Рычажку. Попробуйте скомбинировать получаемые значения на нескольких персонажах

Пинг-Понг

А теперь давайте напишем классическую игру, в которой применим рычажок. Мы сделаем вариацию игры Ping-Pong, придуманную фирмой Atari в далеких 70-х годах 20-го века, но в более простой вариации - на одного игрока.

Pong old.jpg

Сюжет игры следующий: Игрок управляет ракеткой, которая может перемещаться вверх-вниз по экрану. Ракетка расположена у правого или левого край (в зависимости от расположения игрока). По экрану перемещается шарик (в виде кубика, так как тогда нельзя было нарисовать красивый шарик из пикселей из-за малого разрешения экрана). Игроки отбивают шар ракетками. Кто пропускает шар - получает гол. Игра идет до пять пропусков. Шарик может отскакивать от стен упруго (то есть под каким углом ударился, под тем и отскочил).

Мы упростим игру, убрав второго игрока. В нашем случае мы будем играть сами с собой, защищая одну сторону экрана, а шар будет отскакивать от трех других.

Нам необходимо будет задать поведение двух персонажей - ракетки и шарика.

Первым делом нарисуйте примоугольник, разместите его в левом углу и задайте ему код перемещение в зависимости от положения слайдера. Используйте код, который мы применяли для перемещения персонажа от левого края до правого, помня, что координата y изменяется от -180 до 180 снизу вверх:

Pong cod1.png

Чем больше размер прямоугольника (в длину или ширину), тем легче играть.

С шаром сложнее.

Посмотрим на код его спрайта (черный квадрат с размером стороны, равный толщины ракетки будет как раз):

Pong cod2.png

Как вы видите он состоит из двух блоков - первый отвечает за отскок шарика и проверку на его пропуск, второй за взаимодействие с ракеткой.

Алгоритм такой. Сначала мы ставим шарик в положение (0,0). Затем задаем случайно изменение координат x и y в переменный xpong и ypong. После этого запускаем цикл движения шарика. Правила простые: если мы достигаем верней части экрана (то есть координата спрайта y > 180) то мы инвертируем значение переменной ypong и шарик начинает двигаться в обратную сторону по координате y. При достижении -180 мы также меняем знак координаты. Если координата x > 235 (вы должны подобрать значение, чтобы шарик не улетал за пределы экрана), то мы меняем направление движение через координату xpong. Если же мы достигли -240, то значит забили гол (ракетка стоит на линии x равном -220). Второй блок реализует условие, при котором касание спрайта ракетки приводят к отскоку шара.

Добавив черный фон с необходимой атрибутикой и покрасив шар и ракетку в белый цвет, мы получим классику жанра на нашем экране, управляемую с классического аналогового контроллера.

Pong final.png

Question.png
Вопрос:
А что будет, если изменить значения случайных величин
Task.png
Задание:
Доработайте код для игры двух игроков (второй играет стрелками на клавиатуре). Добавьте счет и условие победы
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты
Печать/экспорт