Мой код печатает странные символы вместо того, что он предназначен для печати - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь сделать простую консольную игру, и я делаю своего рода консольный графический движок, который рисует экран с картой и текстом.По какой-то причине движок записывает в консоль странные символы, а не то, что предполагается записать.

Этот движок использует два двухмерных вектора, которые описывают символы и цвета, которые будут использоваться в консоли.Я использую 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 буфер.Я решил проблему.Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...