-
1. Знакомство со спрайтом 0
Знакомьтесь - спрайт, маленький объект, активный персонаж компьютерных игр. На этих уроках мы научимся создавать спрайты BBC micro:bit и управлять ими. Мы разработаем компьютерные игры, где спрайты будут двигаться, сталкиваться, бороться за своё существование.
-
Лекция1.1
-
Лекция1.2
-
-
Игры со спрайтами. Уровень 1 0
-
Лекция2.1
-
Лекция2.2
-
Лекция2.3
-
-
Игры со спрайтами. Уровень 2. Массивы 1
В этом разделе мы познакомимся с новым понятием - массив. Массив поможет нам разрабатывать более сложные программы, а значит - игры, которые ещё интереснее и увлекательнее, чем те, которые мы научились делать.
-
Лекция3.1
-
Лекция3.2
-
4. Поймай крота
Эта игра — вариант популярной в далёкие 70-е годы игры «Whack-a-mole» («Ударь крота») для аркадных игровых автоматов.
Как выглядела игра, можно посмотреть здесь: https://youtu.be/_7nPhk-fYFg.
Мы, конечно, не будем бить крота и вообще не будем его обижать, но возьмём идею за основу. А идея следующая.
Сценарий:
В случайный момент времени с левой или с правой стороны дисплея (выбор стороны также случаен) на короткое время появляется «крот» — некоторый графический значок. Игрок должен нажать кнопку А, если крот появился слева, или кнопку B, если крот появился справа. При этом необходимо нажать кнопку в течение заданного интервала времени, например, в течение секунды или полсекунды. Если нажата неверная кнопка или нажата поздно, игра заканчивается. В случае успеха игра продолжается с новым кротом.
Задача сложная, поэтому будем решать её поэтапно и начнём с более простого условия (упрощения в тексте выделены курсивом).
В случайный момент времени в центре экрана на короткое время появляется «крот» — некоторый графический значок. Игрок должен нажать кнопку А или кнопку B. При этом необходимо нажать кнопку в течение заданного интервала времени, например, в течение секунды или полсекунды.
Если нажата неверная кнопка или кнопка нажата поздно, игра заканчивается. В случае успеха игра продолжается с новым кротом.
Более сложный вариант рассмотрим в следующий раз.
Задача наша, даже в упрощённом варианте, непростая и требует специального подхода к решению, который называется программирование “сверху вниз”. В этом подходе мы сначала разрабатываем общий план решения, а потом его детализируем. При этом в программировании применяются подпрограммы или функции.
Пусть игра начинается по жесту «встряхивание». Пока игра не оставлена из-за промаха игрока, надо повторять:
- Включить обратный отсчёт времени: 3-2-1-0
- После паузы случайной длительности вывести на дисплей “крота”, запомнить время его появления
- Пока НЕ нажата кнопка А или кнопка B – ничего не делать, просто ждать нажатия
- Когда кнопка нажата (закончилось ожидание), запомнить время нажатия
- Вычислить время реакции как разницу между временем нажатия и временем появления “крота”
- Если время реакции больше заданной величины (подберём экспериментом), остановить игру, иначе увеличить очки, удалить спрайт и начать всё заново.
Для решения этих задач будем использовать функции:
- Обратный_отсчёт (задача 1). При выполнении этой функции на экране последовательно с интервалом 1 секунда появляются числа: 3, 2, 1, 0. Можно вместо 0 вывести восклицательный знак или какой-то другой символ, означающий начало игры.
- Крот_появись (задача 2) – в случайный момент времени после начала игры (окончания обратного отсчёта) на дисплее появляется спрайт “крот”, запоминается время его появления.
- Проверка_реакции – решает задачи 3-6
Общий план решения такой:
Также нам потребуются переменные:
- Крот – переменная для спрайта
- Игра_остановлена (будет принимать значения ИСТИНА или ЛОЖЬ. При значении ЛОЖЬ игра продолжается, при
значении ИСТИНА – останавливается). - Время_появления – момент появления крота.
- Время_нажатия – момент нажатия кнопки (А или B).
- Время_реакции – разность между временем нажатия кнопки и временем появления крота
Теперь, когда общий план разработан, переходим к его детализации.
- Создайте указанные переменные и функции. Блоки функций пока остаются пустыми.
- Опишите план решения в виде программного кода:
- Напишите код для функций Обратный_отсчёт и Крот_появись.
Обратный отсчёт: на экране дисплея с интервалом в 200 мс (или подберите время, которое вам покажется более подходящим) появляются числа 3, 2, 1, 0.
Крот появись:
- После паузы случайной длины в центре экрана появляется точка – крот (переменная-спрайт).
- В переменной Время_появления запоминается момент его появления.
Здесь надо использовать встроенную функцию время выполнения (мс). Обратите внимание не микросекунды, а миллисекунды. Эту функцию вы найдёте в блоке Ввод … больше. Она определяет время, которое прошло с момента начала работы программы. Работу функции можно представить как секундомер, который включается при запуске программы и выключается в момент её окончания, при этом в любой момент вы можете посмотреть на секундомер и узнать, сколько времени (в миллисекундах) прошло с начала его включения.
Если подсказок ещё недостаточно и написать самостоятельно функции не получается, загляните в конец урока.
Функция Проверка_реакции может быть такой:
Обратите внимание на следующие моменты:
- В цикле “Пока” ничего не происходит. Это – ожидание. Ожидание нажатия одной из кнопок.
- Условие
следует собирать в следующем порядке:
и только после этого
Теперь у вас есть всё необходимое, чтобы справится с задачей, но вы, наверное, заметили, что у нашего решения есть недостатки. Например, кнопка может быть нажата раньше момента появления “крота”. Такая ситуация называется “фальстарт”. В нашей программе фальстарт не определяется. Подумайте, как можно это исправить.
Продолжение следует.
Удачи!
Возможные решения (могут быть, конечно, и другие):
Функция Обратный_отсчёт
Это самый простой вариант. У него есть недостаток – мы не можем управлять скоростью обратного отсчёта. Лучше ввести переменную, например, пауза, и в начальном блоке задать ей желаемое значение. В дальнейшем по ходу игры мы это значение сможем менять.
Функция Крот_появись