Студопедия

Главная страница Случайная страница

Разделы сайта

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






Листинг 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 Пикселей.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.