Я пытаюсь научиться использовать экранный буфер, и я допустил ошибку, которую не понимаю.Вот настройки для моего экранного буфера:
wchar_t* screen = new wchar_t[nScreenWidth * nScreenHeight];
for (int i = 0; i < nScreenWidth * nScreenHeight; i++) {
screen[i] = L' ';
}
HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
SetConsoleActiveScreenBuffer(hConsole);
DWORD dwBytesWritten = 0;
WriteConsoleOutputCharacterW(hConsole, screen, (nScreenWidth * nScreenHeight), { 0,0 }, &dwBytesWritten);
Мне удается напечатать на нем свой 2D-массив, но странно, что он ровно лежит в моем окне терминала (см. Ссылку на экран печати).
Небольшой экран печати моего неудачного 2D-массива
Это как если бы все новые строки были удалены.Это мой цикл, который печатает мой 2D-массив на «screen».
int g = 0;
while (g < 100) {
WriteConsoleOutputCharacterW(hConsole, screen, (nScreenWidth * nScreenHeight), { 0,0 }, &dwBytesWritten);
for (int i = 0; i < field.difficulty; i++) {
std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
for (int y = 0; y < field.nFieldHeight; y++) {
for (int x = 0; x < field.nFieldWidth; x++) {
screen[(y + 2) * field.nFieldWidth + (x + 2)] = field.matrix[x][y];
}
}
}
Возможно ли, что мне нужно записывать координаты в экранном буфере каждый раз, когда я печатаю символ?