Я столкнулся с очень необычной проблемой. На самом деле настолько необычный, что я не нашел даже упоминания о чем-либо подобном в 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. Я изменил свой код, чтобы использовать эту функцию, и теперь у меня есть красные и синие линии. Вот несколько снимков экрана:
синий
синий и красный