Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Листинг 12.3. Автономное управление светом.

Функция № 18: PollMidPak | Функция № 23: ReportSequenceNumber | АЛГОРИТМЫ, СТРУКТУРЫ ДАННЫХ И МЕТОДОЛОГИЯ ВИДЕОИГР | Алгоритм 11.1. Контроль столкновений с помощью описанных прямоугольников. | Листинг 11.2. Структура данных игрока. | Листинг 11.3. Функции полета мухи. | Листинг 11.4. Муравейник (ANTS.С). | Листинг 11.5. Падение мяча (BALL.C). | Листинг 11.6. Идеальный газ (GAS.C). | Мнимое время, прерывания и многозадачность |


Читайте также:
  1. D триггер со статическим управлением
  2. I. Управление Windows
  3. III. УПРАВЛЕНИЕ ШКОЛЬНЫМ ЛЕСНИЧЕСТВОМ
  4. Quot;Вертикальное" и "горизонтальное" управление действиями
  5. Автономное правительство и рождение сектантского разделения власти после гражданской войны 1860 г.
  6. Автономное электроснабжение
  7. Антикризисное управление организацией.

void Strobe_Lights (void)

{

static clock=0, // Функция имеет собственные часы, поэтому она

// может инициализироваться при первом вызове

first_time=1

//Проверка на первый вызов

if (first_time)

{

first_time=0; // Сброс флага первого вызова

// Инициализация

} // конец оператора if

else // не первый вызов

{

// пора ли выполнять действия?

if (++clock==100)

change color register

//сброс времени

clock=0

} // конец if

} // конец else

} // конец Strobe_Lights

Примечательно то, что функция Store_Lights() самодостаточна. Вызывающая ее функция не должна передавать ей никаких конкретных параметров для того, чтобы она могла инициализироваться и нормально работать. Более того, у этой функции есть свои локальные статические переменные, которые сохраняют свои значения даже после того как функция отработает. Вот в чем суть автономных функций. Программе требуется только вызывать эту функцию в игровом цикле и она может быть уверена, что цвета будут изменяться. При этом программа избавлена от необходимости отслеживать значения каких-либо переменных, инициализировать функцию и так далее.

Все это, конечно, здорово. Однако есть и одна проблема: эта функция аппаратнозависимая. Как вы уже заметили, функция считает до 100 и затей делает то, что надо, но при этом скорость ее счета зависит от быстродействия компьютера. Чем мощнее компьютер, тем быстрее выполняются вычисления. В результате на одних компьютерах цвета будут изменяться быстрее, чем на других. Чтобы избавиться от такого рода проблем, мы должны уметь каким-то образом узнавать время.

Информация о текущем времени очень важна и она может пригодиться нам не только для того, чтобы что-то делать в определенное время, но и для других самых разнообразных целей. Так, например, нам может понадобиться птичка, пролетающая по экрану каждые пять секунд, или обновление изображения не реже тридцати раз в секунду. Чтобы добиться этого, необходимо иметь под рукой какой-то таймер и способ доступа к нему.

Итак, поговорим о функциях ответа, которые можно использовать как для решения данной задачи, так и для многих других целей.

Функции ответа

Название этой функции - функция ответа целиком отвечает ее назначению. Эта функция реагирует на то, что произошло какое-то событие: наступило определенное время, изменилось значение переменной или что-то еще. С помощью функций ответа мы будем реагировать на события или состояния определенными действиями.

Например, с помощью такой функции мы могли бы следить за временем и каждые пять минут воспроизводить какой-либо звук. В данном случае функция ответа реагирует на то, что пять минут прошли, издавая звуковой сигнал. С другой стороны, мы могли бы написать и такую функцию ответа, которая следила бы за переменной, значение коей может меняться либо самой программой либо во время обработки прерывания, и реагировала бы на такое изменение.

На рисунке 12.5 показано взаимодействие функций ответа с другими частями системы.

Все, о чем мы сейчас говорим, относится к методам программирования задач "реального времени". Обычно их не обсуждают ни в книгах, ни в институтах (возможно, поэтому они и кажутся вам несколько странными).

Но не будем отвлекаться и напишем функцию ответа, следящую за переменной timer. Через каждые пять «тиков» системных часов эта функция обнуляет значение переменной timer и изображает в случайной точке экрана пиксель. Текст этой программы приведен в Листинге 12.4.



Дата добавления: 2015-07-12; просмотров: 111 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Листинг 12.2. Шпионим за часами (SPY.C)._________________| Листинг 12.4. Функция ответа (PRES.C).

mybiblioteka.su - 2015-2024 год. (0.007 сек.)