Секреты программирования игр


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


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

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

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

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

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


Листинг 12.4. Функция ответа (PRES.C).

// ВКЛЮЧАЕМЫЕ ФАЙЛЫ ////////////////////////////////////////

#include <dos.h>

#include <bios.h>

#include <stdio.h>

#include <math.h>

#include <conio.h>

#include <graph.h>

// ОПРЕДЕЛЕНИЯ /////////////////////////////////

#define time_keeper_int 0x1C

// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ /////////////////////////////////////////

void (_interrupt _far *01d_Isr)();

// хранит Старый обработчик прерывания

long time=0;

// функции //////////////////////////////////////////////

void _interrupt _far*Timer ()

{

// увеличивает глобальную переменную

// еще раз отметим, что мы можем это делать, так как при входе в

// процедуру обработки прерывания регистр DS указывает-на сегмент




Начало  Назад  Вперед



Книжный магазин