Cały czas refreshujący się program. Jestem początkujący, zna ktoś rozwiązanie ,aby program sie tak nie odświeżał co chwile? :)

0
#include <iostream>
#include <conio.h>
#include <Windows.h>
using namespace std;
bool gameOver;
const int width = 20;
const int height = 20;
int x, y, fruitX, fruitY, score;
enum eDirecton{STOP = 0,LEFT,RIGHT,UP,DOWN};
eDirecton dir;
void setup()
{
    gameOver = false;
    dir = STOP;
    x = width / 2;
    y = height / 2;
    fruitX = rand() % width;
    fruitY = rand() % height;
    score = 0;
}
void draw()
{
    system("cls");
    for (int i = 0; i < width + 2; i++)
    {
        cout << "#";
    }   
    cout << endl;

        for (int i = 0; i < height; i++)
        {
            for (int j = 0; j < width; j++)
            {
                if (j == 0)
                    cout << "#";
                if (i == y && j == x)
                {
                    cout << "O";
                }
                else if (i == fruitY && j == fruitX)
                {
                    cout << "F";
                }
                
                else
                    cout << " ";
                if (j == width - 1)
                    cout << "#";
            }
            cout << endl;
        }
        for (int i = 0; i < width+2; i++)
            cout << "#";
        cout << endl;
        cout << "Score: " << score<<endl;
}
void input()
{
    if (_kbhit())
    {
        switch(_getch())
        {
        case'a':
                dir = LEFT;
                break;
            case 'd':
                    dir = RIGHT;
                    break;
                case 'w':
                        dir = UP;
                        break;
                    case 's':
                            dir = DOWN;
                            break;
                        case 'x':
                                gameOver = true;
                                break;
        }
    }
}
void logic()
{
    switch (dir)
    {
    case LEFT:
        x--;
        break;
    case RIGHT:
        x++;
        break;
    case UP:
        y--;
        break;
    case DOWN:
        y++;
        break;
    default:
        break;
    }
    if (x > width || x < 0||y>height||y<0)
    {
        gameOver = true;
    }
    if (x == fruitX && y == fruitY)
    {
        score += 10;
        fruitX = rand() % width;
        fruitY = rand() % height;
    }
    
}
int main()
{
    setup();
    while (!gameOver)
    {
        draw();
        input();
        logic();
    }
    SetCursorPos(10, 10); 

    return 0;

}
1

Nie bardzo rozumiem, o co chodzi. Program czyści ekran co chwila, bo mu kazałeś czyścić ekran co chwila (system("cls"))…

Jak chcesz bardziej finezyjne rozwiązanie, to możesz spróbować albo odświeżać zgodnie z częstotliwością odświeżania ekranu, co znacząco ograniczy migotanie, albo skorzystać z jakiejś biblioteki do takich spraw, typu ncurses, które powinny mieć zaimplementowane sprytniejsze odświeżanie niż „wyczyść wszystko i narysuj od nowa”.

EDYCJA: Internet mi podpowiedział, że windowsowym odpowiednikiem ncurses jest pdcurses.

0

Zamiast czyścić całą konsolę, odświeżaj tylko to co się zmieniło.
Chociaż i tak lepiej jak byś użył jakiejś biblioteki ala wspomniany wcześniej ncurses

Pisane z fona

Edit:
https://stackoverflow.com/questions/34842526/update-console-without-flickering-c

1 użytkowników online, w tym zalogowanych: 0, gości: 1