📄 debug.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 + -