Я пытаюсь сделать простую игру со змеями на консоли. Я использую матрицу 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 <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
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;
}
}
Я знаю, что функция перевода завершена (пока она только перемещает голову), но это имеет значение в данном вопросе.