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


Функции ответа - часть 2


// глобальных данных нашей программы

time++;

} // конец Timer

////////////////////////////////////////////

void Plot_Responder(void)

{

static int first_time=l;

static long old_time;

// проверка первого вызова

if (first_time)

{

//сброс флага первого вызова

first_time=0;

old_time = time;

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

else

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

// прошло ли пять "тиков"?

if ( (time-old_time)>=5)

{

old_time = time; // сохранить новую точку отсчета

// вывод пикселя на экран

_setcolor(rand()%16);

_setpixel(rand()%320,rand()%200) ;

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

} // конец else

}// конец Plot_Responder,

// ОСНОВНАЯ ПРОГРАММА /////////////////////////////////////////////

main()

{

_setvideomode(_MRES256COLOR);

printf('Hit any key to exit...");

// установка процедуры обработки прерывания

0ld_Isr = _dos_getvect(TIME_KEEPER_INT);         

_dos_setvect(TIME_KEEPER_INT, Timer); 

// ожидание нажатия клавиши пользователем

while(!kbhit())

// ... текст программы игры

// вызов всех функций ответа Plot_Responder() ;

// ... текст программы игры       

}  // конец while

_setvideomode(_DEFAULTMODE) ;

// восстановление старого обработчика прерывания

_dos_setvect(TIME_KEEPER_INT, 01d_Isr) ;

} // конец функции main

В программе, приведенной в Листинге 12.4, функция ответа следит за временем и каждые пять «тиков» системных часов или 5х55.4 миллисекунды рисует на экране пиксель. Значение 55.4 получается из того, что системный таймер по умолчанию настроен так, что генерирует прерывание 18.2 раза в секунду или каждые 55.4 миллисекунды. Обратите внимание и на то, что функция ответа автономна.

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

На персональных компьютерах следить за временем и,управлять событиями связанными с ним, можно только с помощью внутренних таймеров системы.К сожалению, большинство из них используется для других целей. Однако один применяется специально для внутренних часов компьютера. Он «тикает» со тростью 18.2 раза в секунду. Что и говорить, необычная отправная точка для вычислений и, честно говоря, я понятия не имею, почему создатели персональных компьютеров выбрали именно это значение. Но мы можем перепрограммировать его и задать более разумное число, например, 20, 30 или 60 «тиков» в секунду. Естественно, такие значения удобнее использовать в нашей компьютерной игре. Итак, давайте разберемся, как можно перепрограммировать внутренний таймер системы.




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



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