我一般来说对C ++和计算机编程还是很陌生,我正在尝试在大学项目的控制台上制作赛车游戏。我目前正在尝试了解如何使用windows.h和屏幕缓冲区,并且正在关注在线教程。到目前为止,这是我的代码:
#include <iostream>
#include <stdio.h>
#include <Windows.h>
#include <conio.h>
#include <ctime>
#define WIDTH 80
#define FIELD_W 70
#define HEIGHT 35
using namespace std;
HANDLE whdl;
HANDLE rhdl;
int main() {
srand(time(0));
SMALL_RECT window_size = { 0, 0, WIDTH-1, HEIGHT-1 };
whdl = GetStdHandle(STD_OUTPUT_HANDLE);
rhdl = GetStdHandle(STD_INPUT_HANDLE);
SetConsoleTitle(L"---RAGE RACER---");
SetConsoleWindowInfo(whdl, TRUE, &window_size);
COORD buffer_size = { WIDTH, HEIGHT };
SetConsoleScreenBufferSize(whdl, buffer_size);
COORD CharacterBufferSize = { WIDTH, HEIGHT };
COORD CharacterPosition = { 0, 0 };
SMALL_RECT console_write_area = { 0, 0, WIDTH-1, HEIGHT-1 };
CHAR_INFO buffer[WIDTH * HEIGHT];
for (int y = 0; y < HEIGHT; ++y) {
buffer[WIDTH * y + 1].Char.AsciiChar = (unsigned char)99;
for (int x = 1; x < FIELD_W; ++x) {
buffer[x].Char.AsciiChar = ' ';
}
buffer[WIDTH * y].Char.AsciiChar = (unsigned char)99;
}
WriteConsoleOutput(whdl, buffer, CharacterBufferSize, CharacterPosition, &console_write_area);
getchar();
return 0;
}
我知道for循环已关闭,问题在于,每当我运行代码时,控制台都被红色空格覆盖,如果我尝试运行另一个程序,它将正常工作,如果按动键,它们将被写成黑底白字一如既往。我正在使用Visual Studio2019。在此先感谢您,对于我可能没有意识到而写的s亵内容表示抱歉。
buffer
最初未初始化,包含随机垃圾。您初始化其元素的Char
成员,但不初始化Attributes
成员,该成员在调用WriteConsoleOutput
时仍是随机垃圾。 Attributes
是决定字符颜色的原因。
通常,您的程序通过访问未初始化的对象而表现出未定义的行为。