Hmm, dziwnie znajomy kod (a raczej jego szkielet i konstrukcja).
Kilka uwag:
- nazewnictwo klas: konwencja zakłada że nazwy klas rozpoczynają się z dużej litery, a więc: SnakePart, Game, Engine, ... .
- brak konsekwencji w nazewnictwie: jak wspomniałem powyżej większość klas ma nazwy rozpoczynające się z małych liter (podobnie nazwy plików), ale część rozpoczyna się z dużych, a więc: GameInfo, GameState; dotyczy się to także nazewnictwa obiektów: czasami rozpoczynają się małych liter, czasami z wielkich
- puste konstrukcje (niby masz obsługę błędu, ale w if'ie w linii 8 game.cpp nic nie robisz w razie błędu)
- linia 17 game.cpp powinna być przeniesiona poza główną pętlę, limit fps wystarczy ustawić tylko raz
To tyle jeżeli chodzi o rzeczy, które jakoś rzuciły mi się w oczy (przydałaby się dokładna analiza)