Prawdopodobnie chodzi o to, w jaki sposób obsługiwane są eventy w Allegro czy SFML
Allegro nie ma pojęcia o Twojej logice gry. Wciskasz klawisz to leci event. Jeśli logika narzuca pewne tempo gry to powinieneś obsłużyć przypadek wielokrotnych wciśnięć w trakcie jednej "tury". Na szybko dodając flage changedDirection, która pilnowałaby, żeby zmienić kierunek dało się tylko raz w ciągu tury. Mógłbyś też zrobić to porządniej i w eventach klawiszy ustawiać jedynie numer wciśniętego klawisza a faktyczną zmianę kierunku robić w ALLEGRO_EVENT_TIMER
Patrząc na Twój kod dziwne wydaje mi się wywołanie funkcji logic poza żadnym ifem - czyli dla dowolnego eventu. Oznacza to, że przeliczasz logikę kilkakrotnie na jedno poruszenie sie węża.
while(gameOver)
też jest dzwine :D
No i strasznie upośledzona tablica dynamiczna, która jest zwiększana o 1 za każdym razem zamiast hurtem np podwajając długość.