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

📄 debug.cpp

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

DEBUG_MESSAGE *msg_buffer[MAX_DEBUG_MSG]; // 指向信息的指针数组
int           msg_count = 0;              // 当前有效的信息数

// 打开这个选项将设置为DEBUG模式
#define _DEBUG_MODE_

// 初始化信息缓冲区
BOOL init_debug_msg()
{
#ifdef _DEBUG_MODE_
	for (int i = 0; i < MAX_DEBUG_MSG; i++)
	{
		msg_buffer[i] = new DEBUG_MESSAGE;
		if (msg_buffer[i] == NULL)
		{
			put_message(TRUE, 
				"错误,没有足够的内存。");
			return FALSE;
		}
		msg_buffer[i]->msg = new char [MAX_DEBUG_CHAR];
		msg_buffer[i]->delay = 0;
	}
	return TRUE;
#endif
	return TRUE;
}

// 将信息装入缓冲区
void add_message(char *format, ...)
{
#ifdef _DEBUG_MODE_
	char str[MAX_DEBUG_CHAR];
	DEBUG_MESSAGE *temp;
	temp = msg_buffer[MAX_DEBUG_MSG - 1];
	for (int i = MAX_DEBUG_MSG - 1; i > 0; i--)
		msg_buffer[i] = msg_buffer[i - 1];
	msg_buffer[0] = temp;

	va_list list;
	va_start(list, format);
	vsprintf(str, format, list);
	va_end(list);
	strcpy(msg_buffer[0]->msg, str);
	msg_buffer[0]->delay = DEBUG_DELAY;

	msg_count = msg_count < MAX_DEBUG_MSG ? msg_count + 1 : msg_count;
#endif
}

// 将信息显示在屏幕缓冲区
void show_message()
{
#ifdef _DEBUG_MODE_
	int y = DEBUG_MSG_TOP, old_style, old_alpha;
	if (DRAW_ALPHA)
		old_alpha = Alpha;
	set_alpha(0);
	old_style = set_font_style(FONT_NORMAL);
	for (int i = 0; i < msg_count; i++)
	{
		text_out(screen, DEBUG_MSG_LEFT, y, DEBUG_MSG_COLOR, msg_buffer[i]->msg);
		msg_buffer[i]->delay--;
		y += 16 + DEBUG_MSG_SPACING;
	}
	if (msg_count > 0)
	{
		if (msg_buffer[msg_count - 1]->delay < 0)
			msg_count--;
	}
	set_alpha(old_alpha);
	set_font_style(old_style);
#endif
}

// 将信息显示在屏幕上,而且必须按空白键返回
void put_message(BOOL t, char *format, ...)
{
#ifdef _DEBUG_MODE_
	if (t)
	{
		BMP *temp;
		temp = create_bitmap(SCREEN_WIDTH, SCREEN_HEIGHT, 0x0);
		if (temp == NULL)
			return;
		draw_bitmap(temp, 0, 0, screen);
		WORD color;
		if (Is555)
			color = create_color(31, 31, 31);
		else
			color = create_color(31, 63, 31);
		set_hollow(color);
		set_font_style(FONT_HOLLOW);
		set_draw_mode(DRAW_ALPHA);
		set_alpha(4);
		rect_fill(screen, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0x0);
		int title_w;
		title_w = strlen("调试信息窗口") * 8;
		set_draw_mode(DRAW_NORMAL);
		text_out(screen, (SCREEN_WIDTH - title_w) / 2, 50, 0x0, "调试信息窗口");
		rect(screen, (SCREEN_WIDTH - title_w) / 2 - 20, 40, (SCREEN_WIDTH - title_w) / 2 + title_w + 20, 76, color);
		rect(screen, (SCREEN_WIDTH - title_w) / 2 - 22, 38, (SCREEN_WIDTH - title_w) / 2 + title_w + 22, 78, color);
		line(screen, 20, 90, SCREEN_WIDTH - 1 - 20, 90, color);
		line(screen, 20, 92, SCREEN_WIDTH - 1 - 20, 92, color);
		char str[65535];
		va_list list;
		va_start(list, format);
		vsprintf(str, format, list);
		va_end(list);
		set_font_style(FONT_NORMAL);
		text_out(screen, 32, 100, color, str);
		text_out(screen, 224, 460, color, "---按空白键继续---");
		update_screen();
		wait_key(DIK_SPACE);
		game_exit();
		free_resource();
		PostQuitMessage(1);
	}
#endif
}

// 释放调试信息所占的内存
void free_debug_msg()
{
#ifdef _DEBUG_MODE_
	for (int i = 0; i < MAX_DEBUG_MSG; i++)
	{
		if (msg_buffer[i] != NULL)
		{
			if (msg_buffer[i]->msg != NULL)
				delete msg_buffer[i]->msg;
			delete msg_buffer[i];
		}
	}
#endif
}

⌨️ 快捷键说明

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