Часть III. Практическое применение Arduino
0x00,0x00,
0x97,0x63,
0x94,0x55,
0xB4,0x55,
0xD4,0x67,
0x94,0x45,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0xAA,0xAA,
0x55,0x55,
0x00,0x00
};
Сохраняем файлы
MyBitmap1.h
и
myBitmap.cpp
в папку нашего скетча. Для вывода
этого изображения на экран телевизора вызываем функцию
TVOut.bitmap()
:
#include " MyBitmap1.h"
TVOut.bitmap(x,y,MyBitmap);
25.5. Создание
простейшей игровой консоли
Соберем простейшую игровую консоль. Нам потребуется переходник "тюльпан",
перепаянный согласно схеме, приведенной на рис. 25.1, плата Arduino (в нашем
случае Nano) и простейший двухкоординатный джойстик (рис. 25.5).
Рис. 25.5. Двухкоординатный
джойстик
Выходы джойстика подключаем к аналоговым входам Arduino A0 и A1. Кабель-
"тюльпан" подключаем в выводам 7, 9, 11 Arduino. Схема соединений представлена
на рис. 25.6, консоль в сборе — на рис. 25.7.
Глава 25. TV-выход на Arduino
339
Рис. 25.6. Схема игровой консоли
Рис. 25.7. Внешний вид консоли
340
Часть III. Практическое применение Arduino
25.6. Разработка игры для игровой консоли
Приступим к созданию игры с условным названием "Арифметический сборщик".
"Игрок" управляется джойстиком с возможностью перемещения по полю размером
128
×90 точек. При нулевых отклонениях джойстика "игрок" находится в центре.
Максимальное отклонение джойстика соответствует максимальному перемещению
"игрока". С определенным интервалом времени генерируются объекты-цифры, ко-
торые движутся сверху вниз. По достижении нижнего положения экрана объект-
цифра исчезает, уменьшая количество баллов "игрока" на величину данной цифры.
Если "игрок" перехватывает объект-цифру на экране, то это приводит к исчезнове-
нию объекта-цифры и увеличению счетчика баллов "игрока". С определенной пе-
риодичностью значок "игрока" меняет свое значение с цифры 0 до 9. При перехвате
объекта-цифры счетчик баллов "игрока" увеличивается на сумму, равную сумме
объекта-цифры и "цифры" игрока. Если цифра "игрока" равняется цифре объекта-
цифры, то счетчик баллов "игрока" увеличивается на произведение цифр. По дос-
тижении определенных порогов баллов происходит переход на более высокий уро-
вень игры, что приводит к увеличению скорости движения и скорости генерации
объектов-цифр. Кроме того, с 4-го уровня игры столкновение "игрока" с объектом-
цифрой приводит не только к увеличению счетчика "игрока", но и к его уменьше-
нию — если цифра "игрока" меньше цифры объекта-цифры. Если количество бал-
лов "игрока" становится меньше 0, игра начинается сначала.
25.6.1. Создание переменных игры
Для управления игрой создадим объекты для хранения ее текущего положения.
Символ, отображающий "игрока", и символы, отображающие объекты-цифры, вы-
водятся как текстовая информация, поэтому поделим все поле игры на строки и все
перемещения объектов будем осуществлять как вывод символа в знакоместо на по-
ле. Переменные
MAX_X
=31 и
MAX_Y
=14 определяют размер поля игры по количеству
знакомест по горизонтали и вертикали. Переменная
MAX_OBJ
=
30
определяет макси-
мальное количество одновременно находящихся на поле игры объектов-цифр. Мас-
сив
int FIGURA[30][3]
хранит информацию об объектах-цифрах, находящихся на
поле игры следующим образом:
FIGURA[i][0]
— числовое значение объекта-цифры (0 — пустой объект);
FIGURA[i][1]
— текущая координата
x
объекта-цифры;
FIGURA[i][2]
— текущая координата
y
объекта-цифры.
Для хранения прочих переменных, описывающих текущее состояние игры, созда-
дим структуру
GAME
. Список полей структуры:
xk
— координата
x
(/4) "игрока";
yk
— координата
y
(/6) "игрока";
tekCursor
— текущее значение курсора;
blinkCursor
— текущее состояние блинка (мерцания) курсора;
vblink
— скорость блинка (мерцания) в
vk
;
Do'stlaringiz bilan baham: |