Часть III. Практическое применение Arduino
Листинг 25.13
//****************** изменение набранных баллов
void change_balls(int ball)
{
GAME1.balls=GAME1.balls+ball;
if(GAME1.balls<0)
start_game();
if(GAME1.balls>(GAME1.level+1)*100)
new_level(GAME1.level);
set_data_tablo();
}
25.6.6. Переход на новый уровень
При переходе на новый уровень игры осуществляется установка новых значений
для скорости генерации и скорости перемещения объектов-цифр. Первоначально
предполагалось менять и значение скорости изменения цифры "игрока" и скорости
его движения, но в ходе испытания игры решено было от этого отказаться. Дейст-
вия установки значений переменных для нового уровня игры производятся в функ-
ции
new_level()
, содержимое которой представлено в листинге 25.14.
Листинг 25.14
//****************** изменение уровня игры
void new_level(int tek_level)
{
GAME1.level++;
GAME1.vo_10=5000;
GAME1.vo_11=2000-(GAME1.level-1)*100;
GAME1.vo_12=1000-(GAME1.level-1)*100;
}
25.6.7. Отображение данных игры на табло
Табло с данными игры находится внизу экрана. Здесь отображаются текущие зна-
чения количества набранных баллов и уровень игры. При изменении счетчика бал-
лов "игрока" происходит вызов функции
set_data_tablo()
, которая изменяет значе-
ние количества набранных баллов и уровень игры в переменных структуры
GAME
и на табло. Содержимое функции
set_data_tablo()
представлено в листинге 25.15.
Листинг 25.15
//****************** вывод данных на табло
void set_data_tablo()
{
TV.print(20,91," balls= ");
Глава 25. TV-выход на Arduino
347
TV.print(70,91," level= ");
TV.print(48,91,GAME1.balls);
TV.print(98,91,GAME1.level);
}
25.6.8. Звуковое сопровождение игры
Для звукового оформления игры мы используем функцию
tone(frequency,
duration)
библиотеки
TVOut
. При достижении объектом-цифрой низа игрового по-
ля (функция
go_object()
) воспроизводится звук
TV.tone(294,200)
, при столкнове-
нии игрока и объекта-цифры (функция
collision()
) — звук
TV.tone(740,200)
. Если
вы захотите в проект вставить фрагмент из последовательного воспроизведения
нескольких нот, после вывода каждой ноты командой
tone(frequency, duration)
необходимо вставлять командой
delay()
задержку длительностью не меньшей, чем
параметр
duration
. Так, в листинге 25.16 организовано последовательное воспроиз-
ведение двух нот с паузой.
Листинг 25.16
TV.tone(294,200);
TV.delay(400);
TV.tone(740,200);
25.6.9. Основной цикл игры
Основной цикл программы состоит из вызова рассмотренных нами функций
set_iam()
,
collision()
,
go_object()
,
set_new_object()
,
set_new_cursor()
через
промежуток времени, установленный в переменных
GAME.vk
,
GAME.vo_10
,
GAME.vo_11
,
GAME.vo_12
. Содержимое функции
game1()
представлено в листин-
ге 25.17.
Листинг 25.17
int game1()
{
//while(GAME1.balls>0 && GAME1.level<6)
//{
long time2=millis();
//TV.delay(GAME1.xk);
if(time2-time11>GAME1.vk)
{set_iam();
collision();
time11=time2;
}
if(time2-time12>GAME1.vo_12)
{go_object();time12=time2;}
348
Do'stlaringiz bilan baham: |