moveSnake(-1, 0)
basic.pause(200)
}
...
На этом программа готова. Код полностью приведен ниже, его можно просто скопировать в редактор для запуска на плате или в симуляторе.
let N = 4
let x: number[] = [0, 1, 2, 3]
let y: number[] = [4, 4, 4, 4]
for (let p = 0; p < N; p++) {
led.plot(x[p], y[p])
}
function moveSnake(dx: number, dy: number) {
if (x[N-1] + dx < 0 || x[N-1] + dx > 4 || y[N-1] + dy < 0 || y[N-1] + dy > 4)
{
return
}
led.unplot(x[0], y[0])
for (let q = 0; q < N - 1; q++) {
x[q] = x[q + 1]
y[q] = y[q + 1]
}
x[N - 1] = x[N - 2] + dx
y[N - 1] = y[N - 2] + dy
led.plot(x[N - 1], y[N - 1])
}
basic.forever(() => {
if (input.acceleration(Dimension.X) > 200) {
moveSnake(1, 0)
basic.pause(200)
}
if (input.acceleration(Dimension.X) < -200) {
moveSnake(-1, 0)
basic.pause(200)
}
if (input.acceleration(Dimension.Y) > 200) {
moveSnake(0, 1)
basic.pause(200)
}
if (input.acceleration(Dimension.Y) < -200) {
moveSnake(0, -1)
basic.pause(200)
}
})
К сожалению, такой код уже достаточно сложен для редактирования в блочном редакторе, хотя в принципе это и возможно. Если все-таки переключиться в редактор, мы увидим такую картину:
Также редактор формирует не совсем удобный для чтения код, например строки
let N = 4
let x: number[] = [0, 1, 2, 3]
let y: number[] = [4, 4, 4, 4]
при переключении “туда-обратно” автоматически заменяются на
let y: number[] = []
let x: number[] = []
let N = 0
N = 4
x = [0, 1, 2, 3]
y = [4, 4, 4, 4]
Это не влияет на работоспособность программы, но читать такой код становится менее удобно.
Самостоятельная работа #1: Изменить длину “змеи”, для этого достаточно заменить параметр N и изменить начальные значения массивов координат.
Самостоятельная работа #2: Разместить на экране 3-4 дополнительные точки, которые змея сможет “съедать”. Для проверки “съедения” достаточно убедиться что новые координаты “головы” совпадают с координатами точки. Когда точка “съедена”, ее координаты можно заменить на недействительные, например на -1,-1. Опционально, можно увеличивать длину змеи, если она “съела” одну точку, для этого придется добавить новые элементы в массивы x и y и увеличить значение N. Добавить элемент к массиву можно, используя функцию push, таким образом, код увеличения “змеи” будет выглядеть так:
x.push(x[N - 1])
y.push(y[N - 1])
N = N + 1
5.6 Воспроизведение звука
Весьма интересными и несложными являются опыты со звуком. Сначала нужно подключить к BBC:Micro наушники или внешнюю колонку, схема подключения показана на рисунке справа.
Кабель с зажимами можно сделать самостоятельно, или купить готовый. Само воспроизведения звука не представляет какой-либо сложности. Есть два варианта.
1) Можно воспроизвести несложную мелодию из списка уже предустановленных, это может пригодиться, например в игре. Вот такой несложный блок воспроизведет Happy Birthday при нажатии на кнопку “А”:
2) Можно воспроизвести собственную мелодию, для чего потребуется задать высоту и длительность каждой ноты. При нажатии на ноту даже открывается окно мини-клавиатуры:
Разумеется, можно воспроизводить ноту или мелодию не только при нажатии на кнопку, но и при каком-либо событии, например при начале или окончании игры.
5.7 Использование радиомодуля
Помимо обычных способов ввода-вывода, BBC Micro:bit имеет встроенный радиомодуль. Это позволяет например, делать игры, в которые можно играть вдвоем - можно обмениваться данными между устройствами (разумеется, для этого нужно иметь как минимум 2 платы Micro:bit).
Функции для использования радиомодуля весьма просты - можно посылать число, строку или пару “имя-значение”. Для приема данных обработчики сообщений с аналогичными названиями.
Простая программа, показанная ниже, отправляет число 42 по нажатию кнопки B, на второй плате в это же время загорится “смайлик”.
5.8 Используем serial-порт
В главе про Arduino мы уже рассматривали использование последовательного порта для отладки программ. То же самое можно сделать и на BBC Micro:bit.
Шаг 1. Поставить драйвер последовательного порта, ссылка на который есть на странице mbed.com. При подключении платы к компьютеру в системе должен появиться новый COM-порт.
Шаг 2. Добавить компонент Serial port в визуальном редакторе. К примеру, вот такая несложная программа отправляет в порт значения акселерометра:
Отправлять данные можно различными способами, весьма удобен формат CSV (comma separated values), который выглядит примерно так:
0,-240,608,-768;