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


Рисование линий - часть 3


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

 

Листинг 5.8. Создание и отображение цветовой палитры (PALDEMO.C).

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

#include <io.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <dos.h>

#include <bios.h>

#include <fcntl.h>

#include <memory.h>

#include <math.h>

#include <string.h>

 

// определения

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

#define ROM_CHARSET_SEG   0xF000

#define ROM_CHAR_SET_OFF  0xFA6E

#define VGA256             0x13

#define TEXT_MODE           0х03

#define PALETTE_MASK        ОхЗc6

#define PALETTE_REGISTER_RD.Ox3c7 #define PALETTE_REGISTER_WR  0x3c8

#define PALETTE_DATA        0x3c9

#define SCREEN_WIDTH        (unsigned int)320

#define SCREEN_HEIGHT       (unsigned int)200

// структуры данных////////////////////////////////////////

// структура, сохраняющая RGB

typedef struct RGB_color_typ

{

unsigned char red;    // красный

компонент

0-63

unsigned char green; // зеленый

компонент

0-63

unsigned char blue;   // синий

компонент

0-63

} RGB_Color, *RGB_color_ptr;

// ВНЕШНИЕ ФУНКЦИИ //////////////////////////////////

extern Set_Mode(int mode);

// ПРОТОТИПЫ //////////////////////////////////////////

void Set_Palette Register(int index, RGB_color_ptr color);

void Get_Palette_Register(int index, RGB_color_ptr color);

void Create_Cool__Palette();

void V_Line(int y1,int y2,int x,unsigned int color);

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

// указатель на начало видеопамяти (для операций с байтами)




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