⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 set.cpp

📁 游戏编程的原代码
💻 CPP
字号:
#include "graphics.h"

BOOL Is555 = TRUE;           // 像素格式是555  如果值是假的话为565
BOOL IsActive = TRUE;        // 应用程激活
BOOL TransBitblt = FALSE;    // 值为真为透明复制
int  Alpha;                  // Alpha混合的等级
int  FstAlpha;               // Fst位图使用的Alpha等级
int  DrawMode = DRAW_NORMAL; // 绘图模式
BMP  *screen, *directscreen; // 主表面位图和指向DirectDrawSurface主表面的位图
BOOL ScreenIsLock = FALSE;   // 值为真为屏幕锁定
int  UpdateMode;             // 更新屏幕的模式
BMP *temp_screen;            // 临时屏幕缓冲区
int fps = 0;                 // 每秒钟显示的帧数
int data_source = DATA_NORMALFILE;
int PaintMouseMode = PAINT_MOUSE_NORMAL; // 绘制鼠标的模式

char *hzk_16, *hzk_24, *asc_16; // 指向汉字库的指针
int  font_style;             // 字体的样式
int  font_shadow_x, font_shadow_y; // 汉字阴影的偏移坐标
WORD font_shadow_color;      // 汉字阴影的颜色
WORD font_hollow_color;      // 字体边框的颜色

WORD alpha25mask;
WORD alpha50mask;
WORD alpha125mask;
WORD alpha50mask_2;
DWORD dalpha25mask;
DWORD dalpha50mask;
DWORD dalpha125mask;
DWORD dalpha50mask_2;

void (* bitblt_bitmap)(BMP *dest_bmp, int x, int y, BMP *src_bmp, int srcx, int srcy, int w, int h);
void (* draw_bitmap)(BMP *dest_bmp, int x, int y, BMP *src_bmp);
void (* alpha_bitblt_bitmap)(BMP *dest_bmp, int x, int y, BMP *src_bmp, int srcx, int srcy, int w, int h);
WORD (* true_to_hi)(DWORD color);
DWORD (* hi_to_true)(WORD color);
void (* additive_bitblt_bitmap)(BMP *dest_bmp, int x, int y, BMP *src_bmp, int srcx, int srcy, int w, int h);
void ( *additive_fst)(BMP *dest_bmp, int x, int y, FST_BMP *src_fst, int srcx, int srcy, int w, int h);
void (* update_screen)();
void (* paint_C16)(BMP *bmp, int x, int y, WORD color,char *text);
void (* paint_C24)(BMP *bmp, int x, int y, WORD color,char *text);
void (* paint_ASC)(BMP *bmp, int x, int y, WORD color,char c);
void (* pixel)(BMP *bmp, int x, int y, WORD color);
BMP *(* get_win_bitmap)(char *filename);
BMP *(* get_bmp_file)(char *filename);
void *(* get_file)(char *filename);
SAMPLE *(* get_sample)(char *filename);
MUSIC *(* get_music)(char *filename);
void (* paint_mouse)(MOUSE_CURSOR *cur);
void (* alpha_pixel);

// 初始化设置
void init_set()
{
	screen = create_bitmap(640, 480);
	temp_screen = NULL;
	directscreen = NULL;

	hzk_16 = NULL;
	hzk_24 = NULL;
	asc_16 = NULL;
	set_font_style(FONT_NORMAL);
	font_shadow_x = 2;
	font_shadow_y = 2;
	font_shadow_color = 0x0;
	font_hollow_color = 0xffff;

	set_paint_mouse_mode(PAINT_MOUSE_NORMAL);
	set_update_mode(UPDATE_NORMAL);
	set_trans_mode(FALSE);
	set_alpha(0);
	set_draw_mode(DRAW_NORMAL);
	if (Is555)
		set_555();
	else
		set_565();
	init_debug_msg();
	set_data_source(DATA_NORMALFILE);
}

// 设置为555模式
void set_555()
{
	clrscr_bitmap(screen, 0x0);
	if (UpdateMode == UPDATE_SHADOW)
		clrscr_bitmap(temp_screen, 0x0);
	Is555          = TRUE;
	alpha25mask    = 0x1ce7;
	alpha50mask    = 0x7bdf;
	alpha125mask   = 0xc63;
	alpha50mask_2  = 0x3def;
	dalpha25mask   = 0x1ce71ce7;
	dalpha50mask   = 0x7bde7bdf;
	dalpha125mask  = 0xc630c63;
	dalpha50mask_2 = 0x3def3def;
	true_to_hi     = true_to_hi_555;
	hi_to_true     = hi_to_true_555;
	additive_bitblt_bitmap = additive_bitblt_bitmap_555;
	additive_fst = additive_fst_555;
}

// 设置为565模式
void set_565()
{
	clrscr_bitmap(screen, 0x0);
	if (UpdateMode == UPDATE_SHADOW)
		clrscr_bitmap(temp_screen, 0x0);
	Is555         = FALSE;
	alpha25mask   = 0x39e7;
	alpha50mask   = 0xf7df;
	alpha125mask  = 0x18e3;
	alpha50mask_2 = 0x7bef;
	dalpha25mask   = 0x39e739e7;
	dalpha50mask   = 0xf7def7df;
	dalpha125mask  = 0x18e318e3;
	dalpha50mask_2 = 0x7bef7bef;
	true_to_hi     = true_to_hi_565;
	hi_to_true     = hi_to_true_565;
	additive_bitblt_bitmap = additive_bitblt_bitmap_565;
	additive_fst = additive_fst_565;
}

// 设置透明位图复制模式
BOOL set_trans_mode(BOOL trans)
{
	BOOL old = TransBitblt;
	TransBitblt = trans;
	if (trans)
	{
		bitblt_bitmap = mask_bitblt_bitmap;
		draw_bitmap   = mask_draw_bitmap;
	}
	else
	{
		bitblt_bitmap = nomask_bitblt_bitmap;
		draw_bitmap   = nomask_draw_bitmap;
	}
	set_alpha(Alpha);
	return old;
}

// 设置Alpha混合的等级
int set_alpha(int alpha)
{
	int old = Alpha;
	if (TransBitblt)
	{
		switch(alpha)
		{
		case 0:
			alpha_bitblt_bitmap = mask_bitblt_bitmap;
			break;
		case 1:
			alpha_bitblt_bitmap = mask_alpha_bitblt_1;
			break;
		case 2:
			alpha_bitblt_bitmap = mask_alpha_bitblt_2;
			break;
		case 3:
			alpha_bitblt_bitmap = mask_alpha_bitblt_3;
			break;
		case 4:
			alpha_bitblt_bitmap = mask_alpha_bitblt_4;
			break;
		case 5:
			alpha_bitblt_bitmap = mask_alpha_bitblt_5;
			break;
		case 6:
			alpha_bitblt_bitmap = mask_alpha_bitblt_6;
			break;
		case 7:
			alpha_bitblt_bitmap = mask_alpha_bitblt_7;
			break;
		case 8:
			alpha_bitblt_bitmap = mask_alpha_bitblt_8;
			break;
		}
	}
	else
	{
		switch(alpha)
		{
		case 0:
			alpha_bitblt_bitmap = nomask_bitblt_bitmap;
			break;
		case 1:
			alpha_bitblt_bitmap = alpha_bitblt_1;
			break;
		case 2:
			alpha_bitblt_bitmap = alpha_bitblt_2;
			break;
		case 3:
			alpha_bitblt_bitmap = alpha_bitblt_3;
			break;
		case 4:
			alpha_bitblt_bitmap = alpha_bitblt_4;
			break;
		case 5:
			alpha_bitblt_bitmap = alpha_bitblt_5;
			break;
		case 6:
			alpha_bitblt_bitmap = alpha_bitblt_6;
			break;
		case 7:
			alpha_bitblt_bitmap = alpha_bitblt_7;
			break;
		case 8:
			alpha_bitblt_bitmap = alpha_bitblt_8;
			break;
		}
	}
	switch(alpha)
	{
	case 0:
		pixel = pixel_normal;
		break;
	case 1:
		pixel = pixel_alpha_1;
		break;
	case 2:
		pixel = pixel_alpha_2;
		break;
	case 3:
		pixel = pixel_alpha_3;
		break;
	case 4:
		pixel = pixel_alpha_4;
		break;
	case 5:
		pixel = pixel_alpha_5;
		break;
	case 6:
		pixel = pixel_alpha_6;
		break;
	case 7:
		pixel = pixel_alpha_7;
		break;
	}
	Alpha = alpha;
	return old;
}

// 设置位图刷新模式
int set_update_mode(int mode)
{
	int old = UpdateMode;
	if (mode == UpdateMode)
		return mode;
	lock_screen();
	clrscr_bitmap(directscreen, 0x0);
	unlock_screen();
	clrscr_bitmap(screen, 0x0);
	free_bitmap(&temp_screen);
	if (mode == UPDATE_NORMAL)
	{
		update_screen = update_screen_normal;
	}
	else if (mode == UPDATE_SHADOW)
	{
		update_screen = update_screen_shadow;
		temp_screen = create_bitmap(SCREEN_WIDTH, SCREEN_HEIGHT, 0x0);
		temp_screen->clipleft = temp_screen->cliptop = 0;
		temp_screen->clipright = SCREEN_WIDTH - 1;
		temp_screen->clipbottom = SCREEN_HEIGHT - 1;
	}
	else if (mode == UPDATE_INTERVAL)
	{
		update_screen = update_screen_interval;
	}
	UpdateMode = mode;
	return old;
}

// 设置字体样式
int set_font_style(int style)
{
	int old = font_style;
	font_style = style;
	switch(style)
	{
	case FONT_NORMAL:
		paint_C16 = paint_C16_normal;
		paint_C24 = paint_C24_normal;
		paint_ASC = paint_ASC_normal;
		break;
	case FONT_SHADOW:
		paint_C16 = paint_C16_shadow;
		paint_C24 = paint_C24_shadow;
		paint_ASC = paint_ASC_shadow;
		break;
	case FONT_HOLLOW:
		paint_C16 = paint_C16_hollow;
		paint_C24 = paint_C24_hollow;
		paint_ASC = paint_ASC_hollow;
	}
	return old;
}

// 设置字体阴影属性
void set_shadow(int x, int y, WORD sc)
{
	font_shadow_x = x;
	font_shadow_y = y;
	font_shadow_color = sc;
}

// 设置边框字的边框色
void set_hollow(WORD hc)
{
	font_hollow_color = hc;
}

// 设置绘图模式
int set_draw_mode(int mode)
{
	int old = DrawMode;
	switch(mode)
	{
	case DRAW_NORMAL:
		pixel = pixel_normal;
		break;
	case DRAW_OR:
		pixel = pixel_or;
		break;
	case DRAW_AND:
		pixel = pixel_and;
		break;
	case DRAW_XOR:
		pixel = pixel_xor;
		break;
	case DRAW_NOT:
		pixel = pixel_not;
		break;
	case DRAW_ALPHA:
		set_alpha(Alpha);
		break;
	case DRAW_ADDITIVE:
		if (Is555)
			pixel = pixel_additive_555;
		else
			pixel = pixel_additive_565;
	}
	DrawMode = mode;
	return old;
}

// 设置数据文件来源
void set_data_source(int source)
{
	if (source == DATA_NORMALFILE)
	{
		get_win_bitmap = load_win_bitmap;
		get_bmp_file   = load_to_file;
		get_file       = load_file;
		get_sample     = load_sample;
		get_music      = load_music;
	}
	else if (DATA_PACKFILE)
	{
		get_win_bitmap = load_pack_win_bitmap;
		get_bmp_file   = load_pack_bmp_file;
		get_file       = load_pack_file;
		get_sample     = load_pack_sample;
		get_music      = load_pack_music;
	}
}

// 设置鼠标绘制模式
int set_paint_mouse_mode(int mode)
{
	int old = PaintMouseMode;
	switch(mode)
	{
	case PAINT_MOUSE_NORMAL:
		paint_mouse = paint_mouse_normal;
		break;
	case PAINT_MOUSE_ADDITIVE:
		paint_mouse = paint_mouse_additive;
		break;
	}
	PaintMouseMode = mode;
	return old;
}

int set_fst_alpha(int alpha)
{
	int old = FstAlpha;
	switch(alpha)
	{
	case 0:
		alpha_pixel = alpha_0_1;
		break;
	case 1:
		alpha_pixel = alpha_1_1;
		break;
	case 2:
		alpha_pixel = alpha_2_1;
		break;
	case 3:
		alpha_pixel = alpha_3_1;
		break;
	case 4:
		alpha_pixel = alpha_4_1;
		break;
	case 5:
		alpha_pixel = alpha_5_1;
		break;
	case 6:
		alpha_pixel = alpha_6_1;
		break;
	case 7:
		alpha_pixel = alpha_7_1;
		break;
	}
	FstAlpha = alpha;
	return old;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -