Выбрать главу

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;