Программирование игр для Windows. Советы профессионала


Пример обработчика прерывания № 1 - Там полно звезд... - часть 2


Мы просто случайно создали одну из них). Если система «зависнет», вам придется перезагрузиться.

Текст программы, изображающей трехмерное звездное небо, представлен в Листинге 12.6.

Листинг 12.6. Трехмерное звездное небо (STARS.C).

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

#include <dos.h>

#include <bios.h>

#include <stdio.h>

#include <math.h>

#include <conio.h>

#include <graph.h>

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

#define TIME_KEEPER_INT 0x1C

#define NUM_STARS 50

// структуры ////////////////////////////////////////////

typedef struct star_typ

int x,y;    // координаты звезды

int vel;    // проекция скорости звезды на ось Х

int color; // цвет звезды

} star, *star_ptr;

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

void (_interrupt _far *01d_Isr)(void);

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

unsigned char far *video_buffer = (char far *)0xA0000000L;

// указатель на видеобуфер

int star_first=1; // флаг первого вызова автономной функции

// звездного неба

star starstNUM_STARS]; //звездное небо

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

void Plot_Pixel_Fast(int x,int y,unsigned char color)

{

// эта функция рисует точку заданного цвета несколько быстрее,

// чем обычно за счет применения операции сдвига вместо операции

// умножения

// используем известный факт, что 320*у = 256*у + 64*у = у<<8 + у<<6

video_buffer[((у<<8) + (у<<6)) + х] = color;

} // конец Plot Pixel_Fast

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

void _interrupt _far Star_Int(void)

{

// эта функция создает иллюзию трехмерного звездного неба,

// наблюдаемого из иллюминатора космического корабля Enterprise

// Замечание: эту функцию следует исполнять не реже одного раза

// в 55.4мс, иначе не избежать перезагрузки!

int index;

// проверка, надо ли нам инициализировать звездное поле

// (то есть первый ли раз вызывается функция)         




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



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