Problem ze sterowaniem w grze konsolowej snake

0

Witam.
Mam mały problem z prawidłowym napisaniem sterowania w grze konsolowej w snake wykorzystującej ascii.
Gra działa na tej zasadzie że w momencie ruchu na danych współrzędnych jest wstawiany znak z tablicy ascii.
Chodzi o to że jeżeli zaraz po zmianie kierunku zostanie od razu jeszcze raz zmieniony kierunek to nie wykonuje się od razu przez co nie można skręcić przy samym ogonie węża.
Dzieje się coś takiego jak na grafice po lewej a powinno tak jak po prawej.
screenshot-20171128113228.png
Fragment kodu odpowiedzialny za sterowanie:

    if (kbhit()){
    switch(getch()){
        case 0:{
        case 77: if (kierunek!=1) kierunek=0; break;//prawo
        case 75: if (kierunek!=0) kierunek=1; break;//lewo
        case 72: if (kierunek!=3) kierunek=2; break;//gora
        case 80: if (kierunek!=2) kierunek=3; break;//dol
        }break;
    }//switch
    }//if (kbhit())
    switch(kierunek){
        case 0: x=x+2; break;//prawo
        case 1: x=x-2; break;//lewo
        case 2: y=y-1; break;//gora
        case 3: y=y+1; break;//dol
    }

Cały kod programu: https://github.com/stanik120/CPP/blob/master/snake/main.cpp

0

case 0: x=x+2; break;//prawo
case 1: x=x-2; break;//lewo

tak ma być?

0
Wesoły Polityk napisał(a):

case 0: x=x+2; break;//prawo
case 1: x=x-2; break;//lewo

tak ma być?

Tak. chodzi o to że jeden segment tego węża zajmuje dwa pola na osi x tak żeby wąż był kwadratowy a nie prostokątny, dlatego na osi x współrzedne zmieniają się co 2

1

Zmień na while (kbhit()) i sprawdź, czy cokolwiek to zmieni.

0
west napisał(a):

Zmień na while (kbhit()) i sprawdź, czy cokolwiek to zmieni.

Pomogło, program działa poprawnie.
Wielkie dzięki za pomoc ;)

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