Zamiast okodowania kolizji, możesz okodować jakiś prosty system AI który będzie dbał o zachowanie od siebie jakiejś odległości. Podejrzewam, że będzie trudniej niż to brzmi, ale o to chodzi :D Nauczysz się czegoś. Coś mi się wydaje, że też się zabiore za robienie czegoś takiego.
Tutaj masz troche info czym się można sugerować tworząc coś takiego: http://www.red3d.com/cwr/boids/
I może inspiracje: https://youtu.be/dM1_ku4ayC8
Same kolizje nie wiem jak miałyby wyglądać, żeby to wyglądało sensownie (po prstu nie wiem co zombie miałyby robić), dlatego myśle, że to jest najlepszy pomysł.
Btw. jeśli już piszesz kolizje, zrób sobie jakąś klase-interfejs Collideable z której będą dziedziczyć klasy mogące kolidować. Będzie ładniej, przjrzyściej i bardziej pro.
Btw. po co przechowujesz pozycje gracza ze 100 ostatnich klatek? Korzystasz tylko z indeksu 0 z tego co widze. Btw. zobacz std::deque. Ten kontener ma metode pop_front - przydałaby ci się :D