Как остановить мерцание в консольном приложении? - PullRequest
0 голосов
/ 12 февраля 2019

Я сделал простую игру в пинг-понг на c ++ с помощью сообщества visual studio (в windows).Я сделал это, но конечный продукт продолжает мерцать, и он не выглядит хорошо.

Я новичок в c ++.И это один из первых больших проектов, которые я пытался сделать.Проведя некоторые исследования, я обнаружил, что я создал консольное приложение, и чтобы остановить мерцание, мне придется переделать мое приложение в графике, что я не могу, поэтому я ищу способ изменить свое консольное приложение, чтобы уменьшитьМерцание.

Моя функция рисования -:

 void Draw()
{
    system("cls");
    for (int i = 0; i < width + 2; i++)
        cout << "\xB2";
    cout << endl;

    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            int ballx = ball->getX();
            int bally = ball->getY();
            int player1x = player1->getX();
            int player2x = player2->getX();
            int player1y = player1->getY();
            int player2y = player2->getY();

            if (j == 0)
                cout << "\xB2";

            if (ballx == j && bally == i)
                cout << "O";//ball
            else if (player1x == j && player1y == i)
                cout << "\xDB";//player1_segment0
            else if (player2x == j && player2y == i)
                cout << "\xDB";//player2_segment0
            /*Prints different segments of player1 in y-dir*/
            else if (player1x == j && player1y + 1 == i)
                cout << "\xDB";//player1_segment1
            else if (player1x == j && player1y + 2 == i)
                cout << "\xDB";//player1_segment2
            else if (player1x == j && player1y + 3 == i)
                cout << "\xDB";//player1_segment3
            /*Prints different segments of player2 in y-dir*/
            else if (player2x == j && player2y + 1 == i)
                cout << "\xDB";//player2_segment1
            else if (player2x == j && player2y + 2 == i)
                cout << "\xDB";//player2_segment2
            else if (player2x == j && player2y + 3 == i)
                cout << "\xDB";//player2_segment3

            else
                cout << " ";

            if (j == width - 1)
                cout << "\xB2";
        }
        cout << endl;
    }

    for (int i = 0; i < width + 2; i++)
        cout << "\xB2";
    cout << endl;
    cout << "Score 1: " << score1 << endl;
    cout << "Score 2: " << score2 << endl;
}

Спасибо.

Вот как это выглядит без мерцаний

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Очистка экрана сделает весь экран черным перед тем, как вы начнете рисовать, вызывая мерцание.

Я бы порекомендовал заглянуть в API консоли Windows (при условии, что вы рады, чтоэто работать только в окнах).Установите позицию курсора и затем нарисуйте все.

COORD coord;
coord.X = 0;
coord.Y = 0;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

Это не тот код, который я тестировал, и я не знаю, будет ли он корректно работать с cout.Вы можете заменить просмотр других операций, таких как «WriteConsole (...)»

0 голосов
/ 12 февраля 2019

вместо 'system ("cls");реализовать код для «удаления» движущихся элементов, а затем закрасить их в новой позиции.

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