Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Листинг 17.1. Файл заголовка демонстрационной программы циклического скроллинга (PARAL.H).
// //Paral.h - данный заголовок определяет константы и структуры //данных, используемые в демонстрационной программе // параллакса #define KEYBOARD 0х09 // //Коды клавиатуры для прерывания INT 9h #define RIGHT_ARROW_PRESSED 77 #define RIGHT_arrow_rel 205 #define LEFT_ARROW_PRESSED 75 #define LEFT_ARROW_REL 203 #define ESC_PRESSED 129 #define UP_ARROW_PRESSED 72 #define UP_ARROW_REL 200 #define DOWN_ARROW_PRESSED 80 #define down_arrow_rel 208 #define VIEW_WIDTH 320 #define VIEW_HEIGHT 150 #define MEMBLK VIEW_WIDTH*VIEW HEIGHT #define TRANSPARENT 0 // цветовые коды #define TOTAL_SCROLL 320 enum (NORMAL, RLE},; enum (FALSE, TRUE}; typedef struct { char manufacturer; /* Всегда 0 */ char version; /* Всегда 5 для 256-цветных файлов */ char encoding; /* Всегда 1 */ char bits_per_pixel; /* Должно быть равно 8 для 256-цветных файлов */ int xmin, ymin; /* Координаты левого верхнего угла */ int xmax, ymax; /* Высота и ширина образа */ int hres; /* Горизонтальное разрешение образа */ int vres; /* Вертикальное разрешение образа */ char palettel6[48]; /* палитра EGA; не используется для 256-цветных файлов */ char reserved; /* зарезервировано */ char color planes; /* цветовые планы */ int bytes_per_line; /* количество байт в каждой строке пикселей */ int palette_type; /* Должно быть равно 2 для цветовой палитры */ char filler[58]; /* Не используется */ } PcxHeader; typedef struct { PcxHeader hdr; char *bitmap; char pal[768]; unsigned imagebytes, width, height; } PcxFile; #define PCX_MAX_SIZE 64000L enum {PCX_OK, PCX_NOMEM, PCX_TOOBIG, PCX_NOFILE}; #ifdef __cplusplus extern " C" { #endif int ReadPcxFile(char *filename, PcxFile *pcx); void _interrupt NewInt9(void); void RestoreKeyboard(void); void InitKeyboard(void); void SetAllRgbPalette(char *pal); void InitVideo (void); void RestoreVideo(void); int InitBitmaps(void); void FreeMem(void); void DrawLayers(void); void AnimLoop(void); void Initialize(void); void CleanUp (void); void OpaqueBIt (char*, int, int, int); void TransparentBit(char *, int, int, int); #ifdef __cplusplus } #endif Программа из Листинга 17.2 (PARAL.C) демонстрирует повторяемое смещающееся изображение. Движущаяся картинка показывает облачное небо под солнцем. Хотя изображение и выглядит непрерывно меняющимся, но на самом деле оно неподвижно. Наиболее важной частью программы является функция OpaqueBIt(). Она выводит левую и правую части изображения в буфер системной памяти, основываясь на значении LeftHalf. Когда построение закончено, содержимое буфера копируется на экран. Запустив оттранслированную программу, используйте курсорные клавиши «влево» и «вправо» для изменения направления скроллинга. Для выхода из программы нажмите Esc. При этом она вычислит и покажет скорость анимации кадра. На машине с процессором 386SX/25 скорость выполнения составила около 35 кадров в секунду при размерах демонстрационного окна 320х100 Пикселей.
|