Я пытаюсь сделать простую консольную игру, и я делаю своего рода консольный графический движок, который рисует экран с картой и текстом.По какой-то причине движок записывает в консоль странные символы, а не то, что предполагается записать.
Этот движок использует два двухмерных вектора, которые описывают символы и цвета, которые будут использоваться в консоли.Я использую WriteConsole()
для записи в консоль и SetConsoleTextAttribute()
для изменения цвета текста при рисовании.По какой-то причине, когда я пытаюсь напечатать текст, он пишет действительно странные символы, которые не имеют отношения к символам, предназначенным для печати.Цвета работают просто отлично, хотя.Мои символы хранятся как TCHAR
s, а мои цвета - как int
s.
Моя функция для рисования экрана:
void update()
{
for (int y = 0; y < SCREEN_HEIGHT; y++) //loop through all of the tiles
{
for (int x = 0; x < SCREEN_WIDTH; x++)
{
if (screen.at(y).at(x) != buffer.at(y).at(x) && screenColors.at(y).at(x) != bufferColors.at(y).at(x)) //only draw the tile if it has changed
{
pos.X = x; //set coords of cursor to tile to be drawn
pos.Y = y;
SetConsoleTextAttribute(hStdOut, bufferColors.at(y).at(x)); //set the text color
SetConsoleCursorPosition(hStdOut, pos); //move the cursor to the tile to be drawn
WriteConsole(hStdOut, &(buffer.at(y).at(x)), 1, dw, NULL); //actually draw the tile
screen.at(y).at(x) = buffer.at(y).at(x); //update 2d screen vector (used to read what is on the screen for other reasons)
}
}
}
SetConsoleCursorPosition(hStdOut, restPos); //move the cursor away, so it doesn't look ugly
}
Моя функция для записи в буферный вектор:
void draw2dVector(int x, int y, vector<vector<TCHAR>> draw, vector<vector<int>> colors)
{
for (unsigned int drawY = 0; drawY < draw.size(); drawY++)
{
for (unsigned int drawX = 0; drawX < draw.front().size(); drawX++)
{
buffer.at(y + drawY).at(x + drawX) = colors.at(drawY).at(drawX); // <- I found the problem. I am writing color ints to the buffer.
bufferColors.at(y + drawY).at(x + drawX) = colors.at(drawY).at(drawX);
}
}
}
Моя функция для преобразования string
с в vector<TCHAR>
с.
vector<TCHAR> stringToTCHARvector(string str, int strLen) //convert a TCHAR string to a TCHAR vector
{
vector<TCHAR> result;
for (int i = 0; i < strLen; i++) //loop through the characters in the string
{
result.push_back(str[i]); //add the character to the TCHAR vector
}
return result;
}
Я ожидаю, что результат будет выглядеть примерно так:
###....### Inventory:
####....## Gold Piece
#..##...##
#......###
###.@..###
##########
Но вместо этого он дает мне следующее:
êêêêêêêêêê *insert strange characters here, because stack overflow doesn't
êêêêêwwêêê show them*
êêêêwwwwww
êêêêwwwwww
êêêêêwwwww
êêêêêwwwww
ОБНОВЛЕНИЕ: Оказывается, проблема была в том, что я записывал ints
из моего цветового вектора в мой TCHAR
буфер.Я решил проблему.Спасибо за вашу помощь.