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)来加速绘制过程,但它仍然口吃,只是更快。

使用线程会有帮助吗? 我不善于理解他们。

这里是整个程序,主要针对那些想要测试它的人:

  #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; } } 

我知道翻译function已经完成(它现在只是向右移动),但它在当前问题上确实很重要。