Глава 25. TV-выход на Arduino
341
vk
— скорость движения "игрока" (проверка входов A0, A1);
vo_10
— скорость изменения цифры "игрока";
vo_11
— скорость появления объектов-цифр;
vo_12
— скорость движения объектов-цифр;
count_objects
— кол-во объектов-цифр на поле;
level
— уровень игры;
balls
— кол-во баллов.
Код структуры
GAME
представлен в листинге 25.7.
Листинг 25.7
int MAX_X=31;
int MAX_Y=14;
// структура данных игры
struct GAME // структура для данных игры
{
int xk; // координата x(/4) игрока
int yk; // координата y(/6) игрока
int tekCursor; // текущее значение курсора
int blinkCursor; // текущее состояние блинка курсора
int vblink; // скорость blink в vk
long vk; // скорость движения игрока - проверка входов A0,A1
long vo_10; // скорость изменения цифры игрока
long vo_11; // скорость появления цифр
long vo_12; // скорость движения цифр
int count_objects; // кол-во объектов на поле
int level; // уровень игры
int balls; // кол-во баллов
};
int MAX_OBJ=30;
int FIGURA[30][3]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}
};
25.6.2. Управление положением "игрока"
с помощью джойстика
Положение "игрока" на экране определяется отклонением джойстика. Выводы
джойстика подключены к аналоговым портам A0 и A1 платы Arduino. Опрос пор-
342
Часть III. Практическое применение Arduino
тов происходит через время, определенное параметром
GAME.vk
, эти данные обраба-
тываются функцией
map()
, которая пропорционально переносит значение из теку-
щего диапазона 0–124 в новый диапазон (значения ширины и высоты экрана).
Затем это значение переводится в координаты знакоместа. В это знакоместо необ-
ходимо переместить изображение символа "игрока", предварительно поместив
в предыдущее положение "игрока" символ пробела. Для отображения "игрока" ис-
пользуется мигающий символ — цифра и пробел. Все эти операции производит
функция
set_iam()
, содержимое которой приведено в листинге 25.8.
Листинг 25.8
//****************** установка нового положения игрока
void set_iam()
{
TV.set_cursor(min(123,GAME1.xk*4),min(84,GAME1.yk*6));
TV.print(" ");
GAME1.xk=map(analogRead(A0), 0, 1024, 0, 128);
GAME1.yk=map(analogRead(A1), 0, 1024, 0, 96);
GAME1.xk=GAME1.xk/4;
GAME1.yk=GAME1.yk/6;
GAME1.vblink--;
if(GAME1.vblink<0)
{
GAME1.blinkCursor=1-GAME1.blinkCursor;
GAME1.vblink=5+GAME1.blinkCursor*5;
}
TV.set_cursor(min(123,GAME1.xk*4),min(84,GAME1.yk*6));
if(GAME1.blinkCursor==1)
TV.print(GAME1.tekCursor);
else
TV.print(" ");
}
Символ, отображающий "игрока", меняется через время, определенное параметром
GAME.vo_10
, вызовом функции
set_new_cursor()
, изменение происходит случайным
образом с помощью функции
random()
. Содержимое функции
set_new_cursor()
представлено в листинге 25.9.
Листинг 25.9
//****************** установка нового вида символа игрока
void set_new_cursor()
{
GAME1.tekCursor=random(0,10);
}
Do'stlaringiz bilan baham: |