Как предотвратить появление синих линий на консоли Windows во время игры ASCII? - PullRequest
0 голосов
/ 06 ноября 2018

Я столкнулся с очень необычной проблемой. На самом деле настолько необычный, что я не нашел даже упоминания о чем-либо подобном в Google. Вот сделка. Я работал над созданием компьютерной игры на основе ASCII для класса программирования. Я создал простую программу, которая перемещала прямоугольник из одного символа по экрану, когда вы нажимали четыре клавиши со стрелками. Но я быстро заметил, что когда прямоугольник двигался вправо, он оставлял след вертикальных синих линий на своем пути. Я понятия не имею, почему это происходит, и, как уже упоминалось, у Google, похоже, нет ответов. Поэтому мне интересно, есть ли способ решить эту проблему? Если вам нужна техническая информация, я запускаю ее на Windows 10 с Dev C ++.

#include <ctime>
#include <iostream>
#include <windows.h>

void writeToConsole(char chr, COORD pos) {
    static const HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    std::cout.flush(); 
    // makes sure not changing cursor during cout
    SetConsoleCursorPosition(hOut, pos); 
    // sets where next characters are printed
    std::cout << chr;
}

int main(){
    COORD squareXY = {0, 0};
    const int width = 30;
    for (int i = 0; i < width; i++)
    // prints spaces that will be overwritten
        std::cout << ' ';
    writeToConsole((char)219, squareXY);
    // (char)219 is a solid rectangle
    int lastTimeMove = clock();
    // time measured in clocks, not second
    while (true) {
        if ((clock() - lastTimeMove) > .1 * CLOCKS_PER_SEC) {
            // trigger approximately every tenth of a second
            writeToConsole(' ', squareXY);
            // erase previous
            squareXY.X = (squareXY.X  + 1) % width;
            writeToConsole((char)219, squareXY);
            lastTimeMove = clock();
        }
    }
}

UPDATE: Я обнаружил, что у кого-то похожая проблема с функцией Windows WriteConsoleOutput. Я изменил свой код, чтобы использовать эту функцию, и теперь у меня есть красные и синие линии. Вот несколько снимков экрана:

синий синий и красный

...