Bardzo fajna gra ... Widoczny podział na logiczne elementy w kodzie. Widać że trochę to przemyślałeś obiektowo :-) "Przedpiścy" już napisali trochę od siebie. Część z uwag znajdziesz w książce którą chcesz kupić :-) Poprzestałem na imporcie projektu w środowisku GNU/Linux. O uwagach już usłyszałeś :-)
1. IMHO masz trochę zbyt bardzo "rozhermetyzowane" klasy. W zasadzie to "wiadra" na atrybuty i metody bez hermetyzacji :-/
2. W kilku metodach powtarza się kod który aż się prosi o parametryzację (np. w toControl(...) w Car).
3. Wybiórczo traktujesz listę inicjalizacyjną. Raz jest, raz jest niekompletna, innym razem jest nie ma. Dodaj do przełączników ostrzeżeń kompilatora -Weffc++ . Oczywiście dobrze jest zmienić włączanie nagłówków SFML'a na -isystem aby nie brał ich pod uwagę dla ostrzeżeń :-)
4. W Engine2.cpp masz zdeprecjonowaną metodę setColor(...)
5. Z metod zwracasz "magiczne" cyfry. Jakieś 0, 2... nie lepiej zrobić tam jakieś enum?
6. Mnie osobiście razi maniera nazywania klas z użyciem samych dużych liter. To kwestia czytelności. Mi nie pasuje :-)
7. Uważaj z nazwami plików ze spacją. To zawsze prędzej czy później będzie generowało problemy.
8. Zastanawiam się czy Position nie powinno być klasą wewnętrzną Ghost. Tym bardziej że w zasadzie jest używana tylko tu.
9. Nie widzę zachowanej zasady const correctness. Są metody które pomimo braku modyfikacji zasobów, nie posiadają const.