Консольное приложение C ++, использующее двойное ограничение размера буфера

# include "DISPLAY.h"

DoubleBuffer::DoubleBuffer()
{
COORD size = { WINDOW_X_SIZE , WINDOW_Y_SIZE };
SMALL_RECT rect;
rect.Left = 0;
rect.Right = WINDOW_X_SIZE - 1;
rect.Top = 0;
rect.Bottom = WINDOW_Y_SIZE - 1;

hBuffer[0] = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
SetConsoleScreenBufferSize(hBuffer[0], size);
SetConsoleWindowInfo(hBuffer[0], TRUE, &rect);

hBuffer[1] = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
SetConsoleScreenBufferSize(hBuffer[1], size);
SetConsoleWindowInfo(hBuffer[1], TRUE, &rect);

CONSOLE_CURSOR_INFO cursorinfo;
cursorinfo.dwSize = 1;
cursorinfo.bVisible = FALSE;

SetConsoleCursorInfo(hBuffer[0], &cursorinfo);
SetConsoleCursorInfo(hBuffer[1], &cursorinfo);

nBufferIndex = 0;
}

void DoubleBuffer::WriteBuffer(int x, int y, char *string)
{
DWORD dw;
COORD startposition = { x,y };

SetConsoleCursorPosition(hBuffer[nBufferIndex], startposition);
WriteFile(hBuffer[nBufferIndex], string, strlen(string), &dw, NULL);
}

void DoubleBuffer::FlippBuffer()
{
Sleep(1000);
SetConsoleActiveScreenBuffer(hBuffer[nBufferIndex]);
nBufferIndex = !nBufferIndex;
}

void DoubleBuffer::ClearBuffer()
{
COORD coord = { 0,0 };
DWORD dw;
FillConsoleOutputCharacter(hBuffer[nBufferIndex], ' ', WINDOW_X_SIZE*WINDOW_Y_SIZE, coord, &dw);
}

void DoubleBuffer::ReleaseBuffer()
{
CloseHandle(hBuffer[0]);
CloseHandle(hBuffer[1]);
}

Я использовал этот код для создания двойного буфера.

Вся карта игры, которая будет напечатана с помощью функции «WriteBuffer», была спроектирована как одномерный массив символов.

Но большая проблема заключается в том, что если длина строки превышает 80, то консоль просто отображает 80 символов в одной строке независимо от размера окна консоли.

Я имею в виду, например, строка ввода

    char 1D_map[90] = {'D'};

и размер окна консоли составляет 5 * 20.

Тогда, независимо от размера окна, оно показывается как сзади.

DDDDD (.. левые 70 символов скрыты ..)

DDDDD (.. левые 5 символов скрыты ..)

Когда я потяну боковую панель окна на максимум, она будет выглядеть как сзади.

DDDDDDDDDDDDDDDD … 80 символов … DDDDDDDDDDDDDDDDD

DDDDDDDDDD

Поэтому, когда я использую эти коды, я не могу настроить размер игровой карты.
(Конкретно горизонтальный размер.)

Потому что, что бы я ни делал, это просто показывает 80 символов в строке!

Могу ли я решить проблему? или я должен применить другой метод двойной буферизации?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector