Taki sposób jest bez sensu. Za każdym ruchem czyścisz ekran i rysujesz wszystko od nowa - wydajność zerowa.
Używaj biblioteki conio2 - tam masz bardzo dobre funkcje, m.in. putchxy(x, y, 'a') który wstawia znak 'a' na pozycję x, y. Także jest clrscr() do czyszczenia ekranu, gotoxy(x, y) do przesunięcia kursora w dane miejsce wiersza poleceń. Stosując putchxy będziesz na jeden ruch zmieniał tylko dwie rzeczy :)
No i jak już pisałem, poczytaj o vectorach, będziesz miał w bardzo oszczędnej pamięciowo wersji wszystkie elementy snake'a.
I co do poruszania się, zrealizuj to tak:
Kopiuj
char key;
int relPosX, relPosX
if (kbhit())
{
key = getch();
switch (key)
{
case 'w':
relPosX = 0;
relPosY = -1;
break;
case 's':
relPosX = 0;
relPosY = 1;
break;
case 'a':
relPosX = -1;
relPosY = 0;
break;
case 'd':
relPosX = -1;
relPosY = 0;
break;
default:
break;
}
}
Sleep(800);
I obliczasz sobie następną pozycję na którą wejdzie snake.
Sleep() masz w windows.h