C пудра перерисовка заикания / нет жидкости

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

Я использую этот главный код для запуска программы:

int main() { int tab[28][120]; create(tab, 28, 120); paint(tab, 28, 120); char i = '1'; char direction = 'R'; while(i != 'q') { if (kbhit()) i =getch(); translate(tab, direction, 28, 120); paint(tab, 28, 120); Sleep(300); } } 

Основная проблема заключается в том, что каждый раз, когда я перерисовываю матрицу, она заикается. Я попытался поставить if(kbhit()) в цикле for() с другим вызовом paint() , принимая Sleep(300) чтобы ускорить процесс рисования, но он все еще заикается, только быстрее.

Помогло ли использование streamов? Я не понимаю их.

вот вся программа, которая идет с основным для тех, кто хочет ее протестировать:

  #include  #include  #include  #include  void paint(int tab[28][120], int ligneMax, int colonneMax) { system("cls"); for (int i = 0; i < ligneMax; i++) { for (int j = 0; j < colonneMax; j++) { printf("%c", tab[i][j]); } printf("\n"); } } void create(int tab[28][120], int Nbligne, int Nbcolonne) { int randligne = rand() % 26 + 1; int randcols = rand() % 118 + 1; for (int i = 0; i < Nbligne; i++) { for (int j = 0; j < Nbcolonne; j++) { tab[i][j] = ' '; if (i == 0 || i == Nbligne - 1) tab[i][j] = 205; if (j == 0 || j == Nbcolonne - 1) tab[i][j] = 186; if (i == 0 && j == 0) tab[i][j] = 201; if (i == 0 && j == Nbcolonne - 1) tab[i][j] = 187; if (i == Nbligne - 1 && j == 0) tab[i][j] = 200; if (i == Nbligne - 1 && j == Nbcolonne - 1) tab[i][j] = 188; if (i == 14 && j == 60) tab[i][j] = 254; if (i == 14 && j == 59) tab[i][j] = 184; if (i == 14 && j == 58) tab[i][j] = 184; if (i == randligne && j == randcols) tab[i][j] = 176; } } } void translate(int tab[28][120], char direction, int Nbligne, int Nbcolonne) { if (direction == 'R') { for (int i = 0; i < Nbligne; i++) { for (int j = 0; j < Nbcolonne; j++) { if (tab[i][j] == 254) { tab[i][j] = 184; tab[i][j + 1] = 254; goto stop; } } } stop: NULL; } } 

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